diff --git a/DEPS b/DEPS
index 4b288ab..780b27f 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': 'f72e48dd2ff0ca9ecea2655eaa45e29c8ac587dd',
+  'skia_revision': '504032e57526923e9deda5cca6ae5380772195cc',
   # 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': 'c83d5e246faef119952f4ad645062d380b79781c',
+  'v8_revision': 'd2cad7137654e04a5328728551c51a1b79145a5d',
   # 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.
@@ -193,11 +193,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': 'dcc57015f8922c93e9680f15c300d7c353082e00',
+  'angle_revision': 'c792a6bacf68778aa38a1a5850f1fdca6f117e41',
   # 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': '110236f3ce70c292658b1b7372903dc55f43ad35',
+  'swiftshader_revision': 'f6d3cbb2830306f3ef51a72cd3f798684d107c14',
   # 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': '9dbcda838560ceb6eb6ce90e92152a60ed95dcb3',
+  'catapult_revision': 'f6f813d450e5e09c1e5f3c0f0afa00c5892864f4',
   # 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': '5a8f4d89e1e624ade403ee72cb4c0de70262a397',
+  'devtools_frontend_revision': '2ef3661d276c4d31381479c25e0f2cd4153fe6eb',
   # 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': '0b9a2992c73d41debe4924d9f39260f773b5840a',
+  'shaderc_revision': '3f24b6829b3e7da9c97b779402311ece81264ca8',
   # 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': 'e6441b604f58bf01a17ee991fa82f864fc6fc087',
+  'dawn_revision': '5fc2c82c11e078928e6a0f9c447b69fe208815f8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -879,7 +879,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'c80b27e14b360133f92c7b7f9fee869e0461dd9a',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'd911a9f90cdf517f5e55a4c591198af46a886618',
       'condition': 'checkout_linux',
   },
 
@@ -1297,7 +1297,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '63dded1f4d55df31f1d0d74fcb1646a5d26c5145',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '920683437e19b65d3a6a23a0c539cf9106f1a5cb',
 
   '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' + '@' + '9b289b2c2973a35d5da3929b6dabf1d26ca49cba',
+    Var('webrtc_git') + '/src.git' + '@' + '4b07059139178636809b3d9eee961da0b9c92437',
 
   '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@079a14224dd125991756d2d512944d9fcd1a46c7',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@3f1bd1b88a315c2ff9cca3c5efde1be681128bba',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/android_webview/common/aw_content_client.cc b/android_webview/common/aw_content_client.cc
index c7afc0a..22262d8 100644
--- a/android_webview/common/aw_content_client.cc
+++ b/android_webview/common/aw_content_client.cc
@@ -17,7 +17,6 @@
 #include "content/public/common/content_switches.h"
 #include "gpu/config/gpu_info.h"
 #include "gpu/config/gpu_util.h"
-#include "ipc/ipc_message.h"
 #include "mojo/public/cpp/bindings/binder_map.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -52,14 +51,6 @@
       resource_id);
 }
 
-bool AwContentClient::CanSendWhileSwappedOut(const IPC::Message* message) {
-  // For legacy API support we perform a few browser -> renderer synchronous IPC
-  // messages that block the browser. However, the synchronous IPC replies might
-  // be dropped by the renderer during a swap out, deadlocking the browser.
-  // Because of this we should never drop any synchronous IPC replies.
-  return message->type() == IPC_REPLY_ID;
-}
-
 void AwContentClient::SetGpuInfo(const gpu::GPUInfo& gpu_info) {
   gpu_fingerprint_ = gpu_info.gl_version + '|' + gpu_info.gl_vendor + '|' +
                      gpu_info.gl_renderer;
diff --git a/android_webview/common/aw_content_client.h b/android_webview/common/aw_content_client.h
index 8071233..cbb7dd2 100644
--- a/android_webview/common/aw_content_client.h
+++ b/android_webview/common/aw_content_client.h
@@ -23,7 +23,6 @@
   base::StringPiece GetDataResource(int resource_id,
                                     ui::ScaleFactor scale_factor) override;
   base::RefCountedMemory* GetDataResourceBytes(int resource_id) override;
-  bool CanSendWhileSwappedOut(const IPC::Message* message) override;
   void SetGpuInfo(const gpu::GPUInfo& gpu_info) override;
   bool UsingSynchronousCompositing() override;
   media::MediaDrmBridgeClient* GetMediaDrmBridgeClient() override;
diff --git a/android_webview/docs/aosp-system-integration.md b/android_webview/docs/aosp-system-integration.md
index ea7ef0d..3b8a0764 100644
--- a/android_webview/docs/aosp-system-integration.md
+++ b/android_webview/docs/aosp-system-integration.md
@@ -195,10 +195,6 @@
 # Disable Google-specific branding/features
 is_chrome_branded = false
 use_official_google_api_keys = false
-
-# Significantly reduces binary size at the cost of preventing Android's native
-# crash handler from being able to produce useful stack unwindings.
-exclude_unwind_tables = true
 ```
 
 The `target_cpu` option must be set to
@@ -271,6 +267,24 @@
 proprietary_codecs = true
 ```
 
+#### Crash stack unwinding
+
+By default, builds using `is_official_build = true` exclude unwind tables from
+the binaries, as they significantly increase binary size. Google's builds rely
+on crashes being reported using Crashpad, which can then be decoded server-side.
+If you don't intend to enable Crashpad and set up dedicated crash reporting
+infrastructure for your WebView, you may wish to re-enable the unwind tables
+with the following GN argument:
+
+``` gn
+exclude_unwind_tables = false
+```
+
+This will allow Android's debuggerd to produce meaningful stack traces for
+crashes that occur inside WebView's native code. We don't recommend using this
+setting in shipping builds due to the binary size impact, but it may be the only
+alternative if using Crashpad is impractical.
+
 #### Other build options
 
 Other build options may be used but are not supported by the WebView team and
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumAwInit.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumAwInit.java
index da6e00f..b7b24aab 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumAwInit.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumAwInit.java
@@ -30,6 +30,7 @@
 import org.chromium.android_webview.AwServiceWorkerController;
 import org.chromium.android_webview.AwTracingController;
 import org.chromium.android_webview.HttpAuthDatabase;
+import org.chromium.android_webview.ProductConfig;
 import org.chromium.android_webview.R;
 import org.chromium.android_webview.VariationsSeedLoader;
 import org.chromium.android_webview.WebViewChromiumRunQueue;
@@ -40,6 +41,7 @@
 import org.chromium.android_webview.gfx.AwDrawFnImpl;
 import org.chromium.base.BuildConfig;
 import org.chromium.base.BuildInfo;
+import org.chromium.base.BundleUtils;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.FieldTrialList;
 import org.chromium.base.JNIUtils;
@@ -147,6 +149,8 @@
             ResourceBundle.setAvailablePakLocales(
                     new String[] {}, AwLocaleConfig.getWebViewSupportedPakLocales());
 
+            BundleUtils.setIsBundle(ProductConfig.IS_BUNDLE);
+
             // We are rewriting Java resources in the background.
             // NOTE: Any reference to Java resources will cause a crash.
 
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
index 0761e49..fefc338 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
@@ -34,10 +34,10 @@
 import org.chromium.android_webview.AwBrowserProcess;
 import org.chromium.android_webview.AwSettings;
 import org.chromium.android_webview.AwSwitches;
+import org.chromium.android_webview.ProductConfig;
 import org.chromium.android_webview.WebViewChromiumRunQueue;
 import org.chromium.android_webview.common.CommandLineUtil;
 import org.chromium.base.BuildInfo;
-import org.chromium.base.BundleUtils;
 import org.chromium.base.CommandLine;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
@@ -391,7 +391,7 @@
 
     public static boolean preloadInZygote() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
-                && Build.VERSION.SDK_INT < Build.VERSION_CODES.P && BundleUtils.isBundle()) {
+                && Build.VERSION.SDK_INT < Build.VERSION_CODES.P && ProductConfig.IS_BUNDLE) {
             // Apply workaround if we're a bundle on O, where the split APK handling bug exists.
             SplitApkWorkaround.apply();
         }
diff --git a/base/android/bundle_utils.cc b/base/android/bundle_utils.cc
index e2ee545b..d227b7c 100644
--- a/base/android/bundle_utils.cc
+++ b/base/android/bundle_utils.cc
@@ -63,7 +63,8 @@
 
 // static
 bool BundleUtils::IsBundle() {
-  return Java_BundleUtils_isBundle(base::android::AttachCurrentThread());
+  return Java_BundleUtils_isBundleForNative(
+      base::android::AttachCurrentThread());
 }
 
 // static
diff --git a/base/android/java/src/org/chromium/base/BundleUtils.java b/base/android/java/src/org/chromium/base/BundleUtils.java
index 7e2b490..138398f 100644
--- a/base/android/java/src/org/chromium/base/BundleUtils.java
+++ b/base/android/java/src/org/chromium/base/BundleUtils.java
@@ -8,12 +8,51 @@
 
 import org.chromium.base.annotations.CalledByNative;
 
-/** Utils to help working with android app bundles. */
-public class BundleUtils {
-    /* Returns true if the current build is a bundle. */
+/**
+ * Utils for working with android app bundles.
+ *
+ * Important notes about bundle status as interpreted by this class:
+ *
+ * <ul>
+ *   <li>If {@link BuildConfig#BUNDLES_SUPPORTED} is false, then we are definitely not in a bundle,
+ *   and ProGuard is able to strip out the bundle support library.</li>
+ *   <li>If {@link BuildConfig#BUNDLES_SUPPORTED} is true, then we MIGHT be in a bundle.
+ *   {@link BundleUtils#sIsBundle} is the source of truth.</li>
+ * </ul>
+ *
+ * We need two fields to store one bit of information here to ensure that ProGuard can optimize out
+ * the bundle support library (since {@link BuildConfig#BUNDLES_SUPPORTED} is final) and so that
+ * we can dynamically set whether or not we're in a bundle for targets that use static shared
+ * library APKs.
+ */
+public final class BundleUtils {
+    private static Boolean sIsBundle;
+
+    /**
+     * {@link BundleUtils#isBundle()}  is not called directly by native because
+     * {@link CalledByNative} prevents inlining, causing the bundle support lib to not be
+     * removed non-bundle builds.
+     *
+     * @return true if the current build is a bundle.
+     */
     @CalledByNative
+    public static boolean isBundleForNative() {
+        return isBundle();
+    }
+
+    /**
+     * @return true if the current build is a bundle.
+     */
     public static boolean isBundle() {
-        return BuildConfig.IS_BUNDLE;
+        if (!BuildConfig.BUNDLES_SUPPORTED) {
+            return false;
+        }
+        assert sIsBundle != null;
+        return sIsBundle;
+    }
+
+    public static void setIsBundle(boolean isBundle) {
+        sIsBundle = isBundle;
     }
 
     /* Returns absolute path to a native library in a feature module. */
diff --git a/base/android/java/templates/BuildConfig.template b/base/android/java/templates/BuildConfig.template
index f09ebf0..4f80588 100644
--- a/base/android/java/templates/BuildConfig.template
+++ b/base/android/java/templates/BuildConfig.template
@@ -69,11 +69,10 @@
     public static MAYBE_FINAL int MIN_SDK_VERSION = 1;
 #endif
 
-    // Not making this final for BundleTestRule to modify.
-#if defined(_IS_BUNDLE)
-    public static boolean IS_BUNDLE = true;
+#if defined(_BUNDLES_SUPPORTED)
+    public static MAYBE_FINAL boolean BUNDLES_SUPPORTED = true;
 #else
-    public static boolean IS_BUNDLE;
+    public static MAYBE_FINAL boolean BUNDLES_SUPPORTED MAYBE_FALSE;
 #endif
 
 #if defined(_IS_INCREMENTAL_INSTALL)
diff --git a/base/test/android/javatests/src/org/chromium/base/test/BundleTestRule.java b/base/test/android/javatests/src/org/chromium/base/test/BundleTestRule.java
index 9e1db3e3..9ab0024 100644
--- a/base/test/android/javatests/src/org/chromium/base/test/BundleTestRule.java
+++ b/base/test/android/javatests/src/org/chromium/base/test/BundleTestRule.java
@@ -8,7 +8,7 @@
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
 
-import org.chromium.base.BuildConfig;
+import org.chromium.base.BundleUtils;
 
 /**
  * Ensures that BundleUtils#isBundle returns true for the duration of the test.
@@ -19,12 +19,12 @@
         return new Statement() {
             @Override
             public void evaluate() throws Throwable {
-                boolean oldValue = BuildConfig.IS_BUNDLE;
+                boolean oldValue = BundleUtils.isBundle();
                 try {
-                    BuildConfig.IS_BUNDLE = true;
+                    BundleUtils.setIsBundle(true);
                     base.evaluate();
                 } finally {
-                    BuildConfig.IS_BUNDLE = oldValue;
+                    BundleUtils.setIsBundle(oldValue);
                 }
             }
         };
diff --git a/base/test/task_environment.cc b/base/test/task_environment.cc
index 2f730e6..9085791f 100644
--- a/base/test/task_environment.cc
+++ b/base/test/task_environment.cc
@@ -354,11 +354,13 @@
     MainThreadType main_thread_type,
     ThreadPoolExecutionMode thread_pool_execution_mode,
     ThreadingMode threading_mode,
+    ThreadPoolCOMEnvironment thread_pool_com_environment,
     bool subclass_creates_default_taskrunner,
     trait_helpers::NotATraitTag)
     : main_thread_type_(main_thread_type),
       thread_pool_execution_mode_(thread_pool_execution_mode),
       threading_mode_(threading_mode),
+      thread_pool_com_environment_(thread_pool_com_environment),
       subclass_creates_default_taskrunner_(subclass_creates_default_taskrunner),
       sequence_manager_(
           CreateSequenceManagerForMainThreadType(main_thread_type)),
@@ -434,18 +436,10 @@
   ThreadPoolInstance::InitParams init_params(kMaxThreads);
   init_params.suggested_reclaim_time = TimeDelta::Max();
 #if defined(OS_WIN)
-  // Enable the MTA in unit tests to match the browser process's
-  // ThreadPoolInstance configuration.
-  //
-  // This has the adverse side-effect of enabling the MTA in non-browser unit
-  // tests as well but the downside there is not as bad as not having it in
-  // browser unit tests. It just means some COM asserts may pass in unit tests
-  // where they wouldn't in integration tests or prod. That's okay because unit
-  // tests are already generally very loose on allowing I/O, waits, etc. Such
-  // misuse will still be caught in later phases (and COM usage should already
-  // be pretty much inexistent in sandboxed processes).
-  init_params.common_thread_pool_environment =
-      ThreadPoolInstance::InitParams::CommonThreadPoolEnvironment::COM_MTA;
+  if (thread_pool_com_environment_ == ThreadPoolCOMEnvironment::COM_MTA) {
+    init_params.common_thread_pool_environment =
+        ThreadPoolInstance::InitParams::CommonThreadPoolEnvironment::COM_MTA;
+  }
 #endif
 
   auto task_tracker = std::make_unique<TestTaskTracker>();
diff --git a/base/test/task_environment.h b/base/test/task_environment.h
index 01d19d9..c8d1d71 100644
--- a/base/test/task_environment.h
+++ b/base/test/task_environment.h
@@ -156,6 +156,28 @@
     DEFAULT = MULTIPLE_THREADS
   };
 
+  // On Windows, sets the COM environment for the ThreadPoolInstance. Ignored
+  // on other platforms.
+  enum class ThreadPoolCOMEnvironment {
+    // Do not initialize COM for the pool's workers.
+    NONE,
+
+    // Place the pool's workers in a COM MTA.
+    COM_MTA,
+
+    // Enable the MTA by default in unit tests to match the browser process's
+    // ThreadPoolInstance configuration.
+    //
+    // This has the adverse side-effect of enabling the MTA in non-browser unit
+    // tests as well but the downside there is not as bad as not having it in
+    // browser unit tests. It just means some COM asserts may pass in unit
+    // tests where they wouldn't in integration tests or prod. That's okay
+    // because unit tests are already generally very loose on allowing I/O,
+    // waits, etc. Such misuse will still be caught in later phases (and COM
+    // usage should already be pretty much inexistent in sandboxed processes).
+    DEFAULT = COM_MTA,
+  };
+
   // List of traits that are valid inputs for the constructor below.
   struct ValidTraits {
     ValidTraits(TimeSource);
@@ -163,6 +185,7 @@
     ValidTraits(ThreadPoolExecutionMode);
     ValidTraits(SubclassCreatesDefaultTaskRunner);
     ValidTraits(ThreadingMode);
+    ValidTraits(ThreadPoolCOMEnvironment);
   };
 
   // Constructor accepts zero or more traits which customize the testing
@@ -180,6 +203,9 @@
                                    ThreadPoolExecutionMode::DEFAULT>(traits...),
             trait_helpers::GetEnum<ThreadingMode, ThreadingMode::DEFAULT>(
                 traits...),
+            trait_helpers::GetEnum<ThreadPoolCOMEnvironment,
+                                   ThreadPoolCOMEnvironment::DEFAULT>(
+                traits...),
             trait_helpers::HasTrait<SubclassCreatesDefaultTaskRunner,
                                     TaskEnvironmentTraits...>(),
             trait_helpers::NotATraitTag()) {}
@@ -329,12 +355,14 @@
                   MainThreadType main_thread_type,
                   ThreadPoolExecutionMode thread_pool_execution_mode,
                   ThreadingMode threading_mode,
+                  ThreadPoolCOMEnvironment thread_pool_com_environment,
                   bool subclass_creates_default_taskrunner,
                   trait_helpers::NotATraitTag tag);
 
   const MainThreadType main_thread_type_;
   const ThreadPoolExecutionMode thread_pool_execution_mode_;
   const ThreadingMode threading_mode_;
+  const ThreadPoolCOMEnvironment thread_pool_com_environment_;
   const bool subclass_creates_default_taskrunner_;
 
   std::unique_ptr<sequence_manager::SequenceManager> sequence_manager_;
diff --git a/base/test/task_environment_unittest.cc b/base/test/task_environment_unittest.cc
index e6a929e..623ec9dd 100644
--- a/base/test/task_environment_unittest.cc
+++ b/base/test/task_environment_unittest.cc
@@ -44,6 +44,10 @@
 #include "base/files/file_descriptor_watcher_posix.h"
 #endif  // defined(OS_POSIX)
 
+#if defined(OS_WIN)
+#include "base/win/scoped_com_initializer.h"
+#endif
+
 namespace base {
 namespace test {
 
@@ -1199,5 +1203,58 @@
   run_loop.Run();
 }
 
+#if defined(OS_WIN)
+namespace {
+
+enum class ApartmentType {
+  kSTA,
+  kMTA,
+};
+
+void InitializeSTAApartment() {
+  base::win::ScopedCOMInitializer initializer;
+  EXPECT_TRUE(initializer.Succeeded());
+}
+
+void InitializeMTAApartment() {
+  base::win::ScopedCOMInitializer initializer(
+      base::win::ScopedCOMInitializer::kMTA);
+  EXPECT_TRUE(initializer.Succeeded());
+}
+
+void InitializeCOMOnWorker(
+    TaskEnvironment::ThreadPoolCOMEnvironment com_environment,
+    ApartmentType apartment_type) {
+  TaskEnvironment task_environment(com_environment);
+  PostTask(FROM_HERE, BindOnce(apartment_type == ApartmentType::kSTA
+                                   ? &InitializeSTAApartment
+                                   : &InitializeMTAApartment));
+  task_environment.RunUntilIdle();
+}
+
+}  // namespace
+
+TEST_F(TaskEnvironmentTest, DefaultCOMEnvironment) {
+  // Attempt to initialize an MTA COM apartment. Expect this to succeed since
+  // the thread is already in an MTA apartment.
+  InitializeCOMOnWorker(TaskEnvironment::ThreadPoolCOMEnvironment::DEFAULT,
+                        ApartmentType::kMTA);
+
+  // Attempt to initialize an STA COM apartment. Expect this to fail since the
+  // thread is already in an MTA apartment.
+  EXPECT_DCHECK_DEATH(InitializeCOMOnWorker(
+      TaskEnvironment::ThreadPoolCOMEnvironment::DEFAULT, ApartmentType::kSTA));
+}
+
+TEST_F(TaskEnvironmentTest, NoCOMEnvironment) {
+  // Attempt to initialize both MTA and STA COM apartments. Both should succeed
+  // when the thread is not already in an apartment.
+  InitializeCOMOnWorker(TaskEnvironment::ThreadPoolCOMEnvironment::NONE,
+                        ApartmentType::kMTA);
+  InitializeCOMOnWorker(TaskEnvironment::ThreadPoolCOMEnvironment::NONE,
+                        ApartmentType::kSTA);
+}
+#endif
+
 }  // namespace test
 }  // namespace base
diff --git a/base/trace_event/builtin_categories.h b/base/trace_event/builtin_categories.h
index 04b9fce..5c8844f 100644
--- a/base/trace_event/builtin_categories.h
+++ b/base/trace_event/builtin_categories.h
@@ -184,7 +184,6 @@
   X(TRACE_DISABLED_BY_DEFAULT("gpu.device"))                             \
   X(TRACE_DISABLED_BY_DEFAULT("gpu.service"))                            \
   X(TRACE_DISABLED_BY_DEFAULT("histogram_samples"))                      \
-  X(TRACE_DISABLED_BY_DEFAULT("ipc.flow"))                               \
   X(TRACE_DISABLED_BY_DEFAULT("java-heap-profiler"))                     \
   X(TRACE_DISABLED_BY_DEFAULT("layer-element"))                          \
   X(TRACE_DISABLED_BY_DEFAULT("lifecycles"))                             \
diff --git a/base/util/type_safety/id_type.h b/base/util/type_safety/id_type.h
index 29d1eb8e..7874879 100644
--- a/base/util/type_safety/id_type.h
+++ b/base/util/type_safety/id_type.h
@@ -49,7 +49,30 @@
 template <typename TypeMarker, typename WrappedType, WrappedType kInvalidValue>
 class IdType : public StrongAlias<TypeMarker, WrappedType> {
  public:
+  static_assert(kInvalidValue <= 0,
+                "The invalid value should be negative or equal to zero to "
+                "avoid overflow issues.");
+
   using StrongAlias<TypeMarker, WrappedType>::StrongAlias;
+
+  // This class can be used to generate unique IdTypes. It keeps an internal
+  // counter that is continually increased by one every time an ID is generated.
+  class Generator {
+   public:
+    Generator() = default;
+    ~Generator() = default;
+
+    // Generates the next unique ID.
+    IdType GenerateNextId() { return FromUnsafeValue(next_id_++); }
+
+    // Non-copyable.
+    Generator(const Generator&) = delete;
+    Generator& operator=(const Generator&) = delete;
+
+   private:
+    WrappedType next_id_ = kInvalidValue + 1;
+  };
+
   // Default-construct in the null state.
   IdType() : StrongAlias<TypeMarker, WrappedType>::StrongAlias(kInvalidValue) {}
 
diff --git a/base/util/type_safety/id_type_unittest.cc b/base/util/type_safety/id_type_unittest.cc
index ad76acb..04be50f 100644
--- a/base/util/type_safety/id_type_unittest.cc
+++ b/base/util/type_safety/id_type_unittest.cc
@@ -26,6 +26,20 @@
   EXPECT_FALSE(foo_id.is_null());
 }
 
+TEST(IdType, Generator) {
+  FooId::Generator foo_id_generator;
+  for (int i = 1; i < 10; i++)
+    EXPECT_EQ(foo_id_generator.GenerateNextId(), FooId::FromUnsafeValue(i));
+}
+
+TEST(IdType, GeneratorWithNonZeroInvalidValue) {
+  using TestId = IdType<class TestIdTag, int, -1>;
+
+  TestId::Generator test_id_generator;
+  for (int i = 0; i < 10; i++)
+    EXPECT_EQ(test_id_generator.GenerateNextId(), TestId::FromUnsafeValue(i));
+}
+
 class IdTypeSpecificValueTest : public ::testing::TestWithParam<int> {
  protected:
   FooId test_id() { return FooId::FromUnsafeValue(GetParam()); }
diff --git a/build/android/java/templates/ProductConfig.template b/build/android/java/templates/ProductConfig.template
index cf4ba125..dee8f82 100644
--- a/build/android/java/templates/ProductConfig.template
+++ b/build/android/java/templates/ProductConfig.template
@@ -8,10 +8,12 @@
 #define MAYBE_FINAL final
 #define MAYBE_USE_CHROMIUM_LINKER = USE_CHROMIUM_LINKER_VALUE
 #define MAYBE_USE_MODERN_LINKER = USE_MODERN_LINKER_VALUE
+#define MAYBE_IS_BUNDLE = IS_BUNDLE_VALUE
 #else
 #define MAYBE_FINAL
 #define MAYBE_USE_CHROMIUM_LINKER
 #define MAYBE_USE_MODERN_LINKER
+#define MAYBE_IS_BUNDLE
 #endif
 
 /**
@@ -37,4 +39,5 @@
 
    public static MAYBE_FINAL boolean USE_CHROMIUM_LINKER MAYBE_USE_CHROMIUM_LINKER;
    public static MAYBE_FINAL boolean USE_MODERN_LINKER MAYBE_USE_MODERN_LINKER;
+   public static MAYBE_FINAL boolean IS_BUNDLE MAYBE_IS_BUNDLE;
 }
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index 982efeb..f7257bb 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -1939,7 +1939,9 @@
   #       variables must not be set.
   #   enable_multidex: Value for ENABLE_MULTIDEX.
   #   min_sdk_version: Value for MIN_SDK_VERSION.
-  #
+  #   bundles_supported: Whether or not this target can be treated as a bundle.
+  #   resources_version_variable:
+  #   is_incremental_install:
   template("generate_build_config_srcjar") {
     java_cpp_template(target_name) {
       package_path = "org/chromium/base"
@@ -1963,8 +1965,8 @@
         defines += [ "_IS_CHROME_BRANDED" ]
       }
 
-      if (defined(invoker.is_bundle_module) && invoker.is_bundle_module) {
-        defines += [ "_IS_BUNDLE" ]
+      if (defined(invoker.bundles_supported) && invoker.bundles_supported) {
+        defines += [ "_BUNDLES_SUPPORTED" ]
       }
 
       if (defined(invoker.is_incremental_install) &&
@@ -2001,15 +2003,17 @@
   #
   # Variables:
   #   build_config: Path to build_config used for locale lists.
+  #   is_bundle_module: Whether or not this target is part of a bundle build.
   #   java_package: Java package for the generated class.
   #   use_chromium_linker:
   #   use_modern_linker:
   template("generate_product_config_srcjar") {
     java_cpp_template(target_name) {
       defines = []
-      _use_final = defined(invoker.build_config) ||
-                   defined(invoker.use_chromium_linker) ||
-                   defined(invoker.use_modern_linker)
+      _use_final =
+          defined(invoker.build_config) ||
+          defined(invoker.use_chromium_linker) ||
+          defined(invoker.use_modern_linker) || defined(invoker.is_bundle)
       if (_use_final) {
         defines += [ "USE_FINAL" ]
       }
@@ -2024,9 +2028,11 @@
           defined(invoker.use_chromium_linker) && invoker.use_chromium_linker
       _use_modern_linker =
           defined(invoker.use_modern_linker) && invoker.use_modern_linker
+      _is_bundle = defined(invoker.is_bundle_module) && invoker.is_bundle_module
       defines += [
         "USE_CHROMIUM_LINKER_VALUE=$_use_chromium_linker",
         "USE_MODERN_LINKER_VALUE=$_use_modern_linker",
+        "IS_BUNDLE_VALUE=$_is_bundle",
       ]
       if (defined(invoker.build_config)) {
         forward_variables_from(invoker,
@@ -2149,6 +2155,8 @@
   #     use when compiling the sources given to this target (optional).
   #   processor_args_javac: List of args to pass to annotation processors when
   #     compiling sources given to this target (optional).
+  #   bundles_supported: Enable Java code to treat this target as a bundle
+  #     whether (by default determined by the target type).
   template("android_apk_or_module") {
     forward_variables_from(invoker, [ "testonly" ])
     assert(defined(invoker.android_manifest))
@@ -2729,11 +2737,12 @@
 
     if (_generate_buildconfig_java) {
       generate_build_config_srcjar("${_template_name}__build_config_srcjar") {
-        forward_variables_from(invoker,
-                               [
-                                 "is_bundle_module",
-                                 "min_sdk_version",
-                               ])
+        forward_variables_from(invoker, [ "min_sdk_version" ])
+        _bundles_supported = _is_bundle_module || _is_static_library_provider
+        if (defined(invoker.bundles_supported)) {
+          _bundles_supported = invoker.bundles_supported
+        }
+        bundles_supported = _bundles_supported
         use_final_fields = true
         enable_multidex = _enable_multidex
         is_incremental_install = _incremental_apk
@@ -2753,6 +2762,7 @@
         _locale_target_name =
             "${_template_name}_${_package}__product_config_srcjar"
         generate_product_config_srcjar("$_locale_target_name") {
+          forward_variables_from(invoker, [ "is_bundle_module" ])
           build_config = _build_config
           java_package = _package
           use_chromium_linker = _use_chromium_linker
@@ -3472,6 +3482,7 @@
                                "apk_under_test",
                                "app_as_shared_lib",
                                "build_hooks_android_impl_deps",
+                               "bundles_supported",
                                "chromium_code",
                                "command_line_flags_file",
                                "create_apk_script",
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index d9253fb..d8c4fd6e 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -143,10 +143,11 @@
   # rest with 0xAA. This makes behavior of uninitialized memory bugs consistent,
   # recognizeble in debugger, and crashes memory accesses by uninitialized
   # pointers.
-  # TODO(vitalybuka):
+  # TODO(vitalybuka): investigate why some debug windows bots fail tests.
   # 'is_android' breaks content_shell_test_apk on android-kitkat-arm-rel.
   # 'use_xcode_clang' may call old clang.
-  init_stack_vars = !is_android && !use_xcode_clang && !is_official_build
+  init_stack_vars = !is_android && !(is_win && is_debug) && !use_xcode_clang &&
+                    !is_official_build
 }
 
 declare_args() {
diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni
index 2a11c00..0766109 100644
--- a/build/config/compiler/compiler.gni
+++ b/build/config/compiler/compiler.gni
@@ -85,19 +85,21 @@
   # is_component_build=false. Very large debug symbols can have unwanted side
   # effects so this is enforced by default for chromium.
   forbid_non_component_debug_builds = build_with_chromium
+
+  # Exclude unwind tables by default for official builds as unwinding can be
+  # done from stack dumps produced by Crashpad at a later time "offline" in the
+  # crash server. Since this increases binary size, we don't recommend including
+  # them in shipping builds.
+  # For unofficial (e.g. development) builds and non-Chrome branded (e.g. Cronet
+  # which doesn't use Crashpad, crbug.com/479283) builds it's useful to be able
+  # to unwind at runtime.
+  exclude_unwind_tables =
+      is_official_build || (is_chromecast && !is_cast_desktop_build &&
+                            !is_debug && !cast_is_debug && !is_fuchsia)
 }
 
 assert(!is_cfi || use_thin_lto, "CFI requires ThinLTO")
 
-# Exclude unwind tables for official builds as unwinding can be done from stack
-# dumps produced by Crashpad at a later time "offline" in the crash server.
-# For unofficial (e.g. development) builds and non-Chrome branded (e.g. Cronet
-# which doesn't use Crashpad, crbug.com/479283) builds it's useful to be able
-# to unwind at runtime.
-exclude_unwind_tables =
-    is_official_build || (is_chromecast && !is_cast_desktop_build &&
-                          !is_debug && !cast_is_debug && !is_fuchsia)
-
 # If true, optimize for size. Does not affect windows builds.
 # Linux & Mac favor speed over size.
 # TODO(brettw) it's weird that Mac and desktop Linux are different. We should
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 08e3ec8a..36ab6a0e 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-8891669784849215056
\ No newline at end of file
+8891642320425975984
\ No newline at end of file
diff --git a/cc/metrics/frame_sequence_tracker.cc b/cc/metrics/frame_sequence_tracker.cc
index 9010d82..1048155f 100644
--- a/cc/metrics/frame_sequence_tracker.cc
+++ b/cc/metrics/frame_sequence_tracker.cc
@@ -417,6 +417,16 @@
 FrameSequenceTracker::~FrameSequenceTracker() {
 }
 
+void FrameSequenceTracker::ScheduleTerminate() {
+  termination_status_ = TerminationStatus::kScheduledForTermination;
+  // It could happen that a main/impl frame is generated, but never processed
+  // (didn't report no damage and didn't submit) when this happens.
+  if (last_processed_impl_sequence_ < last_started_impl_sequence_) {
+    impl_throughput().frames_expected -=
+        begin_impl_frame_data_.previous_sequence_delta;
+  }
+}
+
 void FrameSequenceTracker::ReportMetricsForTesting() {
   metrics_->ReportMetrics();
 }
@@ -437,12 +447,12 @@
 
   DCHECK_EQ(last_started_impl_sequence_, 0u) << TRACKER_DCHECK_MSG;
   DCHECK_EQ(last_processed_impl_sequence_, 0u) << TRACKER_DCHECK_MSG;
-  last_started_impl_sequence_ = args.frame_id.sequence_number;
 
   if (args.type == viz::BeginFrameArgs::NORMAL)
     impl_frames_.insert(args.frame_id);
 #endif
 
+  last_started_impl_sequence_ = args.frame_id.sequence_number;
   if (reset_all_state_) {
     begin_impl_frame_data_ = {};
     begin_main_frame_data_ = {};
@@ -507,9 +517,9 @@
 
 #if DCHECK_IS_ON()
   DCHECK(is_inside_frame_) << TRACKER_DCHECK_MSG;
-  last_processed_impl_sequence_ = ack.frame_id.sequence_number;
 #endif
 
+  last_processed_impl_sequence_ = ack.frame_id.sequence_number;
   if (first_submitted_frame_ == 0)
     first_submitted_frame_ = frame_token;
   last_submitted_frame_ = frame_token;
@@ -587,8 +597,9 @@
   DCHECK_EQ(last_started_impl_sequence_, last_processed_impl_sequence_)
       << TRACKER_DCHECK_MSG;
   is_inside_frame_ = false;
-  last_started_impl_sequence_ = last_processed_impl_sequence_ = 0;
 #endif
+
+  last_started_impl_sequence_ = last_processed_impl_sequence_ = 0;
 }
 
 void FrameSequenceTracker::ReportFramePresented(
@@ -693,10 +704,7 @@
   if (ShouldIgnoreSequence(ack.frame_id.sequence_number))
     return;
 
-#if DCHECK_IS_ON()
   last_processed_impl_sequence_ = ack.frame_id.sequence_number;
-#endif
-
   // If there is no damage for this frame (and no frame is submitted), then the
   // impl-sequence needs to be reset. However, this should be done after the
   // processing the frame is complete (i.e. in ReportFrameEnd()), so that other
diff --git a/cc/metrics/frame_sequence_tracker.h b/cc/metrics/frame_sequence_tracker.h
index 1d8354d..8ee948a 100644
--- a/cc/metrics/frame_sequence_tracker.h
+++ b/cc/metrics/frame_sequence_tracker.h
@@ -291,9 +291,7 @@
     return metrics_->main_throughput();
   }
 
-  void ScheduleTerminate() {
-    termination_status_ = TerminationStatus::kScheduledForTermination;
-  }
+  void ScheduleTerminate();
 
   struct TrackedFrameData {
     // Represents the |BeginFrameArgs::source_id| and
@@ -393,6 +391,9 @@
   // Report the throughput metrics every 5 seconds.
   const base::TimeDelta time_delta_to_report_ = base::TimeDelta::FromSeconds(5);
 
+  uint64_t last_started_impl_sequence_ = 0;
+  uint64_t last_processed_impl_sequence_ = 0;
+
 #if DCHECK_IS_ON()
   bool is_inside_frame_ = false;
 
@@ -406,9 +407,6 @@
   // when DCHECK is on.
   std::stringstream frame_sequence_trace_;
 
-  uint64_t last_started_impl_sequence_ = 0;
-  uint64_t last_processed_impl_sequence_ = 0;
-
   uint64_t last_started_main_sequence_ = 0;
 
   // If ReportBeginImplFrame is never called on a arg, then ReportBeginMainFrame
diff --git a/cc/metrics/frame_sequence_tracker_unittest.cc b/cc/metrics/frame_sequence_tracker_unittest.cc
index f0f14328..740abe3 100644
--- a/cc/metrics/frame_sequence_tracker_unittest.cc
+++ b/cc/metrics/frame_sequence_tracker_unittest.cc
@@ -696,4 +696,14 @@
   EXPECT_EQ(MainThroughput().frames_produced, 0u);
 }
 
+TEST_F(FrameSequenceTrackerTest, BeginImplFrameBeforeTerminate) {
+  const char sequence[] = "b(1)s(1)e(1)b(4)P(1)";
+  GenerateSequence(sequence);
+  EXPECT_EQ(ImplThroughput().frames_expected, 4u);
+  EXPECT_EQ(ImplThroughput().frames_produced, 1u);
+  collection_.StopSequence(FrameSequenceTrackerType::kTouchScroll);
+  EXPECT_EQ(ImplThroughput().frames_expected, 1u);
+  EXPECT_EQ(ImplThroughput().frames_produced, 1u);
+}
+
 }  // namespace cc
diff --git a/cc/trees/occlusion_tracker.cc b/cc/trees/occlusion_tracker.cc
index 363461f..d0dcf64 100644
--- a/cc/trees/occlusion_tracker.cc
+++ b/cc/trees/occlusion_tracker.cc
@@ -37,7 +37,7 @@
 Occlusion OcclusionTracker::GetCurrentOcclusionForContributingSurface(
     const gfx::Transform& draw_transform) const {
   DCHECK(!stack_.empty());
-  if (stack_.size() < 2)
+  if (stack_.size() < 2 || stack_.back().ignores_parent_occlusion)
     return Occlusion();
   // A contributing surface doesn't get occluded by things inside its own
   // surface, so only things outside the surface can occlude it. That occlusion
@@ -49,10 +49,12 @@
 
 const RenderSurfaceImpl*
 OcclusionTracker::OcclusionSurfaceForContributingSurface() const {
+  if (stack_.size() < 2 || stack_.back().ignores_parent_occlusion)
+    return nullptr;
   // A contributing surface doesn't get occluded by things inside its own
   // surface, so only things outside the surface can occlude it. That occlusion
   // is found just below the top of the stack (if it exists).
-  return (stack_.size() < 2) ? nullptr : stack_[stack_.size() - 2].target;
+  return stack_[stack_.size() - 2].target;
 }
 
 void OcclusionTracker::EnterLayer(
@@ -162,8 +164,10 @@
       !entering_unoccluded_subtree &&
       have_transform_from_screen_to_new_target &&
       !entering_root_target;
-  if (!copy_outside_occlusion_forward)
+  if (!copy_outside_occlusion_forward) {
+    stack_.back().ignores_parent_occlusion = true;
     return;
+  }
 
   size_t last_index = stack_.size() - 1;
   gfx::Transform old_target_to_new_target_transform(
diff --git a/cc/trees/occlusion_tracker.h b/cc/trees/occlusion_tracker.h
index 09c7aec..d249867 100644
--- a/cc/trees/occlusion_tracker.h
+++ b/cc/trees/occlusion_tracker.h
@@ -64,6 +64,7 @@
     const RenderSurfaceImpl* target;
     SimpleEnclosedRegion occlusion_from_outside_target;
     SimpleEnclosedRegion occlusion_from_inside_target;
+    bool ignores_parent_occlusion = false;
   };
 
   // The stack holds occluded regions for subtrees in the
diff --git a/cc/trees/occlusion_tracker_unittest.cc b/cc/trees/occlusion_tracker_unittest.cc
index 282133c..841c4bf 100644
--- a/cc/trees/occlusion_tracker_unittest.cc
+++ b/cc/trees/occlusion_tracker_unittest.cc
@@ -992,6 +992,63 @@
 
 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestFilters)
 
+class OcclusionTrackerTestFiltersRenderSurfaceOcclusion
+    : public OcclusionTrackerTest {
+ protected:
+  using OcclusionTrackerTest::OcclusionTrackerTest;
+
+  void RunMyTest() override {
+    TestContentLayerImpl* parent = CreateRoot(gfx::Size(500, 500));
+    TestContentLayerImpl* blur_layer = CreateDrawingSurface(
+        parent, gfx::Transform(), gfx::PointF(100.f, 100.f), gfx::Size(50, 50),
+        true);
+    TestContentLayerImpl* opacity_layer = CreateDrawingSurface(
+        parent, gfx::Transform(), gfx::PointF(200.f, 100.f), gfx::Size(50, 50),
+        true);
+
+    // This layer fully covers the layer bounds of the above filtered layers,
+    // but not the blur filter extent of |blur_layer|.
+    TestContentLayerImpl* occluding_layer =
+        CreateDrawingLayer(parent, gfx::Transform(), gfx::PointF(100.f, 100.f),
+                           gfx::Size(300, 100), true);
+
+    FilterOperations filters;
+    filters.Append(FilterOperation::CreateBlurFilter(10.f));
+    GetEffectNode(blur_layer)->filters = filters;
+
+    filters.Clear();
+    filters.Append(FilterOperation::CreateOpacityFilter(0.5f));
+    GetEffectNode(opacity_layer)->filters = filters;
+
+    CalcDrawEtc();
+    TestOcclusionTrackerWithClip occlusion(gfx::Rect(0, 0, 1000, 1000));
+
+    ASSERT_NO_FATAL_FAILURE(VisitLayer(occluding_layer, &occlusion));
+
+    // The render surface of |opacity_layer| (which has a filter that doesn't
+    // move pixels) is occluded by |occluding_layer|.
+    ASSERT_NO_FATAL_FAILURE(VisitLayer(opacity_layer, &occlusion));
+    ASSERT_NO_FATAL_FAILURE(
+        EnterContributingSurface(opacity_layer, &occlusion));
+    EXPECT_EQ(gfx::Rect(),
+              occlusion.UnoccludedSurfaceContentRect(
+                  opacity_layer, gfx::Rect(opacity_layer->bounds())));
+    ASSERT_NO_FATAL_FAILURE(
+        LeaveContributingSurface(opacity_layer, &occlusion));
+
+    // The render surface of |blur_layer| (which has a filter that moves pixels)
+    // is not occluded by |occluding_layer|.
+    ASSERT_NO_FATAL_FAILURE(VisitLayer(blur_layer, &occlusion));
+    ASSERT_NO_FATAL_FAILURE(EnterContributingSurface(blur_layer, &occlusion));
+    EXPECT_EQ(gfx::Rect(blur_layer->bounds()),
+              occlusion.UnoccludedSurfaceContentRect(
+                  blur_layer, gfx::Rect(blur_layer->bounds())));
+    ASSERT_NO_FATAL_FAILURE(LeaveContributingSurface(blur_layer, &occlusion));
+  }
+};
+
+ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestFiltersRenderSurfaceOcclusion)
+
 class OcclusionTrackerTestOpaqueContentsRegionEmpty
     : public OcclusionTrackerTest {
  protected:
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index 2d216d2..11105d8 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -1988,6 +1988,7 @@
     testonly = true
     target_type = "instrumentation_test_apk"
     shared_library_for_unwind_asset = "chromefortest"
+    bundles_supported = true
 
     deps = _chrome_public_shared_deps + invoker.deps + [
              ":chrome_apk_pak_assets",
@@ -2964,6 +2965,7 @@
   sources = [
     "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",
   ]
 
   annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
@@ -2976,5 +2978,6 @@
   sources = [
     "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",
   ]
 }
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni
index 09e03c2a..37061f40 100644
--- a/chrome/android/chrome_junit_test_java_sources.gni
+++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -114,7 +114,6 @@
   "junit/src/org/chromium/chrome/browser/nfc/NfcSystemLevelPromptTest.java",
   "junit/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateControllerTest.java",
   "junit/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateProviderHolderTest.java",
-  "junit/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeUnitTest.java",
   "junit/src/org/chromium/chrome/browser/notifications/NotificationSystemStatusUtilUnitTest.java",
   "junit/src/org/chromium/chrome/browser/notifications/NotificationTriggerBackgroundTaskTest.java",
   "junit/src/org/chromium/chrome/browser/notifications/NotificationTriggerSchedulerTest.java",
@@ -192,6 +191,7 @@
   "junit/src/org/chromium/chrome/browser/signin/ConfirmManagedSyncDataDialogTest.java",
   "junit/src/org/chromium/chrome/browser/signin/ConfirmSyncDataStateMachineDelegateTest.java",
   "junit/src/org/chromium/chrome/browser/signin/ConfirmSyncDataStateMachineTest.java",
+  "junit/src/org/chromium/chrome/browser/signin/SignOutDialogFragmentTest.java",
   "junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java",
   "junit/src/org/chromium/chrome/browser/signin/SigninPromoUtilTest.java",
   "junit/src/org/chromium/chrome/browser/signin/SigninUtilsStartActivityTest.java",
diff --git a/chrome/android/features/autofill_assistant/BUILD.gn b/chrome/android/features/autofill_assistant/BUILD.gn
index f79e8d2..edbac41 100644
--- a/chrome/android/features/autofill_assistant/BUILD.gn
+++ b/chrome/android/features/autofill_assistant/BUILD.gn
@@ -261,6 +261,7 @@
     "//chrome/android:chrome_test_util_java",
     "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library:feed_lib_java",
     "//chrome/browser/image_fetcher:java",
+    "//chrome/browser/preferences:java",
     "//chrome/browser/ui/android/widget:java",
     "//chrome/test/android:chrome_java_test_support",
     "//components/autofill_assistant/browser:proto_java",
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java
index 1049b5e..5b40f450 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java
@@ -5,15 +5,11 @@
 package org.chromium.chrome.browser.autofill_assistant.user_data;
 
 import android.app.Activity;
-import android.content.Context;
 import android.view.View;
 import android.view.ViewGroup;
 
-import androidx.annotation.Nullable;
-
 import org.chromium.base.task.PostTask;
 import org.chromium.chrome.browser.ChromeVersionInfo;
-import org.chromium.chrome.browser.autofill.PersonalDataManager;
 import org.chromium.chrome.browser.autofill.prefeditor.EditorDialog;
 import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantAdditionalSectionContainer;
 import org.chromium.chrome.browser.payments.AddressEditor;
@@ -93,10 +89,6 @@
             mDividerTag = dividerTag;
             mActivity = activity;
         }
-
-        public Context getContext() {
-            return mActivity;
-        }
     }
 
     @Override
@@ -215,38 +207,35 @@
      */
     private boolean updateSectionContents(
             AssistantCollectUserDataModel model, PropertyKey propertyKey, ViewHolder view) {
-        if (propertyKey == AssistantCollectUserDataModel.AVAILABLE_AUTOFILL_PAYMENT_METHODS
+        if (propertyKey == AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS
                 || propertyKey == AssistantCollectUserDataModel.WEB_CONTENTS) {
-            WebContents webContents = model.get(AssistantCollectUserDataModel.WEB_CONTENTS);
-            List<AssistantCollectUserDataModel.PaymentTuple> paymentTuples =
-                    model.get(AssistantCollectUserDataModel.AVAILABLE_AUTOFILL_PAYMENT_METHODS);
-
-            List<AutofillPaymentInstrument> availablePaymentMethods;
-            if (webContents != null && paymentTuples != null) {
-                availablePaymentMethods =
-                        getPaymentInstrumentsFromPaymentTuples(webContents, paymentTuples);
-            } else {
-                availablePaymentMethods = Collections.emptyList();
-            }
-            view.mPaymentMethodSection.onAvailablePaymentMethodsChanged(availablePaymentMethods);
-            return true;
-        } else if (propertyKey == AssistantCollectUserDataModel.AVAILABLE_PROFILES) {
-            List<PersonalDataManager.AutofillProfile> autofillProfiles =
-                    model.get(AssistantCollectUserDataModel.AVAILABLE_PROFILES);
-            if (autofillProfiles == null) {
-                autofillProfiles = Collections.emptyList();
-            }
-            if (shouldShowContactDetails(model)) {
-                view.mContactDetailsSection.onProfilesChanged(autofillProfiles,
-                        model.get(AssistantCollectUserDataModel.REQUEST_EMAIL),
-                        model.get(AssistantCollectUserDataModel.REQUEST_NAME),
-                        model.get(AssistantCollectUserDataModel.REQUEST_PHONE));
-            }
             if (model.get(AssistantCollectUserDataModel.REQUEST_PAYMENT)) {
-                view.mPaymentMethodSection.onProfilesChanged(autofillProfiles);
+                List<AutofillPaymentInstrument> paymentInstruments;
+                if (model.get(AssistantCollectUserDataModel.WEB_CONTENTS) == null) {
+                    paymentInstruments = Collections.emptyList();
+                } else {
+                    paymentInstruments =
+                            model.get(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS);
+                }
+                view.mPaymentMethodSection.onAvailablePaymentMethodsChanged(paymentInstruments);
             }
+            return true;
+        } else if (propertyKey == AssistantCollectUserDataModel.AVAILABLE_CONTACTS) {
+            if (shouldShowContactDetails(model)) {
+                view.mContactDetailsSection.onContactsChanged(
+                        model.get(AssistantCollectUserDataModel.AVAILABLE_CONTACTS));
+            }
+            return true;
+        } else if (propertyKey == AssistantCollectUserDataModel.AVAILABLE_SHIPPING_ADDRESSES) {
             if (model.get(AssistantCollectUserDataModel.REQUEST_SHIPPING_ADDRESS)) {
-                view.mShippingAddressSection.onProfilesChanged(autofillProfiles);
+                view.mShippingAddressSection.onAddressesChanged(
+                        model.get(AssistantCollectUserDataModel.AVAILABLE_SHIPPING_ADDRESSES));
+            }
+            return true;
+        } else if (propertyKey == AssistantCollectUserDataModel.AVAILABLE_BILLING_ADDRESSES) {
+            if (model.get(AssistantCollectUserDataModel.REQUEST_PAYMENT)) {
+                view.mPaymentMethodSection.onAddressesChanged(
+                        model.get(AssistantCollectUserDataModel.AVAILABLE_BILLING_ADDRESSES));
             }
             return true;
         } else if (propertyKey == AssistantCollectUserDataModel.REQUIRE_BILLING_POSTAL_CODE
@@ -376,10 +365,10 @@
      */
     private boolean updateSectionSelectedItem(
             AssistantCollectUserDataModel model, PropertyKey propertyKey, ViewHolder view) {
-        if (propertyKey == AssistantCollectUserDataModel.SHIPPING_ADDRESS) {
+        if (propertyKey == AssistantCollectUserDataModel.SELECTED_SHIPPING_ADDRESS) {
             if (model.get(AssistantCollectUserDataModel.REQUEST_SHIPPING_ADDRESS)) {
-                AutofillAddress shippingAddress = getAddressFromProfile(view.getContext(),
-                        model.get(AssistantCollectUserDataModel.SHIPPING_ADDRESS));
+                AutofillAddress shippingAddress =
+                        model.get(AssistantCollectUserDataModel.SELECTED_SHIPPING_ADDRESS);
                 if (shippingAddress != null) {
                     view.mShippingAddressSection.addOrUpdateItem(
                             shippingAddress, /* select= */ true);
@@ -387,11 +376,10 @@
                 // No need to reset selection if null, this will be handled by setItems().
             }
             return true;
-        } else if (propertyKey == AssistantCollectUserDataModel.PAYMENT_METHOD) {
+        } else if (propertyKey == AssistantCollectUserDataModel.SELECTED_PAYMENT_INSTRUMENT) {
             if (model.get(AssistantCollectUserDataModel.REQUEST_PAYMENT)) {
-                AutofillPaymentInstrument paymentInstrument = getPaymentInstrumentFromPaymentTuple(
-                        model.get(AssistantCollectUserDataModel.WEB_CONTENTS),
-                        model.get(AssistantCollectUserDataModel.PAYMENT_METHOD));
+                AutofillPaymentInstrument paymentInstrument =
+                        model.get(AssistantCollectUserDataModel.SELECTED_PAYMENT_INSTRUMENT);
                 if (paymentInstrument != null) {
                     view.mPaymentMethodSection.addOrUpdateItem(
                             paymentInstrument, /* select= */ true);
@@ -399,13 +387,10 @@
                 // No need to reset selection if null, this will be handled by setItems().
             }
             return true;
-        } else if (propertyKey == AssistantCollectUserDataModel.CONTACT_DETAILS) {
+        } else if (propertyKey == AssistantCollectUserDataModel.SELECTED_CONTACT_DETAILS) {
             if (shouldShowContactDetails(model)) {
-                AutofillContact contact = getContactFromProfile(view.getContext(),
-                        model.get(AssistantCollectUserDataModel.CONTACT_DETAILS),
-                        model.get(AssistantCollectUserDataModel.REQUEST_NAME),
-                        model.get(AssistantCollectUserDataModel.REQUEST_PHONE),
-                        model.get(AssistantCollectUserDataModel.REQUEST_EMAIL));
+                AutofillContact contact =
+                        model.get(AssistantCollectUserDataModel.SELECTED_CONTACT_DETAILS);
                 if (contact != null) {
                     view.mContactDetailsSection.addOrUpdateItem(contact, /* select= */ true);
                 }
@@ -616,55 +601,4 @@
 
         return methodData;
     }
-
-    private List<AutofillPaymentInstrument> getPaymentInstrumentsFromPaymentTuples(
-            WebContents webContents,
-            List<AssistantCollectUserDataModel.PaymentTuple> paymentTuples) {
-        List<AutofillPaymentInstrument> paymentInstruments = new ArrayList<>(paymentTuples.size());
-
-        for (AssistantCollectUserDataModel.PaymentTuple tuple : paymentTuples) {
-            paymentInstruments.add(new AutofillPaymentInstrument(webContents, tuple.getCreditCard(),
-                    tuple.getBillingAddress(), MethodStrings.BASIC_CARD,
-                    /* matchesMerchantCardTypeExactly= */ true));
-        }
-
-        return paymentInstruments;
-    }
-
-    @Nullable
-    private AutofillAddress getAddressFromProfile(
-            Context context, @Nullable PersonalDataManager.AutofillProfile profile) {
-        if (profile == null) {
-            return null;
-        }
-        return new AutofillAddress(context, profile);
-    }
-
-    @Nullable
-    private AutofillContact getContactFromProfile(Context context,
-            @Nullable PersonalDataManager.AutofillProfile profile, boolean requestName,
-            boolean requestPhone, boolean requestEmail) {
-        if (profile == null) {
-            return null;
-        }
-        ContactEditor editor = new ContactEditor(requestName, requestPhone, requestEmail, false);
-        String name = profile.getFullName();
-        String phone = profile.getPhoneNumber();
-        String email = profile.getEmailAddress();
-        return new AutofillContact(context, profile, name, phone, email,
-                editor.checkContactCompletionStatus(name, phone, email), requestName, requestPhone,
-                requestEmail);
-    }
-
-    @Nullable
-    private AutofillPaymentInstrument getPaymentInstrumentFromPaymentTuple(
-            @Nullable WebContents webContents,
-            @Nullable AssistantCollectUserDataModel.PaymentTuple paymentTuple) {
-        if (webContents == null || paymentTuple == null) {
-            return null;
-        }
-        return new AutofillPaymentInstrument(webContents, paymentTuple.getCreditCard(),
-                paymentTuple.getBillingAddress(), MethodStrings.BASIC_CARD,
-                /* matchesMerchantCardTypeExactly= */ true);
-    }
 }
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java
index 9d126906..ea96452 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java
@@ -4,7 +4,9 @@
 
 package org.chromium.chrome.browser.autofill_assistant.user_data;
 
+import android.content.Context;
 import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
 import android.view.View;
 
 import org.chromium.base.annotations.CalledByNative;
@@ -16,11 +18,17 @@
 import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantTextInputSection;
 import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantTextInputSection.TextInputFactory;
 import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantTextInputType;
+import org.chromium.chrome.browser.payments.AutofillAddress;
+import org.chromium.chrome.browser.payments.AutofillContact;
+import org.chromium.chrome.browser.payments.AutofillPaymentInstrument;
+import org.chromium.chrome.browser.payments.ContactEditor;
+import org.chromium.components.payments.MethodStrings;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.ui.modelutil.PropertyModel;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -30,31 +38,6 @@
 public class AssistantCollectUserDataModel extends PropertyModel {
     // TODO(crbug.com/806868): Add |setSelectedLogin|.
 
-    /**
-     * This class holds a the credit card and billing address information required to create an
-     * {@code AutofillPaymentInstrument}.
-     */
-    public static class PaymentTuple {
-        private final PersonalDataManager.CreditCard mCreditCard;
-        @Nullable
-        private final PersonalDataManager.AutofillProfile mBillingAddress;
-
-        public PaymentTuple(PersonalDataManager.CreditCard creditCard,
-                @Nullable PersonalDataManager.AutofillProfile billingAddress) {
-            mCreditCard = creditCard;
-            mBillingAddress = billingAddress;
-        }
-
-        public PersonalDataManager.CreditCard getCreditCard() {
-            return mCreditCard;
-        }
-
-        @Nullable
-        public PersonalDataManager.AutofillProfile getBillingAddress() {
-            return mBillingAddress;
-        }
-    }
-
     public static final WritableObjectPropertyKey<AssistantCollectUserDataDelegate> DELEGATE =
             new WritableObjectPropertyKey<>();
 
@@ -65,16 +48,16 @@
     public static final WritableBooleanPropertyKey VISIBLE = new WritableBooleanPropertyKey();
 
     /** The chosen shipping address. */
-    public static final WritableObjectPropertyKey<PersonalDataManager.AutofillProfile>
-            SHIPPING_ADDRESS = new WritableObjectPropertyKey<>();
+    public static final WritableObjectPropertyKey<AutofillAddress> SELECTED_SHIPPING_ADDRESS =
+            new WritableObjectPropertyKey<>();
 
     /** The chosen payment method (including billing address). */
-    public static final WritableObjectPropertyKey<AssistantCollectUserDataModel.PaymentTuple>
-            PAYMENT_METHOD = new WritableObjectPropertyKey<>();
+    public static final WritableObjectPropertyKey<AutofillPaymentInstrument>
+            SELECTED_PAYMENT_INSTRUMENT = new WritableObjectPropertyKey<>();
 
     /** The chosen contact details. */
-    public static final WritableObjectPropertyKey<PersonalDataManager.AutofillProfile>
-            CONTACT_DETAILS = new WritableObjectPropertyKey<>();
+    public static final WritableObjectPropertyKey<AutofillContact> SELECTED_CONTACT_DETAILS =
+            new WritableObjectPropertyKey<>();
 
     /** The login section title. */
     public static final WritableObjectPropertyKey<String> LOGIN_SECTION_TITLE =
@@ -101,11 +84,17 @@
     public static final WritableBooleanPropertyKey REQUEST_LOGIN_CHOICE =
             new WritableBooleanPropertyKey();
 
-    public static final WritableObjectPropertyKey<List<PersonalDataManager.AutofillProfile>>
-            AVAILABLE_PROFILES = new WritableObjectPropertyKey<>();
+    public static final WritableObjectPropertyKey<List<AutofillAddress>>
+            AVAILABLE_BILLING_ADDRESSES = new WritableObjectPropertyKey<>();
 
-    public static final WritableObjectPropertyKey<List<AssistantCollectUserDataModel.PaymentTuple>>
-            AVAILABLE_AUTOFILL_PAYMENT_METHODS = new WritableObjectPropertyKey<>();
+    public static final WritableObjectPropertyKey<List<AutofillContact>> AVAILABLE_CONTACTS =
+            new WritableObjectPropertyKey<>();
+
+    public static final WritableObjectPropertyKey<List<AutofillAddress>>
+            AVAILABLE_SHIPPING_ADDRESSES = new WritableObjectPropertyKey<>();
+
+    public static final WritableObjectPropertyKey<List<AutofillPaymentInstrument>>
+            AVAILABLE_PAYMENT_INSTRUMENTS = new WritableObjectPropertyKey<>();
 
     public static final WritableObjectPropertyKey<List<String>> SUPPORTED_BASIC_CARD_NETWORKS =
             new WritableObjectPropertyKey<>();
@@ -158,11 +147,12 @@
             new WritableObjectPropertyKey<>();
 
     public AssistantCollectUserDataModel() {
-        super(DELEGATE, WEB_CONTENTS, VISIBLE, SHIPPING_ADDRESS, PAYMENT_METHOD, CONTACT_DETAILS,
-                LOGIN_SECTION_TITLE, SELECTED_LOGIN, TERMS_STATUS, REQUEST_NAME, REQUEST_EMAIL,
-                REQUEST_PHONE, REQUEST_SHIPPING_ADDRESS, REQUEST_PAYMENT,
-                ACCEPT_TERMS_AND_CONDITIONS_TEXT, SHOW_TERMS_AS_CHECKBOX, REQUEST_LOGIN_CHOICE,
-                AVAILABLE_PROFILES, AVAILABLE_AUTOFILL_PAYMENT_METHODS,
+        super(DELEGATE, WEB_CONTENTS, VISIBLE, SELECTED_SHIPPING_ADDRESS,
+                SELECTED_PAYMENT_INSTRUMENT, SELECTED_CONTACT_DETAILS, LOGIN_SECTION_TITLE,
+                SELECTED_LOGIN, TERMS_STATUS, REQUEST_NAME, REQUEST_EMAIL, REQUEST_PHONE,
+                REQUEST_SHIPPING_ADDRESS, REQUEST_PAYMENT, ACCEPT_TERMS_AND_CONDITIONS_TEXT,
+                SHOW_TERMS_AS_CHECKBOX, REQUEST_LOGIN_CHOICE, AVAILABLE_BILLING_ADDRESSES,
+                AVAILABLE_CONTACTS, AVAILABLE_SHIPPING_ADDRESSES, AVAILABLE_PAYMENT_INSTRUMENTS,
                 SUPPORTED_BASIC_CARD_NETWORKS, AVAILABLE_LOGINS, EXPANDED_SECTION,
                 REQUIRE_BILLING_POSTAL_CODE, BILLING_POSTAL_CODE_MISSING_TEXT,
                 CREDIT_CARD_EXPIRED_TEXT, REQUEST_DATE_RANGE, DATE_RANGE_START,
@@ -185,8 +175,12 @@
         set(REQUIRE_BILLING_POSTAL_CODE, false);
         set(DATE_RANGE_START_LABEL, "");
         set(DATE_RANGE_END_LABEL, "");
-        set(PREPENDED_SECTIONS, new ArrayList<>());
-        set(APPENDED_SECTIONS, new ArrayList<>());
+        set(PREPENDED_SECTIONS, Collections.emptyList());
+        set(APPENDED_SECTIONS, Collections.emptyList());
+        set(AVAILABLE_PAYMENT_INSTRUMENTS, Collections.emptyList());
+        set(AVAILABLE_CONTACTS, Collections.emptyList());
+        set(AVAILABLE_SHIPPING_ADDRESSES, Collections.emptyList());
+        set(AVAILABLE_BILLING_ADDRESSES, Collections.emptyList());
     }
 
     @CalledByNative
@@ -275,23 +269,20 @@
     }
 
     @CalledByNative
-    private void setContactDetails(@Nullable PersonalDataManager.AutofillProfile contact) {
-        set(CONTACT_DETAILS, contact);
+    private void setSelectedContactDetails(@Nullable AutofillContact contact) {
+        set(SELECTED_CONTACT_DETAILS, contact);
     }
 
     @CalledByNative
-    private void setShippingAddress(@Nullable PersonalDataManager.AutofillProfile shippingAddress) {
-        set(SHIPPING_ADDRESS, shippingAddress);
+    private void setSelectedShippingAddress(@Nullable AutofillAddress shippingAddress) {
+        set(SELECTED_SHIPPING_ADDRESS, shippingAddress);
     }
 
     @CalledByNative
-    private void setPaymentMethod(@Nullable PersonalDataManager.CreditCard card,
-            @Nullable PersonalDataManager.AutofillProfile billingAddress) {
-        if (card == null) {
-            set(PAYMENT_METHOD, null);
-        } else {
-            set(PAYMENT_METHOD, new PaymentTuple(card, billingAddress));
-        }
+    private void setSelectedPaymentInstrument(@Nullable PersonalDataManager.CreditCard card,
+            @Nullable PersonalDataManager.AutofillProfile billingProfile) {
+        set(SELECTED_PAYMENT_INSTRUMENT,
+                createAutofillPaymentInstrument(get(WEB_CONTENTS), card, billingProfile));
     }
 
     /** Creates an empty list of login options. */
@@ -406,39 +397,109 @@
     }
 
     @CalledByNative
-    private static List<PersonalDataManager.AutofillProfile> createAutofillProfileList() {
+    private static List<AutofillContact> createAutofillContactList() {
         return new ArrayList<>();
     }
 
     @CalledByNative
-    private static void addAutofillProfile(List<PersonalDataManager.AutofillProfile> profiles,
-            PersonalDataManager.AutofillProfile profile) {
-        profiles.add(profile);
+    private static void addAutofillContact(
+            List<AutofillContact> contacts, AutofillContact contact) {
+        contacts.add(contact);
+    }
+
+    @VisibleForTesting
+    @CalledByNative
+    @Nullable
+    public static AutofillContact createAutofillContact(Context context,
+            @Nullable PersonalDataManager.AutofillProfile profile, boolean requestName,
+            boolean requestPhone, boolean requestEmail) {
+        if (profile == null || !(requestName || requestPhone || requestEmail)) {
+            return null;
+        }
+        ContactEditor editor =
+                new ContactEditor(requestName, requestPhone, requestEmail, /* saveToDisk= */ false);
+        String name = profile.getFullName();
+        String phone = profile.getPhoneNumber();
+        String email = profile.getEmailAddress();
+        return new AutofillContact(context, profile, name, phone, email,
+                editor.checkContactCompletionStatus(name, phone, email), requestName, requestPhone,
+                requestEmail);
     }
 
     @CalledByNative
-    private void setAutofillProfiles(List<PersonalDataManager.AutofillProfile> profiles) {
-        set(AVAILABLE_PROFILES, profiles);
+    private void setAvailableContacts(List<AutofillContact> contacts) {
+        set(AVAILABLE_CONTACTS, contacts);
     }
 
     @CalledByNative
-    private static List<AssistantCollectUserDataModel.PaymentTuple>
-    createAutofillPaymentMethodList() {
+    private static List<AutofillAddress> createAutofillAddressList() {
         return new ArrayList<>();
     }
 
     @CalledByNative
-    private static void addAutofillPaymentMethod(
-            List<AssistantCollectUserDataModel.PaymentTuple> paymentTuples,
-            PersonalDataManager.CreditCard card,
-            @Nullable PersonalDataManager.AutofillProfile billingAddress) {
-        paymentTuples.add(new PaymentTuple(card, billingAddress));
+    private static void addAutofillAddress(
+            List<AutofillAddress> addresses, AutofillAddress address) {
+        addresses.add(address);
+    }
+
+    @VisibleForTesting
+    @CalledByNative
+    @Nullable
+    public static AutofillAddress createAutofillAddress(
+            Context context, @Nullable PersonalDataManager.AutofillProfile profile) {
+        if (profile == null) {
+            return null;
+        }
+        return new AutofillAddress(context, profile);
     }
 
     @CalledByNative
-    private void setAutofillPaymentMethods(
-            List<AssistantCollectUserDataModel.PaymentTuple> paymentTuples) {
-        set(AVAILABLE_AUTOFILL_PAYMENT_METHODS, paymentTuples);
+    private void setAvailableShippingAddresses(List<AutofillAddress> addresses) {
+        set(AVAILABLE_SHIPPING_ADDRESSES, addresses);
+    }
+
+    @CalledByNative
+    private void setAvailableBillingAddresses(List<AutofillAddress> addresses) {
+        set(AVAILABLE_BILLING_ADDRESSES, addresses);
+    }
+
+    @CalledByNative
+    private static List<AutofillPaymentInstrument> createAutofillPaymentInstrumentList() {
+        return new ArrayList<>();
+    }
+
+    // TODO(b/144005336): Make this method static.
+    @CalledByNative
+    private void addAutofillPaymentInstrument(List<AutofillPaymentInstrument> paymentInstruments,
+            @Nullable PersonalDataManager.CreditCard card,
+            @Nullable PersonalDataManager.AutofillProfile billingProfile) {
+        AutofillPaymentInstrument paymentInstrument =
+                createAutofillPaymentInstrument(get(WEB_CONTENTS), card, billingProfile);
+        if (paymentInstrument != null) {
+            paymentInstruments.add(paymentInstrument);
+        }
+    }
+
+    // TODO(b/144005336): Call from native instead.
+    @VisibleForTesting
+    @Nullable
+    public static AutofillPaymentInstrument createAutofillPaymentInstrument(
+            @Nullable WebContents webContents, @Nullable PersonalDataManager.CreditCard card,
+            @Nullable PersonalDataManager.AutofillProfile billingProfile) {
+        if (webContents == null) {
+            return null;
+        }
+        if (card == null) {
+            return null;
+        }
+        return new AutofillPaymentInstrument(webContents, card, billingProfile,
+                MethodStrings.BASIC_CARD, /* matchesMerchantCardTypeExactly= */ true);
+    }
+
+    @CalledByNative
+    private void setAvailablePaymentInstruments(
+            List<AutofillPaymentInstrument> paymentInstruments) {
+        set(AVAILABLE_PAYMENT_INSTRUMENTS, paymentInstruments);
     }
 
     @CalledByNative
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantContactDetailsSection.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantContactDetailsSection.java
index f3f981b0..a41f16a 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantContactDetailsSection.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantContactDetailsSection.java
@@ -14,12 +14,9 @@
 import androidx.annotation.Nullable;
 
 import org.chromium.chrome.autofill_assistant.R;
-import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
 import org.chromium.chrome.browser.payments.AutofillContact;
 import org.chromium.chrome.browser.payments.ContactEditor;
-import org.chromium.chrome.browser.payments.ui.ContactDetailsSection;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -140,39 +137,21 @@
 
     /**
      * The Chrome profiles have changed externally. This will rebuild the UI with the new/changed
-     * set of profiles, while keeping the selected item if possible.
+     * set of contacts derived from the profiles, while keeping the selected item if possible.
      */
-    void onProfilesChanged(List<AutofillProfile> profiles, boolean requestPayerEmail,
-            boolean requestPayerName, boolean requestPayerPhone) {
+    void onContactsChanged(List<AutofillContact> contacts) {
         if (mIgnoreProfileChangeNotifications) {
             return;
         }
-
-        if (!requestPayerEmail && !requestPayerName && !requestPayerPhone) {
-            return;
-        }
-
-        // Note: we create a temporary editor (necessary for converting profiles to contacts)
-        // instead of using mEditor, which may be null.
-        ContactEditor tempEditor =
-                new ContactEditor(requestPayerName, requestPayerPhone, requestPayerEmail, false);
-
-        // Convert profiles into a list of |AutofillContact|.
         int selectedContactIndex = -1;
-        ContactDetailsSection sectionInformation =
-                new ContactDetailsSection(mContext, profiles, tempEditor, null);
-        List<AutofillContact> contacts = new ArrayList<>();
-        for (int i = 0; i < sectionInformation.getSize(); i++) {
-            AutofillContact contact = (AutofillContact) sectionInformation.getItem(i);
-            if (contact == null) {
-                continue;
-            }
-            contacts.add(contact);
-            if (mSelectedOption != null && areEqual(contact, mSelectedOption)) {
-                selectedContactIndex = i;
+        if (mSelectedOption != null) {
+            for (int i = 0; i < contacts.size(); i++) {
+                if (areEqual(contacts.get(i), mSelectedOption)) {
+                    selectedContactIndex = i;
+                    break;
+                }
             }
         }
-
         // Replace current set of items, keep selection if possible.
         setItems(contacts, selectedContactIndex);
     }
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantPaymentMethodSection.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantPaymentMethodSection.java
index cbfe148f..d6235f7 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantPaymentMethodSection.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantPaymentMethodSection.java
@@ -57,7 +57,7 @@
             String guid = method.getCard().getBillingAddressId();
             PersonalDataManager.AutofillProfile profile = personalDataManager.getProfile(guid);
             if (profile != null) {
-                addAutocompleteInformationToEditor(profile);
+                addAutocompleteInformationToEditor(new AutofillAddress(mContext, profile));
             }
         }
     }
@@ -167,10 +167,10 @@
         return TextUtils.equals(profileA.getGUID(), profileB.getGUID());
     }
 
-    void onProfilesChanged(List<PersonalDataManager.AutofillProfile> profiles) {
+    void onAddressesChanged(List<AutofillAddress> addresses) {
         // TODO(crbug.com/806868): replace suggested billing addresses (remove if necessary).
-        for (PersonalDataManager.AutofillProfile profile : profiles) {
-            addAutocompleteInformationToEditor(profile);
+        for (AutofillAddress address : addresses) {
+            addAutocompleteInformationToEditor(address);
         }
     }
 
@@ -209,12 +209,12 @@
         mCreditCardExpiredText = text;
     }
 
-    private void addAutocompleteInformationToEditor(PersonalDataManager.AutofillProfile profile) {
+    private void addAutocompleteInformationToEditor(AutofillAddress address) {
         // The check for non-null label is necessary to prevent crash in editor when opening.
-        if (mEditor == null || profile.getLabel() == null) {
+        if (mEditor == null || address.getProfile().getLabel() == null) {
             return;
         }
-        mEditor.updateBillingAddressIfComplete(new AutofillAddress(mContext, profile));
+        mEditor.updateBillingAddressIfComplete(address);
     }
 
     private void setErrorMessage(TextView errorMessageView, AutofillPaymentInstrument method) {
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantShippingAddressSection.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantShippingAddressSection.java
index e53d823a..22b17dc 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantShippingAddressSection.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantShippingAddressSection.java
@@ -18,7 +18,6 @@
 import org.chromium.chrome.browser.payments.AddressEditor;
 import org.chromium.chrome.browser.payments.AutofillAddress;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -125,21 +124,23 @@
         return TextUtils.equals(optionA.getProfile().getGUID(), optionB.getProfile().getGUID());
     }
 
-    void onProfilesChanged(List<PersonalDataManager.AutofillProfile> profiles) {
+    /**
+     * The Chrome profiles have changed externally. This will rebuild the UI with the new/changed
+     * set of addresses derived from the profiles, while keeping the selected item if possible.
+     */
+    void onAddressesChanged(List<AutofillAddress> addresses) {
         if (mIgnoreProfileChangeNotifications) {
             return;
         }
-
         int selectedAddressIndex = -1;
-        List<AutofillAddress> addresses = new ArrayList<>();
-        for (int i = 0; i < profiles.size(); i++) {
-            AutofillAddress autofillAddress = new AutofillAddress(mContext, profiles.get(i));
-            if (mSelectedOption != null && areEqual(mSelectedOption, autofillAddress)) {
-                selectedAddressIndex = i;
+        if (mSelectedOption != null) {
+            for (int i = 0; i < addresses.size(); i++) {
+                if (areEqual(addresses.get(i), mSelectedOption)) {
+                    selectedAddressIndex = i;
+                    break;
+                }
             }
-            addresses.add(autofillAddress);
         }
-
         // Replace current set of items, keep selection if possible.
         setItems(addresses, selectedAddressIndex);
     }
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java
index 01aebea..fc01bee 100644
--- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java
@@ -64,6 +64,9 @@
 import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantTextInputSection.TextInputFactory;
 import org.chromium.chrome.browser.autofill_assistant.user_data.additional_sections.AssistantTextInputType;
 import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule;
+import org.chromium.chrome.browser.payments.AutofillAddress;
+import org.chromium.chrome.browser.payments.AutofillContact;
+import org.chromium.chrome.browser.payments.AutofillPaymentInstrument;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 
@@ -131,17 +134,18 @@
 
         /* Test initial model state. */
         assertThat(model.get(AssistantCollectUserDataModel.VISIBLE), is(false));
-        assertThat(model.get(AssistantCollectUserDataModel.AVAILABLE_PROFILES), nullValue());
-        assertThat(model.get(AssistantCollectUserDataModel.AVAILABLE_AUTOFILL_PAYMENT_METHODS),
-                nullValue());
+        assertThat(model.get(AssistantCollectUserDataModel.AVAILABLE_CONTACTS), empty());
+        assertThat(model.get(AssistantCollectUserDataModel.AVAILABLE_SHIPPING_ADDRESSES), empty());
+        assertThat(model.get(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS), empty());
         assertThat(model.get(AssistantCollectUserDataModel.SUPPORTED_BASIC_CARD_NETWORKS),
                 nullValue());
         assertThat(model.get(AssistantCollectUserDataModel.EXPANDED_SECTION), nullValue());
         assertThat(model.get(AssistantCollectUserDataModel.DELEGATE), nullValue());
         assertThat(model.get(AssistantCollectUserDataModel.WEB_CONTENTS), nullValue());
-        assertThat(model.get(AssistantCollectUserDataModel.SHIPPING_ADDRESS), nullValue());
-        assertThat(model.get(AssistantCollectUserDataModel.PAYMENT_METHOD), nullValue());
-        assertThat(model.get(AssistantCollectUserDataModel.CONTACT_DETAILS), nullValue());
+        assertThat(model.get(AssistantCollectUserDataModel.SELECTED_SHIPPING_ADDRESS), nullValue());
+        assertThat(
+                model.get(AssistantCollectUserDataModel.SELECTED_PAYMENT_INSTRUMENT), nullValue());
+        assertThat(model.get(AssistantCollectUserDataModel.SELECTED_CONTACT_DETAILS), nullValue());
         assertThat(model.get(AssistantCollectUserDataModel.TERMS_STATUS),
                 is(AssistantTermsAndConditionsState.NOT_SELECTED));
         assertThat(model.get(AssistantCollectUserDataModel.SELECTED_LOGIN), nullValue());
@@ -378,8 +382,8 @@
             model.set(AssistantCollectUserDataModel.WEB_CONTENTS, mTestRule.getWebContents());
             model.set(AssistantCollectUserDataModel.REQUEST_NAME, true);
             model.set(AssistantCollectUserDataModel.REQUEST_EMAIL, true);
-            model.set(AssistantCollectUserDataModel.AVAILABLE_PROFILES, Collections.emptyList());
-            model.set(AssistantCollectUserDataModel.CONTACT_DETAILS, null);
+            model.set(AssistantCollectUserDataModel.AVAILABLE_CONTACTS, Collections.emptyList());
+            model.set(AssistantCollectUserDataModel.SELECTED_CONTACT_DETAILS, null);
             model.set(AssistantCollectUserDataModel.VISIBLE, true);
         });
 
@@ -390,12 +394,14 @@
         assertThat(viewHolder.mContactList.getItemCount(), is(0));
 
         // Add profile to the list and send the updated model.
-        PersonalDataManager.AutofillProfile profile =
-                mHelper.createDummyProfile("John Doe", "john@gmail.com");
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            model.set(AssistantCollectUserDataModel.AVAILABLE_PROFILES,
-                    Collections.singletonList(profile));
-            model.set(AssistantCollectUserDataModel.CONTACT_DETAILS, profile);
+            AutofillContact contact = AssistantCollectUserDataModel.createAutofillContact(
+                    mTestRule.getActivity(),
+                    mHelper.createDummyProfile("John Doe", "john@gmail.com"),
+                    /* requestName= */ true, /* requestPhone= */ true, /* requestEmail= */ false);
+            model.set(AssistantCollectUserDataModel.AVAILABLE_CONTACTS,
+                    Collections.singletonList(contact));
+            model.set(AssistantCollectUserDataModel.SELECTED_CONTACT_DETAILS, contact);
         });
 
         // Contact details section should now contain and have pre-selected the new contact.
@@ -409,8 +415,8 @@
 
         // Remove profile from the list and send the updated model. Section should be empty again.
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            model.set(AssistantCollectUserDataModel.AVAILABLE_PROFILES, Collections.emptyList());
-            model.set(AssistantCollectUserDataModel.CONTACT_DETAILS, null);
+            model.set(AssistantCollectUserDataModel.AVAILABLE_CONTACTS, Collections.emptyList());
+            model.set(AssistantCollectUserDataModel.SELECTED_CONTACT_DETAILS, null);
         });
 
         onView(allOf(withId(R.id.section_title_add_button),
@@ -443,9 +449,9 @@
             model.set(AssistantCollectUserDataModel.WEB_CONTENTS, mTestRule.getWebContents());
             model.set(AssistantCollectUserDataModel.REQUEST_PAYMENT, true);
             model.set(AssistantCollectUserDataModel.VISIBLE, true);
-            model.set(AssistantCollectUserDataModel.AVAILABLE_AUTOFILL_PAYMENT_METHODS,
+            model.set(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS,
                     Collections.emptyList());
-            model.set(AssistantCollectUserDataModel.PAYMENT_METHOD, null);
+            model.set(AssistantCollectUserDataModel.SELECTED_PAYMENT_INSTRUMENT, null);
         });
 
         // Payment method section should be empty and show the 'add' button in the title.
@@ -459,13 +465,14 @@
                 mHelper.createDummyProfile("Jill Doe", "jill@gmail.com");
         String billingAddressId = mHelper.setProfile(billingAddress);
         PersonalDataManager.CreditCard creditCard = mHelper.createDummyCreditCard(billingAddressId);
-        AssistantCollectUserDataModel.PaymentTuple paymentTuple =
-                new AssistantCollectUserDataModel.PaymentTuple(creditCard, billingAddress);
 
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            model.set(AssistantCollectUserDataModel.AVAILABLE_AUTOFILL_PAYMENT_METHODS,
-                    Collections.singletonList(paymentTuple));
-            model.set(AssistantCollectUserDataModel.PAYMENT_METHOD, paymentTuple);
+            AutofillPaymentInstrument paymentInstrument =
+                    AssistantCollectUserDataModel.createAutofillPaymentInstrument(
+                            mTestRule.getWebContents(), creditCard, billingAddress);
+            model.set(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS,
+                    Collections.singletonList(paymentInstrument));
+            model.set(AssistantCollectUserDataModel.SELECTED_PAYMENT_INSTRUMENT, paymentInstrument);
         });
 
         // Payment method section contains the new credit card, which should be pre-selected.
@@ -479,9 +486,9 @@
 
         // Remove credit card from the list. Section should be empty again.
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            model.set(AssistantCollectUserDataModel.AVAILABLE_AUTOFILL_PAYMENT_METHODS,
+            model.set(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS,
                     Collections.emptyList());
-            model.set(AssistantCollectUserDataModel.PAYMENT_METHOD, null);
+            model.set(AssistantCollectUserDataModel.SELECTED_PAYMENT_INSTRUMENT, null);
         });
         onView(allOf(withId(R.id.section_title_add_button),
                        isDescendantOfA(is(viewHolder.mPaymentSection))))
@@ -508,17 +515,18 @@
                 mHelper.createDummyProfile("Jill Doe", "jill@gmail.com");
         String billingAddressId = mHelper.setProfile(billingAddress);
         PersonalDataManager.CreditCard creditCard = mHelper.createDummyCreditCard(billingAddressId);
-        AssistantCollectUserDataModel.PaymentTuple paymentTuple =
-                new AssistantCollectUserDataModel.PaymentTuple(creditCard, billingAddress);
 
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             // WEB_CONTENTS are necessary for the creation of the editors.
             model.set(AssistantCollectUserDataModel.WEB_CONTENTS, mTestRule.getWebContents());
             model.set(AssistantCollectUserDataModel.REQUEST_PAYMENT, true);
             model.set(AssistantCollectUserDataModel.VISIBLE, true);
-            model.set(AssistantCollectUserDataModel.AVAILABLE_AUTOFILL_PAYMENT_METHODS,
-                    Collections.singletonList(paymentTuple));
-            model.set(AssistantCollectUserDataModel.PAYMENT_METHOD, paymentTuple);
+            AutofillPaymentInstrument paymentInstrument =
+                    AssistantCollectUserDataModel.createAutofillPaymentInstrument(
+                            mTestRule.getWebContents(), creditCard, billingAddress);
+            model.set(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS,
+                    Collections.singletonList(paymentInstrument));
+            model.set(AssistantCollectUserDataModel.SELECTED_PAYMENT_INSTRUMENT, paymentInstrument);
         });
 
         // Payment method section contains the new credit card, which should be pre-selected.
@@ -569,8 +577,6 @@
                 new PersonalDataManager.CreditCard("", "https://example.com", true, true, "Jon Doe",
                         "4111111111111111", "1111", "12", "2050", "visa", R.drawable.visa_card,
                         CardType.UNKNOWN, /* billingAddressId= */ "GUID", /* serverId= */ "");
-        AssistantCollectUserDataModel.PaymentTuple paymentTuple =
-                new AssistantCollectUserDataModel.PaymentTuple(creditCard, profile);
 
         AssistantCollectUserDataModel model = new AssistantCollectUserDataModel();
         AssistantCollectUserDataCoordinator coordinator = createCollectUserDataCoordinator(model);
@@ -590,13 +596,23 @@
             model.set(AssistantCollectUserDataModel.REQUEST_EMAIL, true);
             model.set(AssistantCollectUserDataModel.REQUEST_PAYMENT, true);
             model.set(AssistantCollectUserDataModel.REQUEST_SHIPPING_ADDRESS, true);
-            model.set(AssistantCollectUserDataModel.AVAILABLE_PROFILES,
-                    Collections.singletonList(profile));
-            model.set(AssistantCollectUserDataModel.CONTACT_DETAILS, profile);
-            model.set(AssistantCollectUserDataModel.SHIPPING_ADDRESS, profile);
-            model.set(AssistantCollectUserDataModel.AVAILABLE_AUTOFILL_PAYMENT_METHODS,
-                    Collections.singletonList(paymentTuple));
-            model.set(AssistantCollectUserDataModel.PAYMENT_METHOD, paymentTuple);
+            AutofillContact contact = AssistantCollectUserDataModel.createAutofillContact(
+                    mTestRule.getActivity(), profile, /* requestName= */ true,
+                    /* requestPhone= */ true, /* requestEmail= */ true);
+            model.set(AssistantCollectUserDataModel.AVAILABLE_CONTACTS,
+                    Collections.singletonList(contact));
+            model.set(AssistantCollectUserDataModel.SELECTED_CONTACT_DETAILS, contact);
+            AutofillAddress address = AssistantCollectUserDataModel.createAutofillAddress(
+                    mTestRule.getActivity(), profile);
+            model.set(AssistantCollectUserDataModel.AVAILABLE_SHIPPING_ADDRESSES,
+                    Collections.singletonList(address));
+            model.set(AssistantCollectUserDataModel.SELECTED_SHIPPING_ADDRESS, address);
+            AutofillPaymentInstrument paymentInstrument =
+                    AssistantCollectUserDataModel.createAutofillPaymentInstrument(
+                            mTestRule.getWebContents(), creditCard, profile);
+            model.set(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS,
+                    Collections.singletonList(paymentInstrument));
+            model.set(AssistantCollectUserDataModel.SELECTED_PAYMENT_INSTRUMENT, paymentInstrument);
             model.set(AssistantCollectUserDataModel.VISIBLE, true);
             model.set(AssistantCollectUserDataModel.REQUEST_LOGIN_CHOICE, true);
             model.set(AssistantCollectUserDataModel.AVAILABLE_LOGINS,
@@ -820,9 +836,6 @@
         PersonalDataManager.CreditCard creditCard = mHelper.createDummyCreditCard(profileId);
         creditCard.setYear("2019");
 
-        AssistantCollectUserDataModel.PaymentTuple expiredPaymentTuple =
-                new AssistantCollectUserDataModel.PaymentTuple(creditCard, profile);
-
         AssistantCollectUserDataModel model = new AssistantCollectUserDataModel();
         AssistantCollectUserDataCoordinator coordinator = createCollectUserDataCoordinator(model);
         AutofillAssistantCollectUserDataTestHelper
@@ -835,9 +848,13 @@
             model.set(AssistantCollectUserDataModel.REQUEST_PAYMENT, true);
             model.set(AssistantCollectUserDataModel.CREDIT_CARD_EXPIRED_TEXT, "Card is expired");
             model.set(AssistantCollectUserDataModel.VISIBLE, true);
-            model.set(AssistantCollectUserDataModel.AVAILABLE_AUTOFILL_PAYMENT_METHODS,
-                    Collections.singletonList(expiredPaymentTuple));
-            model.set(AssistantCollectUserDataModel.PAYMENT_METHOD, expiredPaymentTuple);
+            AutofillPaymentInstrument expiredPaymentInstrument =
+                    AssistantCollectUserDataModel.createAutofillPaymentInstrument(
+                            mTestRule.getWebContents(), creditCard, profile);
+            model.set(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS,
+                    Collections.singletonList(expiredPaymentInstrument));
+            model.set(AssistantCollectUserDataModel.SELECTED_PAYMENT_INSTRUMENT,
+                    expiredPaymentInstrument);
         });
 
         // check that the card is not accepted (i.e. an error message is shown).
@@ -846,12 +863,15 @@
                 .check(matches(withText("Card is expired")));
 
         creditCard.setYear("2050");
-        AssistantCollectUserDataModel.PaymentTuple validPaymentTuple =
-                new AssistantCollectUserDataModel.PaymentTuple(creditCard, profile);
+
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            model.set(AssistantCollectUserDataModel.AVAILABLE_AUTOFILL_PAYMENT_METHODS,
-                    Collections.singletonList(validPaymentTuple));
-            model.set(AssistantCollectUserDataModel.PAYMENT_METHOD, validPaymentTuple);
+            AutofillPaymentInstrument validPaymentInstrument =
+                    AssistantCollectUserDataModel.createAutofillPaymentInstrument(
+                            mTestRule.getWebContents(), creditCard, profile);
+            model.set(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS,
+                    Collections.singletonList(validPaymentInstrument));
+            model.set(AssistantCollectUserDataModel.SELECTED_PAYMENT_INSTRUMENT,
+                    validPaymentInstrument);
         });
 
         // check that the card is now accepted.
@@ -890,8 +910,6 @@
         AutofillAssistantCollectUserDataTestHelper
                 .ViewHolder viewHolder = TestThreadUtils.runOnUiThreadBlocking(
                 () -> new AutofillAssistantCollectUserDataTestHelper.ViewHolder(coordinator));
-        AssistantCollectUserDataModel.PaymentTuple paymentTuple =
-                new AssistantCollectUserDataModel.PaymentTuple(creditCard, profile);
 
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             // WEB_CONTENTS are necessary for the creation of AutofillPaymentInstrument.
@@ -902,9 +920,12 @@
             model.set(AssistantCollectUserDataModel.BILLING_POSTAL_CODE_MISSING_TEXT,
                     "Billing postcode missing");
             model.set(AssistantCollectUserDataModel.REQUEST_PAYMENT, true);
-            model.set(AssistantCollectUserDataModel.AVAILABLE_AUTOFILL_PAYMENT_METHODS,
-                    Collections.singletonList(paymentTuple));
-            model.set(AssistantCollectUserDataModel.PAYMENT_METHOD, paymentTuple);
+            AutofillPaymentInstrument paymentInstrument =
+                    AssistantCollectUserDataModel.createAutofillPaymentInstrument(
+                            mTestRule.getWebContents(), creditCard, profile);
+            model.set(AssistantCollectUserDataModel.AVAILABLE_PAYMENT_INSTRUMENTS,
+                    Collections.singletonList(paymentInstrument));
+            model.set(AssistantCollectUserDataModel.SELECTED_PAYMENT_INSTRUMENT, paymentInstrument);
             model.set(AssistantCollectUserDataModel.VISIBLE, true);
         });
 
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java
index 9744878..5c7980f4 100644
--- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java
@@ -26,7 +26,6 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.Callback;
-import org.chromium.base.ContextUtils;
 import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.DisableIf;
@@ -37,6 +36,8 @@
 import org.chromium.chrome.browser.directactions.DirectActionReporter;
 import org.chromium.chrome.browser.directactions.DirectActionReporter.Type;
 import org.chromium.chrome.browser.directactions.FakeDirectActionReporter;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
 import org.chromium.chrome.test.ChromeActivityTestRule;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
@@ -54,6 +55,8 @@
     private BottomSheetController mBottomSheetController;
     private DirectActionHandler mHandler;
     private TestingAutofillAssistantModuleEntryProvider mModuleEntryProvider;
+    private final SharedPreferencesManager mSharedPreferencesManager =
+            SharedPreferencesManager.getInstance();
 
     @Before
     public void setUp() throws Exception {
@@ -69,11 +72,10 @@
                 mActivity.getScrim(), mActivity.getTabModelSelector()::getCurrentTab,
                 mModuleEntryProvider);
 
-        ContextUtils.getAppSharedPreferences()
-                .edit()
-                .remove(AutofillAssistantPreferencesUtil.AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED)
-                .remove(AutofillAssistantPreferencesUtil.AUTOFILL_ASSISTANT_SKIP_INIT_SCREEN)
-                .apply();
+        mSharedPreferencesManager.removeKey(
+                ChromePreferenceKeys.AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED);
+        mSharedPreferencesManager.removeKey(
+                ChromePreferenceKeys.AUTOFILL_ASSISTANT_SKIP_INIT_SCREEN);
     }
 
     @Test
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java
index dbfd567..d29c6bb1 100644
--- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java
+++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java
@@ -4,41 +4,29 @@
 
 package org.chromium.chrome.browser.autofill_assistant;
 
-import androidx.annotation.VisibleForTesting;
-
-import org.chromium.base.ContextUtils;
 import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
 
 /** Autofill Assistant related preferences util class. */
-@SuppressWarnings("UseSharedPreferencesManagerFromChromeCheck")
 class AutofillAssistantPreferencesUtil {
     // Avoid instatiation by accident.
     private AutofillAssistantPreferencesUtil() {}
 
-    /** Peference keeping track of whether the onboarding has been accepted. */
-    @VisibleForTesting
-    static final String AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED =
-            "AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED";
-
-    /** LEGACY preference for when the `do not show again' checkbox still existed. */
-    @VisibleForTesting
-    static final String AUTOFILL_ASSISTANT_SKIP_INIT_SCREEN = "AUTOFILL_ASSISTANT_SKIP_INIT_SCREEN";
-
     /** Checks whether the Autofill Assistant switch preference in settings is on. */
     static boolean isAutofillAssistantSwitchOn() {
-        return ContextUtils.getAppSharedPreferences().getBoolean(
+        return SharedPreferencesManager.getInstance().readBoolean(
                 ChromePreferenceKeys.AUTOFILL_ASSISTANT_ENABLED, true);
     }
 
     /** Checks whether the Autofill Assistant onboarding has been accepted. */
     static boolean isAutofillOnboardingAccepted() {
-        return ContextUtils.getAppSharedPreferences().getBoolean(
-                       AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED, false)
+        return SharedPreferencesManager.getInstance().readBoolean(
+                       ChromePreferenceKeys.AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED, false)
                 ||
                 /* Legacy treatment: users of earlier versions should not have to see the onboarding
                 again if they checked the `do not show again' checkbox*/
-                ContextUtils.getAppSharedPreferences().getBoolean(
-                        AUTOFILL_ASSISTANT_SKIP_INIT_SCREEN, false);
+                SharedPreferencesManager.getInstance().readBoolean(
+                        ChromePreferenceKeys.AUTOFILL_ASSISTANT_SKIP_INIT_SCREEN, false);
     }
 
     /** Checks whether the Autofill Assistant onboarding screen should be shown. */
@@ -52,13 +40,9 @@
      * @param accept Flag indicating whether the ToS have been accepted.
      */
     static void setInitialPreferences(boolean accept) {
-        ContextUtils.getAppSharedPreferences()
-                .edit()
-                .putBoolean(ChromePreferenceKeys.AUTOFILL_ASSISTANT_ENABLED, accept)
-                .apply();
-        ContextUtils.getAppSharedPreferences()
-                .edit()
-                .putBoolean(AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED, accept)
-                .apply();
+        SharedPreferencesManager.getInstance().writeBoolean(
+                ChromePreferenceKeys.AUTOFILL_ASSISTANT_ENABLED, accept);
+        SharedPreferencesManager.getInstance().writeBoolean(
+                ChromePreferenceKeys.AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED, accept);
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java
index 126456d..6363dad 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java
@@ -16,6 +16,7 @@
 import org.chromium.base.ApplicationStatus;
 import org.chromium.base.BuildConfig;
 import org.chromium.base.BuildInfo;
+import org.chromium.base.BundleUtils;
 import org.chromium.base.CommandLineInitUtil;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.JNIUtils;
@@ -81,6 +82,7 @@
         super.attachBaseContext(context);
         ContextUtils.initApplicationContext(this);
         maybeInitProcessType(isBrowserProcess);
+        BundleUtils.setIsBundle(ProductConfig.IS_BUNDLE);
         if (isBrowserProcess) {
             if (BuildConfig.IS_MULTIDEX_ENABLED) {
                 ChromiumMultiDexInstaller.install(this);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/identity/UuidBasedUniqueIdentificationGenerator.java b/chrome/android/java/src/org/chromium/chrome/browser/identity/UuidBasedUniqueIdentificationGenerator.java
index 42c24be..f0039d8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/identity/UuidBasedUniqueIdentificationGenerator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/identity/UuidBasedUniqueIdentificationGenerator.java
@@ -5,12 +5,11 @@
 package org.chromium.chrome.browser.identity;
 
 import android.content.Context;
-import android.content.SharedPreferences;
 
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 
-import org.chromium.base.ContextUtils;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
 
 import java.util.UUID;
 
@@ -29,8 +28,8 @@
 
     @Override
     public String getUniqueId(@Nullable String salt) {
-        SharedPreferences preferences = ContextUtils.getAppSharedPreferences();
-        String storedUniqueId = preferences.getString(mPreferenceKey, null);
+        SharedPreferencesManager preferences = SharedPreferencesManager.getInstance();
+        String storedUniqueId = preferences.readString(mPreferenceKey, null);
         if (storedUniqueId != null) {
             return storedUniqueId;
         }
@@ -39,9 +38,7 @@
         String uniqueId = getUUID();
 
         // Store the field so we ensure we always return the same unique ID.
-        SharedPreferences.Editor editor = preferences.edit();
-        editor.putString(mPreferenceKey, uniqueId);
-        editor.apply();
+        preferences.writeString(mPreferenceKey, uniqueId);
         return uniqueId;
 
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
index 1c9f743..7065bda 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
@@ -6,7 +6,6 @@
 
 import android.annotation.TargetApi;
 import android.content.Context;
-import android.content.SharedPreferences;
 import android.os.Build;
 import android.os.SystemClock;
 import android.text.format.DateUtils;
@@ -69,6 +68,8 @@
 import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
 import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
 import org.chromium.chrome.browser.photo_picker.PhotoPickerDialog;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
 import org.chromium.chrome.browser.profiles.ProfileManagerUtils;
 import org.chromium.chrome.browser.rlz.RevenueStats;
 import org.chromium.chrome.browser.searchwidget.SearchWidgetProvider;
@@ -109,12 +110,10 @@
 public class ProcessInitializationHandler {
     private static final String TAG = "ProcessInitHandler";
 
-    private static final String SESSIONS_UUID_PREF_KEY = "chromium.sync.sessions.id";
     private static final String DEV_TOOLS_SERVER_SOCKET_PREFIX = "chrome";
 
     /** Prevents race conditions when deleting snapshot database. */
     private static final Object SNAPSHOT_DATABASE_LOCK = new Object();
-    private static final String SNAPSHOT_DATABASE_REMOVED = "snapshot_database_removed";
     private static final String SNAPSHOT_DATABASE_NAME = "snapshots.db";
 
     private static ProcessInitializationHandler sInstance;
@@ -183,7 +182,8 @@
         // in the SyncController constructor.
         UniqueIdentificationGeneratorFactory.registerGenerator(SyncController.GENERATOR_ID,
                 new UuidBasedUniqueIdentificationGenerator(
-                        application, SESSIONS_UUID_PREF_KEY), false);
+                        application, ChromePreferenceKeys.SYNC_SESSIONS_UUID),
+                false);
 
         // Set up the DownloadCollectionBridge early as display names may be immediately retrieved
         // after native is loaded.
@@ -640,10 +640,10 @@
     @WorkerThread
     private void removeSnapshotDatabase() {
         synchronized (SNAPSHOT_DATABASE_LOCK) {
-            SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
-            if (!prefs.getBoolean(SNAPSHOT_DATABASE_REMOVED, false)) {
+            SharedPreferencesManager prefs = SharedPreferencesManager.getInstance();
+            if (!prefs.readBoolean(ChromePreferenceKeys.SNAPSHOT_DATABASE_REMOVED, false)) {
                 ContextUtils.getApplicationContext().deleteDatabase(SNAPSHOT_DATABASE_NAME);
-                prefs.edit().putBoolean(SNAPSHOT_DATABASE_REMOVED, true).apply();
+                prefs.writeBoolean(ChromePreferenceKeys.SNAPSHOT_DATABASE_REMOVED, true);
             }
         }
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/invalidation/UniqueIdInvalidationClientNameGenerator.java b/chrome/android/java/src/org/chromium/chrome/browser/invalidation/UniqueIdInvalidationClientNameGenerator.java
index da70ba7..6cc5dbc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/invalidation/UniqueIdInvalidationClientNameGenerator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/invalidation/UniqueIdInvalidationClientNameGenerator.java
@@ -9,6 +9,7 @@
 import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.chrome.browser.identity.UniqueIdentificationGenerator;
 import org.chromium.chrome.browser.identity.UuidBasedUniqueIdentificationGenerator;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
 import org.chromium.components.sync.notifier.InvalidationClientNameGenerator;
 import org.chromium.components.sync.notifier.InvalidationClientNameProvider;
 
@@ -19,17 +20,14 @@
  * are unique and consistent across restarts.
  */
 public class UniqueIdInvalidationClientNameGenerator implements InvalidationClientNameGenerator {
-    // Pref key to use for UUID-based generator.
-    private static final String INVALIDATIONS_UUID_PREF_KEY = "chromium.invalidations.uuid";
-
     /**
      * Called during early init to make this InvalidationClientNameGenerator the default.
      *
-     * This should be called very early during initialization to setup the invalidaiton client name.
+     * This should be called very early during initialization to setup the invalidation client name.
      */
     public static void doInitializeAndInstallGenerator(Context context) {
-        UniqueIdentificationGenerator idGenerator =
-                new UuidBasedUniqueIdentificationGenerator(context, INVALIDATIONS_UUID_PREF_KEY);
+        UniqueIdentificationGenerator idGenerator = new UuidBasedUniqueIdentificationGenerator(
+                context, ChromePreferenceKeys.INVALIDATIONS_UUID_PREF_KEY);
         InvalidationClientNameGenerator clientNameGenerator =
                 new UniqueIdInvalidationClientNameGenerator(idGenerator);
         InvalidationClientNameProvider.get().setPreferredClientNameGenerator(clientNameGenerator);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/provider/ChromeBrowserProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/provider/ChromeBrowserProvider.java
index 1fc74ae..c117e7c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/provider/ChromeBrowserProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/provider/ChromeBrowserProvider.java
@@ -10,7 +10,6 @@
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
-import android.content.SharedPreferences;
 import android.content.UriMatcher;
 import android.content.pm.PackageManager;
 import android.database.Cursor;
@@ -29,7 +28,6 @@
 import androidx.annotation.IntDef;
 import androidx.annotation.VisibleForTesting;
 
-import org.chromium.base.ContextUtils;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.NativeMethods;
@@ -40,6 +38,8 @@
 import org.chromium.chrome.browser.database.SQLiteCursor;
 import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
 import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
 import org.chromium.chrome.browser.util.UrlConstants;
 import org.chromium.content_public.browser.BrowserStartupController;
 import org.chromium.content_public.browser.UiThreadTaskTraits;
@@ -140,8 +140,6 @@
     // ID used to indicate an invalid id for bookmark nodes.
     private static final long INVALID_BOOKMARK_ID = -1;
 
-    private static final String LAST_MODIFIED_BOOKMARK_FOLDER_ID_KEY = "last_bookmark_folder_id";
-
     private static final int URI_MATCH_BOOKMARKS = 0;
     private static final int URI_MATCH_BOOKMARKS_ID = 1;
     private static final int URL_MATCH_API_BOOKMARK = 2;
@@ -274,10 +272,8 @@
      */
     private long getLastModifiedBookmarkFolderId() {
         if (mLastModifiedBookmarkFolderId == INVALID_BOOKMARK_ID) {
-            SharedPreferences sharedPreferences =
-                    ContextUtils.getAppSharedPreferences();
-            mLastModifiedBookmarkFolderId = sharedPreferences.getLong(
-                    LAST_MODIFIED_BOOKMARK_FOLDER_ID_KEY, INVALID_BOOKMARK_ID);
+            mLastModifiedBookmarkFolderId = SharedPreferencesManager.getInstance().readLong(
+                    ChromePreferenceKeys.BOOKMARKS_LAST_MODIFIED_FOLDER_ID, INVALID_BOOKMARK_ID);
         }
         return mLastModifiedBookmarkFolderId;
     }
@@ -605,11 +601,9 @@
         if (getLastModifiedBookmarkFolderId() == id) return;
 
         mLastModifiedBookmarkFolderId = id;
-        SharedPreferences sharedPreferences =
-                ContextUtils.getAppSharedPreferences();
-        sharedPreferences.edit()
-                .putLong(LAST_MODIFIED_BOOKMARK_FOLDER_ID_KEY, mLastModifiedBookmarkFolderId)
-                .apply();
+        SharedPreferencesManager.getInstance().writeLong(
+                ChromePreferenceKeys.BOOKMARKS_LAST_MODIFIED_FOLDER_ID,
+                mLastModifiedBookmarkFolderId);
     }
 
     @VisibleForTesting
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/sync/AccountManagementFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/sync/AccountManagementFragment.java
index 5ed0bce..2b04e86e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/sync/AccountManagementFragment.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/sync/AccountManagementFragment.java
@@ -72,6 +72,7 @@
      * The key for an integer value in arguments bundle to
      * specify the correct GAIA service that has triggered the dialog.
      * If the argument is not set, GAIA_SERVICE_TYPE_NONE is used as the origin of the dialog.
+     * TODO(https://crbug.com/1038924): Set the TAG variables of this class to private
      */
     public static final String SHOW_GAIA_SERVICE_TYPE_EXTRA = "ShowGAIAServiceType";
 
@@ -212,11 +213,8 @@
                     SigninUtils.logEvent(
                             ProfileAccountManagementMetrics.TOGGLE_SIGNOUT, mGaiaServiceType);
 
-                    SignOutDialogFragment signOutFragment = new SignOutDialogFragment();
-                    Bundle args = new Bundle();
-                    args.putInt(SHOW_GAIA_SERVICE_TYPE_EXTRA, mGaiaServiceType);
-                    signOutFragment.setArguments(args);
-
+                    SignOutDialogFragment signOutFragment =
+                            SignOutDialogFragment.create(mGaiaServiceType);
                     signOutFragment.setTargetFragment(AccountManagementFragment.this, 0);
                     signOutFragment.show(getFragmentManager(), SIGN_OUT_DIALOG_TAG);
 
@@ -398,6 +396,7 @@
 
     @Override
     public void onSignOutDialogDismissed(boolean signOutClicked) {
+        // TODO(https://crbug.com/1038924): Signout is recorded twice when cancelled
         if (!signOutClicked) {
             SigninUtils.logEvent(ProfileAccountManagementMetrics.SIGNOUT_CANCEL, mGaiaServiceType);
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SignOutDialogFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SignOutDialogFragment.java
index 7a1835e..8aafc32 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SignOutDialogFragment.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SignOutDialogFragment.java
@@ -28,7 +28,7 @@
     /**
      * The extra key used to specify the GAIA service that triggered this dialog.
      */
-    public static final String SHOW_GAIA_SERVICE_TYPE_EXTRA = "ShowGAIAServiceType";
+    private static final String SHOW_GAIA_SERVICE_TYPE_EXTRA = "ShowGAIAServiceType";
 
     /**
      * Receives updates when the user clicks "Sign out" or dismisses the dialog.
@@ -58,6 +58,14 @@
      */
     private @GAIAServiceType int mGaiaServiceType = GAIAServiceType.GAIA_SERVICE_TYPE_NONE;
 
+    public static SignOutDialogFragment create(@GAIAServiceType int gaiaServiceType) {
+        SignOutDialogFragment signOutFragment = new SignOutDialogFragment();
+        Bundle args = new Bundle();
+        args.putInt(SHOW_GAIA_SERVICE_TYPE_EXTRA, gaiaServiceType);
+        signOutFragment.setArguments(args);
+        return signOutFragment;
+    }
+
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         if (getArguments() != null) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java
index 841b12f..a56990a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/TrustedVaultClient.java
@@ -105,9 +105,6 @@
      * Displays a UI that allows the user to reauthenticate and retrieve the sync encryption keys.
      */
     public void displayKeyRetrievalDialog(Context context) {
-        // TODO(crbug.com/1012659): Before starting the intent, one last attempt
-        // should be made to read the currently-available keys.
-
         Intent intent = createKeyRetrievalIntent();
         if (intent == null) return;
 
@@ -129,6 +126,16 @@
     }
 
     /**
+     * Notifies all registered native clients (in practice, exactly one) that keys in the backend
+     * may have changed, which usually leads to refetching the keys from the backend.
+     */
+    public void notifyKeysChanged() {
+        for (long nativeTrustedVaultClientAndroid : mNativeTrustedVaultClientAndroidSet) {
+            TrustedVaultClientJni.get().notifyKeysChanged(nativeTrustedVaultClientAndroid);
+        }
+    }
+
+    /**
      * Registers a C++ client, which is a prerequisite before interacting with Java.
      */
     @CalledByNative
@@ -207,5 +214,6 @@
     interface Natives {
         void fetchKeysCompleted(long nativeTrustedVaultClientAndroid, String gaiaId, byte[][] keys);
         void markKeysAsStaleCompleted(long nativeTrustedVaultClientAndroid, boolean result);
+        void notifyKeysChanged(long nativeTrustedVaultClientAndroid);
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/identity/UuidBasedUniqueIdentificationGeneratorTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/identity/UuidBasedUniqueIdentificationGeneratorTest.java
index 13a7368..cacaee6 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/identity/UuidBasedUniqueIdentificationGeneratorTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/identity/UuidBasedUniqueIdentificationGeneratorTest.java
@@ -14,6 +14,7 @@
 
 import org.chromium.base.test.util.AdvancedMockContext;
 import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 
 @RunWith(ChromeJUnit4ClassRunner.class)
@@ -25,6 +26,7 @@
     @Before
     public void setUp() {
         mContext = new AdvancedMockContext(InstrumentationRegistry.getTargetContext());
+        SharedPreferencesManager.getInstance().disableKeyCheckerForTesting();
     }
 
     @Test
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SignOutDialogFragmentTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SignOutDialogFragmentTest.java
new file mode 100644
index 0000000..fd8fc26
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SignOutDialogFragmentTest.java
@@ -0,0 +1,169 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.signin;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+import android.support.v7.app.AlertDialog;
+import android.widget.TextView;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.robolectric.Robolectric;
+import org.robolectric.shadows.ShadowAlertDialog;
+
+import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.base.test.DisableNativeTestRule;
+import org.chromium.base.test.util.JniMocker;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.profiles.ProfileAccountManagementMetrics;
+import org.chromium.components.signin.GAIAServiceType;
+
+/** Tests for {@link SignOutDialogFragment}. */
+@RunWith(BaseRobolectricTestRunner.class)
+public class SignOutDialogFragmentTest {
+    private static final String TEST_DOMAIN = "test.domain.example.com";
+
+    private class DummySignOutTargetFragment
+            extends Fragment implements SignOutDialogFragment.SignOutDialogListener {
+        @Override
+        public void onSignOutClicked(boolean forceWipeUserData) {}
+
+        @Override
+        public void onSignOutDialogDismissed(boolean signOutClicked) {}
+    }
+
+    @Rule
+    public final DisableNativeTestRule mDisableNative = new DisableNativeTestRule();
+
+    @Rule
+    public final JniMocker mocker = new JniMocker();
+
+    @Mock
+    private SigninUtils.Natives mSigninUtilsNativeMock;
+
+    @Mock
+    private SigninManager mSigninManagerMock;
+
+    @Spy
+    private final DummySignOutTargetFragment mTargetFragment = new DummySignOutTargetFragment();
+
+    private SignOutDialogFragment mSignOutDialog;
+
+    private FragmentManager mFragmentManager;
+
+    @Before
+    public void setUp() {
+        initMocks(this);
+        mocker.mock(SigninUtilsJni.TEST_HOOKS, mSigninUtilsNativeMock);
+        IdentityServicesProvider.setInstanceForTests(mock(IdentityServicesProvider.class));
+        when(IdentityServicesProvider.get().getSigninManager()).thenReturn(mSigninManagerMock);
+        setUpSignOutDialog();
+    }
+
+    private void setUpSignOutDialog() {
+        mFragmentManager =
+                Robolectric.setupActivity(FragmentActivity.class).getSupportFragmentManager();
+        mFragmentManager.beginTransaction().add(mTargetFragment, null).commit();
+        mSignOutDialog = SignOutDialogFragment.create(GAIAServiceType.GAIA_SERVICE_TYPE_NONE);
+        mSignOutDialog.setTargetFragment(mTargetFragment, 0);
+    }
+
+    @Test
+    public void testMessageWhenAccountIsManaged() {
+        when(mSigninManagerMock.getManagementDomain()).thenReturn(TEST_DOMAIN);
+        AlertDialog alertDialog = getSignOutAlertDialogAfterShowingIt();
+        TextView messageTextView = alertDialog.findViewById(android.R.id.message);
+        assertEquals(
+                mSignOutDialog.getString(R.string.signout_managed_account_message, TEST_DOMAIN),
+                messageTextView.getText());
+    }
+
+    @Test
+    public void testPositiveButtonWhenAccountIsManaged() {
+        when(mSigninManagerMock.getManagementDomain()).thenReturn(TEST_DOMAIN);
+        AlertDialog alertDialog = getSignOutAlertDialogAfterShowingIt();
+        alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
+        verify(mSigninUtilsNativeMock)
+                .logEvent(ProfileAccountManagementMetrics.SIGNOUT_SIGNOUT,
+                        GAIAServiceType.GAIA_SERVICE_TYPE_NONE);
+        verify(mTargetFragment).onSignOutClicked(false);
+    }
+
+    @Test
+    public void testPositiveButtonWhenAccountIsNotManagedAndRemoveLocalDataNotChecked() {
+        AlertDialog alertDialog = getSignOutAlertDialogAfterShowingIt();
+        alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
+        verify(mSigninUtilsNativeMock)
+                .logEvent(ProfileAccountManagementMetrics.SIGNOUT_SIGNOUT,
+                        GAIAServiceType.GAIA_SERVICE_TYPE_NONE);
+        verify(mTargetFragment).onSignOutClicked(false);
+    }
+
+    @Test
+    public void testPositiveButtonWhenAccountIsNotManagedAndRemoveLocalDataChecked() {
+        AlertDialog alertDialog = getSignOutAlertDialogAfterShowingIt();
+        alertDialog.findViewById(R.id.remove_local_data).performClick();
+        alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
+        verify(mSigninUtilsNativeMock)
+                .logEvent(ProfileAccountManagementMetrics.SIGNOUT_SIGNOUT,
+                        GAIAServiceType.GAIA_SERVICE_TYPE_NONE);
+        verify(mTargetFragment).onSignOutClicked(true);
+    }
+
+    @Test
+    public void testNegativeButtonHasNoEffectWhenAccountIsManaged() {
+        when(mSigninManagerMock.getManagementDomain()).thenReturn(TEST_DOMAIN);
+        AlertDialog alertDialog = getSignOutAlertDialogAfterShowingIt();
+        alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).performClick();
+        verify(mTargetFragment, never()).onSignOutClicked(anyBoolean());
+    }
+
+    @Test
+    public void testNegativeButtonHasNoEffectWhenAccountIsNotManaged() {
+        AlertDialog alertDialog = getSignOutAlertDialogAfterShowingIt();
+        alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).performClick();
+        verify(mTargetFragment, never()).onSignOutClicked(anyBoolean());
+    }
+
+    @Test
+    public void testDismissWhenPositiveButtonIsNotClicked() {
+        AlertDialog alertDialog = getSignOutAlertDialogAfterShowingIt();
+        alertDialog.dismiss();
+        verify(mSigninUtilsNativeMock)
+                .logEvent(ProfileAccountManagementMetrics.SIGNOUT_CANCEL,
+                        GAIAServiceType.GAIA_SERVICE_TYPE_NONE);
+        verify(mTargetFragment).onSignOutDialogDismissed(false);
+    }
+
+    @Test
+    public void testDismissWhenPositiveButtonIsClicked() {
+        AlertDialog alertDialog = getSignOutAlertDialogAfterShowingIt();
+        alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
+        alertDialog.dismiss();
+        verify(mSigninUtilsNativeMock)
+                .logEvent(ProfileAccountManagementMetrics.SIGNOUT_CANCEL,
+                        GAIAServiceType.GAIA_SERVICE_TYPE_NONE);
+        verify(mTargetFragment).onSignOutDialogDismissed(true);
+    }
+
+    private AlertDialog getSignOutAlertDialogAfterShowingIt() {
+        mSignOutDialog.show(mFragmentManager, null);
+        return (AlertDialog) ShadowAlertDialog.getLatestDialog();
+    }
+}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeUnitTest.java b/chrome/android/native_java_unittests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeUnitTest.java
similarity index 94%
rename from chrome/android/junit/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeUnitTest.java
rename to chrome/android/native_java_unittests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeUnitTest.java
index 4fab7f3..e17317f 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeUnitTest.java
+++ b/chrome/android/native_java_unittests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeUnitTest.java
@@ -10,11 +10,8 @@
 
 import android.app.Notification;
 
-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;
 import org.chromium.chrome.browser.notifications.channels.ChannelDefinitions;
 import org.chromium.chrome.browser.notifications.channels.SiteChannelsManager;
@@ -24,17 +21,18 @@
 /**
  * Unit tests for NotificationPlatformBridge.
  */
-@RunWith(BaseRobolectricTestRunner.class)
-@Config(manifest = Config.NONE)
 public class NotificationPlatformBridgeUnitTest {
+    @CalledByNative
+    private NotificationPlatformBridgeUnitTest() {}
+
     /**
      * Verifies that the getOriginFromTag method returns the origin for valid input, and null for
      * invalid input.
      *
      * This is defined in functions in notification_id_generator.cc.
      */
-    @Test
     @Feature({"Browser", "Notifications"})
+    @CalledByNativeJavaTest
     public void testGetOriginFromNotificationTag() {
         // The common case.
         assertEquals("https://example.com",
@@ -62,8 +60,8 @@
      * Verifies that the getOriginFromChannelId method returns the origin for a site channel,
      * and null for any other channel or a null channel id.
      */
-    @Test
     @Feature({"Browser", "Notifications"})
+    @CalledByNativeJavaTest
     public void testGetOriginFromChannelId() {
         // Returns the expected origin for a channel id associated with a particular origin.
         assertEquals("https://example.com",
@@ -83,8 +81,8 @@
     /**
      * Verifies that the makeDefaults method returns the generated notification defaults.
      */
-    @Test
     @Feature({"Browser", "Notifications"})
+    @CalledByNativeJavaTest
     public void testMakeDefaults() {
         // 0 should be returned if pattern length is 0, silent is true, and vibration is enabled.
         assertEquals(0, NotificationPlatformBridge.makeDefaults(0, true, true));
@@ -109,8 +107,8 @@
      * Verifies that the makeVibrationPattern method returns vibration pattern used
      * in Android notification.
      */
-    @Test
     @Feature({"Browser", "Notifications"})
+    @CalledByNativeJavaTest
     public void testMakeVibrationPattern() {
         assertTrue(Arrays.equals(new long[] {0, 100, 200, 300},
                 NotificationPlatformBridge.makeVibrationPattern(new int[] {100, 200, 300})));
diff --git a/chrome/app/BUILD.gn b/chrome/app/BUILD.gn
index 8dc7f15..f87bc1d 100644
--- a/chrome/app/BUILD.gn
+++ b/chrome/app/BUILD.gn
@@ -135,7 +135,7 @@
     "//chrome/utility",
     "//components/gwp_asan/buildflags",
     "//components/nacl/common:buildflags",
-    "//components/startup_metric_utils/browser:lib",
+    "//components/startup_metric_utils/browser",
     "//content/public/app:both",
     "//content/public/common",
     "//content/public/common:service_names",
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp
index ca6f766..c8af1cb 100644
--- a/chrome/app/chromeos_strings.grdp
+++ b/chrome/app/chromeos_strings.grdp
@@ -907,8 +907,8 @@
   <message name="IDS_APP_START_WAIT_FOR_APP_WINDOW_MESSAGE" desc="Message displayed while waiting for the application to create its window in kiosk mode.">
     Waiting for application window...
   </message>
-  <message name="IDS_APP_START_WAIT_FOR_APP_WINDOW_INSTALL_FAILED_MESSAGE" desc="Message displayed when kiosk app installation fails, but we still try to run the app.">
-    Failed to obtain app data, still trying to run the app...
+  <message name="IDS_APP_START_WAIT_FOR_APP_WINDOW_INSTALL_FAILED_MESSAGE" desc="Message displayed when kiosk app meta-data obtention fails, but we try to run the app anyway without it.">
+    Failed to obtain app data, trying to run the app anyway...
   </message>
 
 
diff --git a/chrome/app/generated_resources_grd/IDS_SYNC_ERROR_USER_MENU_RETRIEVE_KEYS_BUTTON.png.sha1 b/chrome/app/generated_resources_grd/IDS_SYNC_ERROR_USER_MENU_RETRIEVE_KEYS_BUTTON.png.sha1
new file mode 100644
index 0000000..63f5582
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_SYNC_ERROR_USER_MENU_RETRIEVE_KEYS_BUTTON.png.sha1
@@ -0,0 +1 @@
+0a129f2b186ca99e1df0f56197f6846290692368
\ No newline at end of file
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index 499473f..ef7867c 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -4445,6 +4445,27 @@
   <message name="IDS_SETTINGS_PERSONALIZE_GOOGLE_SERVICES_TITLE" desc="Title of the personalize Google services section. When clicked, takes the user to the Google Activity Controls.">
     Control how your browsing history is used to personalize Search, ads, and more
   </message>
+  <message name="IDS_SETTINGS_USE_HISTORY_TO_PERSONALIZE_GOOGLE_SERVICES_TITLE" desc="Title of the use your history to personalize Google services section. When clicked, takes the user to the Google Activity Controls." translateable="false">
+    Use your History to personalize Search and other Google services
+  </message>
+  <message name="IDS_SETTINGS_SWAA_ON" desc="The sWAA state that shows in the use history to personalize google services row" translateable="false">
+    On
+  </message>
+  <message name="IDS_SETTINGS_SWAA_OFF" desc="The sWAA state that shows in the use history to personalize google services row" translateable="false">
+    Off
+  </message>
+  <message name="IDS_SETTINGS_SWAA_ON_HINT" desc="Hint that shows when sWAA is On in the use history to personalize google services row" translateable="false">
+    For example, get suggestions in YouTube based on Chrome browsing
+  </message>
+  <message name="IDS_SETTINGS_DATA_ENCRYPTED_HINT" desc="Hint that shows when sWAA is off in the use history to personalize google services row because data is encrypted with custom passphrase" translateable="false">
+    Your synced data was encrypted
+  </message>
+   <message name="IDS_SETTINGS_HISTORY_SYNC_OFF_HINT" desc="Hint that shows when sWAA is off in the use history to personalize google services row because history sync is off" translateable="false">
+    Turned off because you disabled syncing history
+  </message>
+   <message name="IDS_SETTINGS_SWAA_OFF_HINT" desc="Hint that shows when sWAA is off in the use history to personalize google services row because history recording is disabled in Web and App Activity" translateable="false">
+    History recording is turned off in Activity controls.
+   </message>
 
   <if expr="not chromeos">
     <!-- Import Settings Dialog -->
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 8bb1c2a..b524820 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -2093,8 +2093,7 @@
     "//components/signin/public/webdata",
     "//components/spellcheck:buildflags",
     "//components/ssl_errors",
-    "//components/startup_metric_utils/browser:host",
-    "//components/startup_metric_utils/browser:lib",
+    "//components/startup_metric_utils/browser",
     "//components/storage_monitor",
     "//components/strings",
     "//components/subresource_filter/content/browser",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 1f7381d..50448e9 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1701,6 +1701,9 @@
     {"enable-webassembly-threads", flag_descriptions::kEnableWasmThreadsName,
      flag_descriptions::kEnableWasmThreadsDescription, kOsAll,
      FEATURE_VALUE_TYPE(features::kWebAssemblyThreads)},
+    {"enable-webassembly-tiering", flag_descriptions::kEnableWasmTieringName,
+     flag_descriptions::kEnableWasmTieringDescription, kOsAll,
+     FEATURE_VALUE_TYPE(features::kWebAssemblyTiering)},
     {"shared-array-buffer", flag_descriptions::kEnableSharedArrayBufferName,
      flag_descriptions::kEnableSharedArrayBufferDescription, kOsAll,
      FEATURE_VALUE_TYPE(features::kSharedArrayBuffer)},
@@ -4834,6 +4837,13 @@
      FEATURE_VALUE_TYPE(chrome::android::kProfileCard)},
 #endif  // defined(OS_ANDROID)
 
+#if !defined(OS_ANDROID)
+    {"sync-setup-friendly-settings",
+     flag_descriptions::kSyncSetupFriendlySettingsName,
+     flag_descriptions::kSyncSetupFriendlySettingsDescription, kOsDesktop,
+     FEATURE_VALUE_TYPE(features::kSyncSetupFriendlySettings)},
+#endif  // !defined(OS_ANDROID)
+
     // NOTE: Adding a new flag requires adding a corresponding entry to enum
     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
     // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/android/autofill_assistant/ui_controller_android.cc b/chrome/browser/android/autofill_assistant/ui_controller_android.cc
index 3927e6f8..a7266ca3 100644
--- a/chrome/browser/android/autofill_assistant/ui_controller_android.cc
+++ b/chrome/browser/android/autofill_assistant/ui_controller_android.cc
@@ -1031,6 +1031,9 @@
     return;
   }
 
+  auto jcontext =
+      Java_AutofillAssistantUiController_getContext(env, java_object_);
+
   if (field_change == UserData::FieldChange::ALL ||
       field_change == UserData::FieldChange::TERMS_AND_CONDITIONS) {
     Java_AssistantCollectUserDataModel_setTermsStatus(
@@ -1039,65 +1042,119 @@
 
   if (field_change == UserData::FieldChange::ALL ||
       field_change == UserData::FieldChange::AVAILABLE_PROFILES) {
-    auto sorted_profile_indices = SortByCompleteness(*collect_user_data_options,
-                                                     state->available_profiles);
-    auto jlist =
-        Java_AssistantCollectUserDataModel_createAutofillProfileList(env);
-    for (int index : sorted_profile_indices) {
-      Java_AssistantCollectUserDataModel_addAutofillProfile(
-          env, jlist,
+    // Contact profiles.
+    auto jcontactlist =
+        Java_AssistantCollectUserDataModel_createAutofillContactList(env);
+    auto contact_indices = SortContactsByCompleteness(
+        *collect_user_data_options, state->available_profiles);
+    for (int index : contact_indices) {
+      auto jcontact = Java_AssistantCollectUserDataModel_createAutofillContact(
+          env, jcontext,
           autofill::PersonalDataManagerAndroid::CreateJavaProfileFromNative(
-              env, *state->available_profiles[index]));
+              env, *state->available_profiles[index]),
+          collect_user_data_options->request_payer_name,
+          collect_user_data_options->request_payer_phone,
+          collect_user_data_options->request_payer_email);
+      if (jcontact) {
+        Java_AssistantCollectUserDataModel_addAutofillContact(env, jcontactlist,
+                                                              jcontact);
+      }
     }
-    Java_AssistantCollectUserDataModel_setAutofillProfiles(env, jmodel, jlist);
+    Java_AssistantCollectUserDataModel_setAvailableContacts(env, jmodel,
+                                                            jcontactlist);
 
     // Ignore changes to FieldChange::CONTACT_PROFILE, this is already coming
     // from the view.
     autofill::AutofillProfile* contact_profile = state->contact_profile.get();
-    Java_AssistantCollectUserDataModel_setContactDetails(
+    Java_AssistantCollectUserDataModel_setSelectedContactDetails(
         env, jmodel,
         contact_profile == nullptr
             ? nullptr
-            : autofill::PersonalDataManagerAndroid::CreateJavaProfileFromNative(
-                  env, *contact_profile));
+            : Java_AssistantCollectUserDataModel_createAutofillContact(
+                  env, jcontext,
+                  autofill::PersonalDataManagerAndroid::
+                      CreateJavaProfileFromNative(env, *contact_profile),
+                  collect_user_data_options->request_payer_name,
+                  collect_user_data_options->request_payer_phone,
+                  collect_user_data_options->request_payer_email));
+
+    // Billing addresses profiles.
+    auto jbillinglist =
+        Java_AssistantCollectUserDataModel_createAutofillAddressList(env);
+    for (const auto& profile : state->available_profiles) {
+      auto jaddress = Java_AssistantCollectUserDataModel_createAutofillAddress(
+          env, jcontext,
+          autofill::PersonalDataManagerAndroid::CreateJavaProfileFromNative(
+              env, *profile));
+      if (jaddress) {
+        Java_AssistantCollectUserDataModel_addAutofillAddress(env, jbillinglist,
+                                                              jaddress);
+      }
+    }
+    Java_AssistantCollectUserDataModel_setAvailableBillingAddresses(
+        env, jmodel, jbillinglist);
+
+    // Address profiles.
+    auto jshippinglist =
+        Java_AssistantCollectUserDataModel_createAutofillAddressList(env);
+    auto address_indices = SortAddressesByCompleteness(
+        *collect_user_data_options, state->available_profiles);
+    for (int index : address_indices) {
+      auto jaddress = Java_AssistantCollectUserDataModel_createAutofillAddress(
+          env, jcontext,
+          autofill::PersonalDataManagerAndroid::CreateJavaProfileFromNative(
+              env, *state->available_profiles[index]));
+      if (jaddress) {
+        Java_AssistantCollectUserDataModel_addAutofillAddress(
+            env, jshippinglist, jaddress);
+      }
+    }
+    Java_AssistantCollectUserDataModel_setAvailableShippingAddresses(
+        env, jmodel, jshippinglist);
 
     // Ignore changes to FieldChange::SHIPPING_ADDRESS, this is already coming
     // from the view.
     autofill::AutofillProfile* shipping_address = state->shipping_address.get();
-    Java_AssistantCollectUserDataModel_setShippingAddress(
+    Java_AssistantCollectUserDataModel_setSelectedShippingAddress(
         env, jmodel,
         shipping_address == nullptr
             ? nullptr
-            : autofill::PersonalDataManagerAndroid::CreateJavaProfileFromNative(
-                  env, *shipping_address));
+            : Java_AssistantCollectUserDataModel_createAutofillAddress(
+                  env, jcontext,
+                  autofill::PersonalDataManagerAndroid::
+                      CreateJavaProfileFromNative(env, *shipping_address)));
   }
 
   if (field_change == UserData::FieldChange::ALL ||
       field_change == UserData::FieldChange::AVAILABLE_PAYMENT_INSTRUMENTS) {
-    auto sorted_payment_instrument_indices = SortByCompleteness(
-        *collect_user_data_options, state->available_payment_instruments);
     auto jlist =
-        Java_AssistantCollectUserDataModel_createAutofillPaymentMethodList(env);
+        Java_AssistantCollectUserDataModel_createAutofillPaymentInstrumentList(
+            env);
+    auto sorted_payment_instrument_indices =
+        SortPaymentInstrumentsByCompleteness(
+            *collect_user_data_options, state->available_payment_instruments);
     for (int index : sorted_payment_instrument_indices) {
       const auto& instrument = state->available_payment_instruments[index];
-      Java_AssistantCollectUserDataModel_addAutofillPaymentMethod(
-          env, jlist,
-          autofill::PersonalDataManagerAndroid::CreateJavaCreditCardFromNative(
-              env, *(instrument->card)),
+      Java_AssistantCollectUserDataModel_addAutofillPaymentInstrument(
+          env, jmodel, jlist,
+          instrument->card == nullptr
+              ? nullptr
+              : autofill::PersonalDataManagerAndroid::
+                    CreateJavaCreditCardFromNative(env, *(instrument->card)),
           instrument->billing_address == nullptr
               ? nullptr
               : autofill::PersonalDataManagerAndroid::
                     CreateJavaProfileFromNative(
                         env, *(instrument->billing_address)));
     }
-    Java_AssistantCollectUserDataModel_setAutofillPaymentMethods(env, jmodel,
-                                                                 jlist);
+    Java_AssistantCollectUserDataModel_setAvailablePaymentInstruments(
+        env, jmodel, jlist);
 
     // Ignore changes to FieldChange::CARD, this is already coming from the
     // view.
     autofill::CreditCard* card = state->card.get();
     autofill::AutofillProfile* billing_address = state->billing_address.get();
-    Java_AssistantCollectUserDataModel_setPaymentMethod(
+    Java_AssistantCollectUserDataModel_setSelectedPaymentInstrument(
         env, jmodel,
         card == nullptr ? nullptr
                         : autofill::PersonalDataManagerAndroid::
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index 1f7190e..90448ea 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -403,9 +403,6 @@
   void BindHostReceiverForRenderer(
       content::RenderProcessHost* render_process_host,
       mojo::GenericPendingReceiver receiver) override;
-  void BindHostReceiverForRendererOnIOThread(
-      int render_process_id,
-      mojo::GenericPendingReceiver* receiver) override;
   void WillStartServiceManager() override;
   base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
       base::StringPiece name) override;
diff --git a/chrome/browser/chrome_content_browser_client_receiver_bindings.cc b/chrome/browser/chrome_content_browser_client_receiver_bindings.cc
index aed1cbb..4cf2683 100644
--- a/chrome/browser/chrome_content_browser_client_receiver_bindings.cc
+++ b/chrome/browser/chrome_content_browser_client_receiver_bindings.cc
@@ -32,7 +32,6 @@
 #include "components/safe_browsing/buildflags.h"
 #include "components/safe_browsing/content/browser/mojo_safe_browsing_impl.h"
 #include "components/spellcheck/spellcheck_buildflags.h"
-#include "components/startup_metric_utils/browser/startup_metric_host_impl.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/resource_context.h"
@@ -339,15 +338,3 @@
   }
 #endif  // BUILDFLAG(ENABLE_PLUGINS)
 }
-
-void ChromeContentBrowserClient::BindHostReceiverForRendererOnIOThread(
-    int render_process_id,
-    mojo::GenericPendingReceiver* receiver) {
-  if (auto host_receiver =
-          receiver->As<startup_metric_utils::mojom::StartupMetricHost>()) {
-    startup_metric_utils::StartupMetricHostImpl::Create(
-        std::move(host_receiver));
-    return;
-  }
-}
-
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index cd23290..1e50e18 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -2357,6 +2357,8 @@
     "extensions/input_method_api.h",
     "extensions/login_screen/login/login_api.cc",
     "extensions/login_screen/login/login_api.h",
+    "extensions/login_screen/login/login_api_lock_handler.cc",
+    "extensions/login_screen/login/login_api_lock_handler.h",
     "extensions/login_screen/login_screen_storage/login_screen_storage_api.cc",
     "extensions/login_screen/login_screen_storage/login_screen_storage_api.h",
     "extensions/login_screen/login_screen_ui/login_screen_ui_api.cc",
diff --git a/chrome/browser/chromeos/crostini/ansible/ansible_management_service.cc b/chrome/browser/chromeos/crostini/ansible/ansible_management_service.cc
index 1b261f3..996cde11 100644
--- a/chrome/browser/chromeos/crostini/ansible/ansible_management_service.cc
+++ b/chrome/browser/chromeos/crostini/ansible/ansible_management_service.cc
@@ -179,13 +179,15 @@
 }
 
 void AnsibleManagementService::OnApplyAnsiblePlaybookProgress(
-    vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::Status status) {
+    vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::Status status,
+    const std::string& failure_details) {
   switch (status) {
     case vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::SUCCEEDED:
       OnConfigurationFinished(true);
       break;
     case vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::FAILED:
-      LOG(ERROR) << "Ansible playbook application has failed";
+      LOG(ERROR) << "Ansible playbook application has failed with reason:\n"
+                 << failure_details;
       OnConfigurationFinished(false);
       break;
     case vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::IN_PROGRESS:
diff --git a/chrome/browser/chromeos/crostini/ansible/ansible_management_service.h b/chrome/browser/chromeos/crostini/ansible/ansible_management_service.h
index eebd2a0..0cfb62c 100644
--- a/chrome/browser/chromeos/crostini/ansible/ansible_management_service.h
+++ b/chrome/browser/chromeos/crostini/ansible/ansible_management_service.h
@@ -52,7 +52,8 @@
                                   int progress_percent) override;
 
   void OnApplyAnsiblePlaybookProgress(
-      vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::Status status);
+      vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::Status status,
+      const std::string& failure_details);
 
   void AddObserver(Observer* observer);
   void RemoveObserver(Observer* observer);
diff --git a/chrome/browser/chromeos/crostini/crostini_manager.cc b/chrome/browser/chromeos/crostini/crostini_manager.cc
index 44857fd..bc7b0064 100644
--- a/chrome/browser/chromeos/crostini/crostini_manager.cc
+++ b/chrome/browser/chromeos/crostini/crostini_manager.cc
@@ -2322,7 +2322,8 @@
 
   // TODO(okalitova): Add an observer.
   AnsibleManagementService::GetForProfile(profile_)
-      ->OnApplyAnsiblePlaybookProgress(signal.status());
+      ->OnApplyAnsiblePlaybookProgress(signal.status(),
+                                       signal.failure_details());
 }
 
 void CrostiniManager::OnUpgradeContainerProgress(
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_api.cc b/chrome/browser/chromeos/extensions/login_screen/login/login_api.cc
index 1dcb43a..f3c21f5 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login/login_api.cc
+++ b/chrome/browser/chromeos/extensions/login_screen/login/login_api.cc
@@ -7,16 +7,21 @@
 #include <memory>
 #include <string>
 
+#include "base/bind.h"
 #include "base/logging.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.h"
 #include "chrome/browser/chromeos/login/existing_user_controller.h"
 #include "chrome/browser/chromeos/login/signin_specifics.h"
+#include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/common/extensions/api/login.h"
 #include "chrome/common/pref_names.h"
+#include "chromeos/login/auth/key.h"
 #include "chromeos/login/auth/user_context.h"
 #include "components/prefs/pref_service.h"
+#include "components/session_manager/core/session_manager.h"
 #include "components/user_manager/user.h"
 #include "components/user_manager/user_manager.h"
 #include "components/user_manager/user_type.h"
@@ -25,8 +30,12 @@
 
 namespace {
 
-const char kErrorNoManagedGuestSessionAccounts[] =
-    "No managed guest session accounts";
+std::string GetLaunchExtensionIdPrefValue(const user_manager::User* user) {
+  Profile* profile = chromeos::ProfileHelper::Get()->GetProfileByUser(user);
+  DCHECK(profile);
+  PrefService* prefs = profile->GetPrefs();
+  return prefs->GetString(prefs::kLoginExtensionApiLaunchExtensionId);
+}
 
 }  // namespace
 
@@ -39,6 +48,25 @@
 
 }  // namespace login_api
 
+namespace login_api_errors {
+
+const char kAlreadyActiveSession[] = "There is already an active session";
+const char kAnotherLoginAttemptInProgress[] =
+    "Another login attempt is in progress";
+const char kNoManagedGuestSessionAccounts[] =
+    "No managed guest session accounts";
+const char kNoPermissionToLock[] =
+    "The extension does not have permission to lock this session";
+const char kSessionIsNotActive[] = "Session is not active";
+const char kNoPermissionToUnlock[] =
+    "The extension does not have permission to unlock this session";
+const char kSessionIsNotLocked[] = "Session is not locked";
+const char kAnotherUnlockAttemptInProgress[] =
+    "Another unlock attempt is in progress";
+const char kAuthenticationFailed[] = "Authentication failed";
+
+}  // namespace login_api_errors
+
 LoginLaunchManagedGuestSessionFunction::
     LoginLaunchManagedGuestSessionFunction() = default;
 LoginLaunchManagedGuestSessionFunction::
@@ -46,17 +74,36 @@
 
 ExtensionFunction::ResponseAction
 LoginLaunchManagedGuestSessionFunction::Run() {
+  std::unique_ptr<api::login::LaunchManagedGuestSession::Params> parameters =
+      api::login::LaunchManagedGuestSession::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(parameters);
+
+  if (session_manager::SessionManager::Get()->session_state() !=
+      session_manager::SessionState::LOGIN_PRIMARY) {
+    return RespondNow(Error(login_api_errors::kAlreadyActiveSession));
+  }
+
+  chromeos::ExistingUserController* existing_user_controller =
+      chromeos::ExistingUserController::current_controller();
+  if (existing_user_controller->IsSigninInProgress()) {
+    return RespondNow(Error(login_api_errors::kAnotherLoginAttemptInProgress));
+  }
+
   user_manager::UserManager* user_manager = user_manager::UserManager::Get();
   for (const user_manager::User* user : user_manager->GetUsers()) {
     if (!user || user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT)
       continue;
     chromeos::UserContext context(user_manager::USER_TYPE_PUBLIC_ACCOUNT,
                                   user->GetAccountId());
-    chromeos::ExistingUserController::current_controller()->Login(
-        context, chromeos::SigninSpecifics());
+    if (parameters->password) {
+      context.SetKey(chromeos::Key(*parameters->password));
+      context.SetManagedGuestSessionLaunchExtensionId(extension_id());
+    }
+
+    existing_user_controller->Login(context, chromeos::SigninSpecifics());
     return RespondNow(NoArguments());
   }
-  return RespondNow(Error(kErrorNoManagedGuestSessionAccounts));
+  return RespondNow(Error(login_api_errors::kNoManagedGuestSessionAccounts));
 }
 
 LoginExitCurrentSessionFunction::LoginExitCurrentSessionFunction() = default;
@@ -98,4 +145,78 @@
       OneArgument(std::make_unique<base::Value>(data_for_next_login_attempt)));
 }
 
+LoginLockManagedGuestSessionFunction::LoginLockManagedGuestSessionFunction() =
+    default;
+LoginLockManagedGuestSessionFunction::~LoginLockManagedGuestSessionFunction() =
+    default;
+
+ExtensionFunction::ResponseAction LoginLockManagedGuestSessionFunction::Run() {
+  const user_manager::UserManager* user_manager =
+      user_manager::UserManager::Get();
+  const user_manager::User* active_user = user_manager->GetActiveUser();
+  if (!active_user ||
+      active_user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT ||
+      !user_manager->CanCurrentUserLock()) {
+    return RespondNow(Error(login_api_errors::kNoPermissionToLock));
+  }
+
+  if (session_manager::SessionManager::Get()->session_state() !=
+      session_manager::SessionState::ACTIVE) {
+    return RespondNow(Error(login_api_errors::kSessionIsNotActive));
+  }
+
+  chromeos::LoginApiLockHandler::Get()->RequestLockScreen();
+  return RespondNow(NoArguments());
+}
+
+LoginUnlockManagedGuestSessionFunction::
+    LoginUnlockManagedGuestSessionFunction() = default;
+LoginUnlockManagedGuestSessionFunction::
+    ~LoginUnlockManagedGuestSessionFunction() = default;
+
+ExtensionFunction::ResponseAction
+LoginUnlockManagedGuestSessionFunction::Run() {
+  std::unique_ptr<api::login::UnlockManagedGuestSession::Params> parameters =
+      api::login::UnlockManagedGuestSession::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(parameters);
+
+  const user_manager::User* active_user =
+      user_manager::UserManager::Get()->GetActiveUser();
+  if (!active_user ||
+      active_user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT ||
+      extension_id() != GetLaunchExtensionIdPrefValue(active_user)) {
+    return RespondNow(Error(login_api_errors::kNoPermissionToUnlock));
+  }
+
+  if (session_manager::SessionManager::Get()->session_state() !=
+      session_manager::SessionState::LOCKED) {
+    return RespondNow(Error(login_api_errors::kSessionIsNotLocked));
+  }
+
+  chromeos::LoginApiLockHandler* handler = chromeos::LoginApiLockHandler::Get();
+  if (handler->IsUnlockInProgress()) {
+    return RespondNow(Error(login_api_errors::kAnotherUnlockAttemptInProgress));
+  }
+
+  chromeos::UserContext context(user_manager::USER_TYPE_PUBLIC_ACCOUNT,
+                                active_user->GetAccountId());
+  context.SetKey(chromeos::Key(parameters->password));
+  handler->Authenticate(
+      context,
+      base::BindOnce(
+          &LoginUnlockManagedGuestSessionFunction::OnAuthenticationComplete,
+          this));
+  return did_respond() ? AlreadyResponded() : RespondLater();
+}
+
+void LoginUnlockManagedGuestSessionFunction::OnAuthenticationComplete(
+    bool success) {
+  if (!success) {
+    Respond(Error(login_api_errors::kAuthenticationFailed));
+    return;
+  }
+
+  Respond(NoArguments());
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_api.h b/chrome/browser/chromeos/extensions/login_screen/login/login_api.h
index 522ab97..c6584d6 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login/login_api.h
+++ b/chrome/browser/chromeos/extensions/login_screen/login/login_api.h
@@ -5,7 +5,6 @@
 #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_LOGIN_API_H_
 #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_LOGIN_API_H_
 
-#include "base/macros.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "extensions/browser/extension_function.h"
 
@@ -17,10 +16,30 @@
 
 }  // namespace login_api
 
+namespace login_api_errors {
+
+extern const char kAlreadyActiveSession[];
+extern const char kAnotherLoginAttemptInProgress[];
+extern const char kNoManagedGuestSessionAccounts[];
+extern const char kNoPermissionToLock[];
+extern const char kSessionIsNotActive[];
+extern const char kNoPermissionToUnlock[];
+extern const char kSessionIsNotLocked[];
+extern const char kAnotherUnlockAttemptInProgress[];
+extern const char kAuthenticationFailed[];
+
+}  // namespace login_api_errors
+
 class LoginLaunchManagedGuestSessionFunction : public ExtensionFunction {
  public:
   LoginLaunchManagedGuestSessionFunction();
 
+  LoginLaunchManagedGuestSessionFunction(
+      const LoginLaunchManagedGuestSessionFunction&) = delete;
+
+  LoginLaunchManagedGuestSessionFunction& operator=(
+      const LoginLaunchManagedGuestSessionFunction&) = delete;
+
   DECLARE_EXTENSION_FUNCTION("login.launchManagedGuestSession",
                              LOGIN_LAUNCHMANAGEDGUESTSESSION)
 
@@ -29,15 +48,18 @@
 
   // ExtensionFunction:
   ResponseAction Run() override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(LoginLaunchManagedGuestSessionFunction);
 };
 
 class LoginExitCurrentSessionFunction : public ExtensionFunction {
  public:
   LoginExitCurrentSessionFunction();
 
+  LoginExitCurrentSessionFunction(const LoginExitCurrentSessionFunction&) =
+      delete;
+
+  LoginExitCurrentSessionFunction& operator=(
+      const LoginExitCurrentSessionFunction&) = delete;
+
   DECLARE_EXTENSION_FUNCTION("login.exitCurrentSession",
                              LOGIN_EXITCURRENTSESSION)
 
@@ -46,15 +68,18 @@
 
   // ExtensionFunction:
   ResponseAction Run() override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(LoginExitCurrentSessionFunction);
 };
 
 class LoginFetchDataForNextLoginAttemptFunction : public ExtensionFunction {
  public:
   LoginFetchDataForNextLoginAttemptFunction();
 
+  LoginFetchDataForNextLoginAttemptFunction(
+      const LoginFetchDataForNextLoginAttemptFunction&) = delete;
+
+  LoginFetchDataForNextLoginAttemptFunction& operator=(
+      const LoginFetchDataForNextLoginAttemptFunction&) = delete;
+
   DECLARE_EXTENSION_FUNCTION("login.fetchDataForNextLoginAttempt",
                              LOGIN_FETCHDATAFORNEXTLOGINATTEMPT)
 
@@ -63,9 +88,49 @@
 
   // ExtensionFunction:
   ResponseAction Run() override;
+};
+
+class LoginLockManagedGuestSessionFunction : public ExtensionFunction {
+ public:
+  LoginLockManagedGuestSessionFunction();
+
+  LoginLockManagedGuestSessionFunction(
+      const LoginLockManagedGuestSessionFunction&) = delete;
+
+  LoginLockManagedGuestSessionFunction& operator=(
+      const LoginLockManagedGuestSessionFunction&) = delete;
+
+  DECLARE_EXTENSION_FUNCTION("login.lockManagedGuestSession",
+                             LOGIN_LOCKMANAGEDGUESTSESSION)
+
+ protected:
+  ~LoginLockManagedGuestSessionFunction() override;
+
+  // ExtensionFunction:
+  ResponseAction Run() override;
+};
+
+class LoginUnlockManagedGuestSessionFunction : public ExtensionFunction {
+ public:
+  LoginUnlockManagedGuestSessionFunction();
+
+  LoginUnlockManagedGuestSessionFunction(
+      const LoginUnlockManagedGuestSessionFunction&) = delete;
+
+  LoginUnlockManagedGuestSessionFunction& operator=(
+      const LoginUnlockManagedGuestSessionFunction&) = delete;
+
+  DECLARE_EXTENSION_FUNCTION("login.unlockManagedGuestSession",
+                             LOGIN_UNLOCKMANAGEDGUESTSESSION)
+
+ protected:
+  ~LoginUnlockManagedGuestSessionFunction() override;
+
+  // ExtensionFunction:
+  ResponseAction Run() override;
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(LoginFetchDataForNextLoginAttemptFunction);
+  void OnAuthenticationComplete(bool success);
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.cc b/chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.cc
new file mode 100644
index 0000000..8b684da
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.cc
@@ -0,0 +1,63 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.h"
+
+#include <utility>
+
+#include "base/bind.h"
+#include "base/no_destructor.h"
+#include "chrome/browser/chromeos/login/lock/screen_locker.h"
+#include "chrome/browser/ui/ash/session_controller_client_impl.h"
+#include "chromeos/login/auth/user_context.h"
+
+namespace chromeos {
+
+namespace {
+
+LoginApiLockHandler* g_lock_handler_for_testing = nullptr;
+
+}  // namespace
+
+// static
+LoginApiLockHandler* LoginApiLockHandler::Get() {
+  if (g_lock_handler_for_testing)
+    return g_lock_handler_for_testing;
+  static base::NoDestructor<LoginApiLockHandler> lock_handler;
+  return lock_handler.get();
+}
+
+// static
+void LoginApiLockHandler::SetInstanceForTesting(LoginApiLockHandler* instance) {
+  g_lock_handler_for_testing = instance;
+}
+
+LoginApiLockHandler::LoginApiLockHandler() = default;
+
+LoginApiLockHandler::~LoginApiLockHandler() = default;
+
+void LoginApiLockHandler::RequestLockScreen() {
+  SessionControllerClientImpl::Get()->RequestLockScreen();
+}
+
+void LoginApiLockHandler::Authenticate(
+    const UserContext& user_context,
+    base::OnceCallback<void(bool auth_success)> callback) {
+  unlock_in_progress_ = true;
+  callback_ = std::move(callback);
+  chromeos::ScreenLocker::default_screen_locker()->Authenticate(
+      user_context, base::BindOnce(&LoginApiLockHandler::AuthenticateCallback,
+                                   weak_factory_.GetWeakPtr()));
+}
+
+void LoginApiLockHandler::AuthenticateCallback(bool auth_success) {
+  unlock_in_progress_ = false;
+  std::move(callback_).Run(auth_success);
+}
+
+bool LoginApiLockHandler::IsUnlockInProgress() const {
+  return unlock_in_progress_;
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.h b/chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.h
new file mode 100644
index 0000000..36dc0e39
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.h
@@ -0,0 +1,51 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_LOGIN_API_LOCK_HANDLER_H_
+#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_LOGIN_API_LOCK_HANDLER_H_
+
+#include "base/callback.h"
+#include "base/memory/weak_ptr.h"
+
+namespace chromeos {
+
+class UserContext;
+
+// A thin wrapper around |SessionControllerClientImpl| and
+// |chromeos::ScreenLocker| to allow easier mocking for tests. Also manages the
+// |unlock_in_progress| state.
+class LoginApiLockHandler {
+ public:
+  // Gets the global instance of |LoginApiLockHandler|, and creates one if
+  // there is none.
+  static LoginApiLockHandler* Get();
+
+  static void SetInstanceForTesting(LoginApiLockHandler* instance);
+
+  LoginApiLockHandler();
+
+  LoginApiLockHandler(const LoginApiLockHandler&) = delete;
+
+  LoginApiLockHandler& operator=(const LoginApiLockHandler&) = delete;
+
+  virtual ~LoginApiLockHandler();
+
+  virtual void RequestLockScreen();
+
+  virtual void Authenticate(const UserContext& user_context,
+                            base::OnceCallback<void(bool auth_success)>);
+
+  virtual bool IsUnlockInProgress() const;
+
+ private:
+  void AuthenticateCallback(bool auth_success);
+
+  bool unlock_in_progress_ = false;
+  base::OnceCallback<void(bool auth_success)> callback_;
+  base::WeakPtrFactory<LoginApiLockHandler> weak_factory_{this};
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_LOGIN_API_LOCK_HANDLER_H_
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_api_unittest.cc b/chrome/browser/chromeos/extensions/login_screen/login/login_api_unittest.cc
index cb40aae..58c765be 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login/login_api_unittest.cc
+++ b/chrome/browser/chromeos/extensions/login_screen/login/login_api_unittest.cc
@@ -6,41 +6,121 @@
 
 #include <memory>
 #include <string>
+#include <utility>
 
+#include "base/callback.h"
+#include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/extensions/login_screen/login/login_api_lock_handler.h"
 #include "chrome/browser/chromeos/login/existing_user_controller.h"
 #include "chrome/browser/chromeos/login/signin_specifics.h"
 #include "chrome/browser/chromeos/login/ui/mock_login_display_host.h"
 #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
+#include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/extensions/extension_api_unittest.h"
 #include "chrome/common/pref_names.h"
+#include "chrome/test/base/testing_profile.h"
+#include "chrome/test/base/testing_profile_manager.h"
+#include "chromeos/login/auth/key.h"
 #include "chromeos/login/auth/user_context.h"
 #include "components/account_id/account_id.h"
+#include "components/prefs/pref_service.h"
+#include "components/session_manager/core/session_manager.h"
+#include "components/session_manager/session_manager_types.h"
 #include "components/user_manager/scoped_user_manager.h"
+#include "content/public/browser/browser_context.h"
+#include "extensions/browser/api_test_utils.h"
 #include "extensions/browser/api_unittest.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/extension_builder.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using testing::_;
+using testing::Invoke;
 using testing::Return;
 
 namespace {
 
+const char kEmail[] = "email@test";
+const char kGaiaId[] = "gaia@test";
+const char kExtensionName[] = "extension_name";
+const char kExtensionId[] = "abcdefghijklmnopqrstuvwxyzabcdef";
+
 class MockExistingUserController : public chromeos::ExistingUserController {
  public:
   MockExistingUserController() = default;
+
+  MockExistingUserController(const MockExistingUserController&) = delete;
+
+  MockExistingUserController& operator=(const MockExistingUserController&) =
+      delete;
+
   ~MockExistingUserController() override = default;
 
   MOCK_METHOD2(Login,
                void(const chromeos::UserContext&,
                     const chromeos::SigninSpecifics&));
+  MOCK_CONST_METHOD0(IsSigninInProgress, bool());
+};
+
+class MockLoginApiLockHandler : public chromeos::LoginApiLockHandler {
+ public:
+  MockLoginApiLockHandler() {
+    chromeos::LoginApiLockHandler::SetInstanceForTesting(this);
+  }
+
+  MockLoginApiLockHandler(const MockLoginApiLockHandler&) = delete;
+
+  MockLoginApiLockHandler& operator=(const MockLoginApiLockHandler&) = delete;
+
+  ~MockLoginApiLockHandler() override {
+    chromeos::LoginApiLockHandler::SetInstanceForTesting(nullptr);
+  }
+
+  MOCK_METHOD0(RequestLockScreen, void());
+  MOCK_METHOD2(Authenticate,
+               void(const chromeos::UserContext& user_context,
+                    base::OnceCallback<void(bool auth_success)> callback));
+  MOCK_CONST_METHOD0(IsUnlockInProgress, bool());
+};
+
+// Wrapper which calls |DeleteTestingProfile()| on |profile| upon destruction.
+class ScopedTestingProfile {
+ public:
+  ScopedTestingProfile(TestingProfile* profile,
+                       TestingProfileManager* profile_manager)
+      : profile_(profile), profile_manager_(profile_manager) {}
+
+  ScopedTestingProfile(const ScopedTestingProfile&) = delete;
+
+  ScopedTestingProfile& operator=(const ScopedTestingProfile&) = delete;
+
+  ~ScopedTestingProfile() {
+    profile_manager_->DeleteTestingProfile(profile_->GetProfileUserName());
+  }
+
+  TestingProfile* profile() { return profile_; }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(MockExistingUserController);
+  TestingProfile* const profile_;
+  TestingProfileManager* const profile_manager_;
 };
 
+chromeos::UserContext GetPublicUserContext(const std::string& email) {
+  return chromeos::UserContext(user_manager::USER_TYPE_PUBLIC_ACCOUNT,
+                               AccountId::FromUserEmail(email));
+}
+
+void SetLoginExtensionApiLaunchExtensionIdPref(
+    Profile* profile,
+    const std::string& extension_id) {
+  profile->GetPrefs()->SetString(prefs::kLoginExtensionApiLaunchExtensionId,
+                                 extension_id);
+}
+
 }  // namespace
 
 namespace extensions {
@@ -48,8 +128,14 @@
 class LoginApiUnittest : public ExtensionApiUnittest {
  public:
   LoginApiUnittest() = default;
+
+  LoginApiUnittest(const LoginApiUnittest&) = delete;
+
+  LoginApiUnittest& operator=(const LoginApiUnittest&) = delete;
+
   ~LoginApiUnittest() override = default;
 
+ protected:
   void SetUp() override {
     ExtensionApiUnittest::SetUp();
 
@@ -61,6 +147,12 @@
         std::make_unique<chromeos::MockLoginDisplayHost>();
     mock_existing_user_controller_ =
         std::make_unique<MockExistingUserController>();
+    // Set |LOGIN_PRIMARY| as the default state.
+    session_manager_.SetSessionState(
+        session_manager::SessionState::LOGIN_PRIMARY);
+
+    EXPECT_CALL(*mock_login_display_host_, GetExistingUserController())
+        .WillRepeatedly(Return(mock_existing_user_controller_.get()));
 
     // Run pending async tasks resulting from profile construction to ensure
     // these are complete before the test begins.
@@ -75,14 +167,32 @@
     ExtensionApiUnittest::TearDown();
   }
 
- protected:
+  void SetExtensionWithId(const std::string& extension_id) {
+    scoped_refptr<const extensions::Extension> extension =
+        extensions::ExtensionBuilder(kExtensionName)
+            .SetID(extension_id)
+            .Build();
+    set_extension(extension);
+  }
+
+  std::unique_ptr<ScopedTestingProfile> AddPublicAccountUser(
+      const std::string& email) {
+    AccountId account_id = AccountId::FromUserEmail(email);
+    user_manager::User* user =
+        fake_chrome_user_manager_->AddPublicAccountUser(account_id);
+    TestingProfile* profile = profile_manager()->CreateTestingProfile(email);
+    chromeos::ProfileHelper::Get()->SetUserToProfileMappingForTesting(user,
+                                                                      profile);
+
+    return std::make_unique<ScopedTestingProfile>(profile, profile_manager());
+  }
+
   chromeos::FakeChromeUserManager* fake_chrome_user_manager_;
   std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_;
   std::unique_ptr<chromeos::MockLoginDisplayHost> mock_login_display_host_;
   std::unique_ptr<MockExistingUserController> mock_existing_user_controller_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(LoginApiUnittest);
+  // Sets up the global |SessionManager| instance.
+  session_manager::SessionManager session_manager_;
 };
 
 MATCHER_P(MatchSigninSpecifics, expected, "") {
@@ -93,30 +203,61 @@
          expected.is_auto_login == arg.is_auto_login;
 }
 
+MATCHER_P(MatchUserContextSecret, expected, "") {
+  return expected == arg.GetKey()->GetSecret();
+}
+
 // Test that calling |login.launchManagedGuestSession()| calls the corresponding
 // method from the |ExistingUserController|.
 TEST_F(LoginApiUnittest, LaunchManagedGuestSession) {
-  AccountId test_account_id =
-      AccountId::FromUserEmail("publicaccount@test.com");
-
-  fake_chrome_user_manager_->AddPublicAccountUser(test_account_id);
-  EXPECT_CALL(*mock_login_display_host_, GetExistingUserController())
-      .WillOnce(Return(mock_existing_user_controller_.get()));
-
-  chromeos::SigninSpecifics signin_specifics;
-  chromeos::UserContext userContext(user_manager::USER_TYPE_PUBLIC_ACCOUNT,
-                                    test_account_id);
+  std::unique_ptr<ScopedTestingProfile> profile = AddPublicAccountUser(kEmail);
   EXPECT_CALL(*mock_existing_user_controller_,
-              Login(userContext, MatchSigninSpecifics(signin_specifics)))
+              Login(GetPublicUserContext(kEmail),
+                    MatchSigninSpecifics(chromeos::SigninSpecifics())))
       .Times(1);
 
   RunFunction(new LoginLaunchManagedGuestSessionFunction(), "[]");
 }
 
+// Test that calling |login.launchManagedGuestSession()| with a password sets
+// the correct extension ID in the |UserContext| passed to
+// |ExistingUserController|.
+TEST_F(LoginApiUnittest, LaunchManagedGuestSessionWithPassword) {
+  std::unique_ptr<ScopedTestingProfile> profile = AddPublicAccountUser(kEmail);
+  chromeos::UserContext user_context = GetPublicUserContext(kEmail);
+  user_context.SetKey(chromeos::Key("password"));
+  EXPECT_CALL(
+      *mock_existing_user_controller_,
+      Login(user_context, MatchSigninSpecifics(chromeos::SigninSpecifics())))
+      .Times(1);
+
+  RunFunction(new LoginLaunchManagedGuestSessionFunction(), "[\"password\"]");
+}
+
 // Test that calling |login.launchManagedGuestSession()| returns an error when
 // there are no managed guest session accounts.
 TEST_F(LoginApiUnittest, LaunchManagedGuestSessionNoAccounts) {
-  ASSERT_EQ("No managed guest session accounts",
+  ASSERT_EQ(login_api_errors::kNoManagedGuestSessionAccounts,
+            RunFunctionAndReturnError(
+                new LoginLaunchManagedGuestSessionFunction(), "[]"));
+}
+
+// Test that calling |login.launchManagedGuestSession()| returns an error when
+// the session state is not |LOGIN_PRIMARY|.
+TEST_F(LoginApiUnittest, LaunchManagedGuestSessionWrongSessionState) {
+  session_manager::SessionManager::Get()->SetSessionState(
+      session_manager::SessionState::ACTIVE);
+  ASSERT_EQ(login_api_errors::kAlreadyActiveSession,
+            RunFunctionAndReturnError(
+                new LoginLaunchManagedGuestSessionFunction(), "[]"));
+}
+
+// Test that calling |login.launchManagedGuestSession()| returns an error when
+// there is another signin in progress.
+TEST_F(LoginApiUnittest, LaunchManagedGuestSessionSigninInProgress) {
+  EXPECT_CALL(*mock_existing_user_controller_, IsSigninInProgress())
+      .WillOnce(Return(true));
+  ASSERT_EQ(login_api_errors::kAnotherLoginAttemptInProgress,
             RunFunctionAndReturnError(
                 new LoginLaunchManagedGuestSessionFunction(), "[]"));
 }
@@ -168,4 +309,171 @@
                     prefs::kLoginExtensionApiDataForNextLoginAttempt));
 }
 
+TEST_F(LoginApiUnittest, LockManagedGuestSession) {
+  std::unique_ptr<ScopedTestingProfile> profile = AddPublicAccountUser(kEmail);
+  fake_chrome_user_manager_->SwitchActiveUser(AccountId::FromUserEmail(kEmail));
+  fake_chrome_user_manager_->set_current_user_can_lock(true);
+  session_manager::SessionManager::Get()->SetSessionState(
+      session_manager::SessionState::ACTIVE);
+
+  MockLoginApiLockHandler mock_login_api_lock_handler;
+  EXPECT_CALL(mock_login_api_lock_handler, RequestLockScreen())
+      .WillOnce(Return());
+
+  RunFunction(new LoginLockManagedGuestSessionFunction(), "[]");
+}
+
+TEST_F(LoginApiUnittest, LockManagedGuestSessionNoActiveUser) {
+  ASSERT_EQ(login_api_errors::kNoPermissionToLock,
+            RunFunctionAndReturnError(
+                new LoginLockManagedGuestSessionFunction(), "[]"));
+}
+
+TEST_F(LoginApiUnittest, LockManagedGuestSessionNotManagedGuestSession) {
+  AccountId account_id = AccountId::FromGaiaId(kGaiaId);
+  fake_chrome_user_manager_->AddUser(account_id);
+  fake_chrome_user_manager_->SwitchActiveUser(account_id);
+
+  ASSERT_EQ(login_api_errors::kNoPermissionToLock,
+            RunFunctionAndReturnError(
+                new LoginLockManagedGuestSessionFunction(), "[]"));
+}
+
+TEST_F(LoginApiUnittest, LockManagedGuestSessionUserCannotLock) {
+  std::unique_ptr<ScopedTestingProfile> profile = AddPublicAccountUser(kEmail);
+  fake_chrome_user_manager_->SwitchActiveUser(AccountId::FromUserEmail(kEmail));
+  fake_chrome_user_manager_->set_current_user_can_lock(false);
+
+  ASSERT_EQ(login_api_errors::kNoPermissionToLock,
+            RunFunctionAndReturnError(
+                new LoginLockManagedGuestSessionFunction(), "[]"));
+}
+
+TEST_F(LoginApiUnittest, LockManagedGuestSessionSessionNotActive) {
+  std::unique_ptr<ScopedTestingProfile> profile = AddPublicAccountUser(kEmail);
+  fake_chrome_user_manager_->SwitchActiveUser(AccountId::FromUserEmail(kEmail));
+  fake_chrome_user_manager_->set_current_user_can_lock(true);
+  session_manager::SessionManager::Get()->SetSessionState(
+      session_manager::SessionState::LOCKED);
+
+  ASSERT_EQ(login_api_errors::kSessionIsNotActive,
+            RunFunctionAndReturnError(
+                new LoginLockManagedGuestSessionFunction(), "[]"));
+}
+
+TEST_F(LoginApiUnittest, UnlockManagedGuestSession) {
+  SetExtensionWithId(kExtensionId);
+  std::unique_ptr<ScopedTestingProfile> scoped_profile =
+      AddPublicAccountUser(kEmail);
+  SetLoginExtensionApiLaunchExtensionIdPref(scoped_profile->profile(),
+                                            kExtensionId);
+  fake_chrome_user_manager_->SwitchActiveUser(AccountId::FromUserEmail(kEmail));
+  session_manager::SessionManager::Get()->SetSessionState(
+      session_manager::SessionState::LOCKED);
+
+  MockLoginApiLockHandler mock_login_api_lock_handler;
+  EXPECT_CALL(mock_login_api_lock_handler, IsUnlockInProgress())
+      .WillOnce(Return(false));
+  EXPECT_CALL(mock_login_api_lock_handler,
+              Authenticate(MatchUserContextSecret("password"), _))
+      .WillOnce([](chromeos::UserContext user_context,
+                   base::OnceCallback<void(bool auth_success)> callback) {
+        std::move(callback).Run(/*auth_success=*/true);
+      });
+
+  RunFunction(new LoginUnlockManagedGuestSessionFunction(), "[\"password\"]");
+}
+
+TEST_F(LoginApiUnittest, UnlockManagedGuestSessionNoActiveUser) {
+  ASSERT_EQ(
+      login_api_errors::kNoPermissionToUnlock,
+      RunFunctionAndReturnError(new LoginUnlockManagedGuestSessionFunction(),
+                                "[\"password\"]"));
+}
+
+TEST_F(LoginApiUnittest, UnlockManagedGuestSessionNotManagedGuestSession) {
+  AccountId account_id = AccountId::FromGaiaId(kGaiaId);
+  fake_chrome_user_manager_->AddUser(account_id);
+  fake_chrome_user_manager_->SwitchActiveUser(account_id);
+
+  ASSERT_EQ(
+      login_api_errors::kNoPermissionToUnlock,
+      RunFunctionAndReturnError(new LoginUnlockManagedGuestSessionFunction(),
+                                "[\"password\"]"));
+}
+
+TEST_F(LoginApiUnittest, UnlockManagedGuestSessionWrongExtensionId) {
+  SetExtensionWithId(kExtensionId);
+  std::unique_ptr<ScopedTestingProfile> scoped_profile =
+      AddPublicAccountUser(kEmail);
+  SetLoginExtensionApiLaunchExtensionIdPref(scoped_profile->profile(),
+                                            "wrong_extension_id");
+  fake_chrome_user_manager_->SwitchActiveUser(AccountId::FromUserEmail(kEmail));
+
+  ASSERT_EQ(
+      login_api_errors::kNoPermissionToUnlock,
+      RunFunctionAndReturnError(new LoginUnlockManagedGuestSessionFunction(),
+                                "[\"password\"]"));
+}
+
+TEST_F(LoginApiUnittest, UnlockManagedGuestSessionSessionNotLocked) {
+  SetExtensionWithId(kExtensionId);
+  std::unique_ptr<ScopedTestingProfile> scoped_profile =
+      AddPublicAccountUser(kEmail);
+  SetLoginExtensionApiLaunchExtensionIdPref(scoped_profile->profile(),
+                                            kExtensionId);
+  fake_chrome_user_manager_->SwitchActiveUser(AccountId::FromUserEmail(kEmail));
+
+  ASSERT_EQ(
+      login_api_errors::kSessionIsNotLocked,
+      RunFunctionAndReturnError(new LoginUnlockManagedGuestSessionFunction(),
+                                "[\"password\"]"));
+}
+
+TEST_F(LoginApiUnittest, UnlockManagedGuestSessionUnlockInProgress) {
+  SetExtensionWithId(kExtensionId);
+  std::unique_ptr<ScopedTestingProfile> scoped_profile =
+      AddPublicAccountUser(kEmail);
+  SetLoginExtensionApiLaunchExtensionIdPref(scoped_profile->profile(),
+                                            kExtensionId);
+  fake_chrome_user_manager_->SwitchActiveUser(AccountId::FromUserEmail(kEmail));
+  session_manager::SessionManager::Get()->SetSessionState(
+      session_manager::SessionState::LOCKED);
+
+  MockLoginApiLockHandler mock_login_api_lock_handler;
+  EXPECT_CALL(mock_login_api_lock_handler, IsUnlockInProgress())
+      .WillOnce(Return(true));
+
+  ASSERT_EQ(
+      login_api_errors::kAnotherUnlockAttemptInProgress,
+      RunFunctionAndReturnError(new LoginUnlockManagedGuestSessionFunction(),
+                                "[\"password\"]"));
+}
+
+TEST_F(LoginApiUnittest, UnlockManagedGuestSessionAuthenticationFailed) {
+  SetExtensionWithId(kExtensionId);
+  std::unique_ptr<ScopedTestingProfile> scoped_profile =
+      AddPublicAccountUser(kEmail);
+  SetLoginExtensionApiLaunchExtensionIdPref(scoped_profile->profile(),
+                                            kExtensionId);
+  fake_chrome_user_manager_->SwitchActiveUser(AccountId::FromUserEmail(kEmail));
+  session_manager::SessionManager::Get()->SetSessionState(
+      session_manager::SessionState::LOCKED);
+
+  MockLoginApiLockHandler mock_login_api_lock_handler;
+  EXPECT_CALL(mock_login_api_lock_handler, IsUnlockInProgress())
+      .WillOnce(Return(false));
+  EXPECT_CALL(mock_login_api_lock_handler,
+              Authenticate(MatchUserContextSecret("password"), _))
+      .WillOnce([](chromeos::UserContext user_context,
+                   base::OnceCallback<void(bool auth_success)> callback) {
+        std::move(callback).Run(/*auth_success=*/false);
+      });
+
+  ASSERT_EQ(
+      login_api_errors::kAuthenticationFailed,
+      RunFunctionAndReturnError(new LoginUnlockManagedGuestSessionFunction(),
+                                "[\"password\"]"));
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc b/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc
index f6ce58f..29432cb1 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc
+++ b/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc
@@ -7,35 +7,86 @@
 #include <memory>
 #include <string>
 
+#include "base/run_loop.h"
+#include "base/strings/string_util.h"
+#include "base/values.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.h"
+#include "chrome/browser/chromeos/login/existing_user_controller.h"
+#include "chrome/browser/chromeos/login/lock/screen_locker.h"
+#include "chrome/browser/chromeos/login/lock/screen_locker_tester.h"
+#include "chrome/browser/chromeos/login/test/fake_gaia_mixin.h"
 #include "chrome/browser/chromeos/login/test/local_policy_test_server_mixin.h"
 #include "chrome/browser/chromeos/login/test/session_manager_state_waiter.h"
+#include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/supervised_user/logged_in_user_mixin.h"
 #include "chrome/common/pref_names.h"
+#include "chromeos/cryptohome/cryptohome_parameters.h"
+#include "chromeos/dbus/cryptohome/fake_cryptohome_client.h"
+#include "chromeos/dbus/cryptohome/rpc.pb.h"
+#include "chromeos/dbus/session_manager/fake_session_manager_client.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
-#include "components/policy/proto/chrome_device_policy.pb.h"
+#include "components/policy/core/common/policy_service.h"
+#include "components/policy/policy_constants.h"
 #include "components/prefs/pref_service.h"
 #include "components/session_manager/session_manager_types.h"
 #include "components/user_manager/user_type.h"
 #include "components/version_info/version_info.h"
+#include "content/public/browser/browser_main_parts.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/test/test_utils.h"
 #include "extensions/browser/api/test/test_api.h"
-#include "extensions/test/extension_test_message_listener.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/manifest.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
 
 constexpr char kAccountId[] = "public-session@test";
+constexpr char kPassword[] = "password";
+constexpr char kWrongPassword[] = "wrong password";
 constexpr char kData[] = "some data";
+constexpr char kInSessionExtensionId[] = "ofcpkomnogjenhfajfjadjmjppbegnad";
+const char kInSessionExtensionUpdateManifestPath[] =
+    "/extensions/api_test/login_screen_apis/update_manifest.xml";
+constexpr char kWrongExtensionId[] = "abcdefghijklmnopqrstuvwxyzabcdef";
+
+// launchManagedGuestSession tests.
 constexpr char kLaunchManagedGuestSession[] = "LoginLaunchManagedGuestSession";
+constexpr char kLaunchManagedGuestSessionWithPassword[] =
+    "LoginLaunchManagedGuestSessionWithPassword";
 constexpr char kLaunchManagedGuestSessionNoAccounts[] =
     "LoginLaunchManagedGuestSessionNoAccounts";
+constexpr char kLaunchManagedGuestSessionAlreadyExistsActiveSession[] =
+    "LoginLaunchManagedGuestSessionAlreadyExistsActiveSession";
+// exitCurrentSession tests.
 constexpr char kExitCurrentSession[] = "LoginExitCurrentSession";
+// fetchDataForNextLoginAttempt tests.
 constexpr char kFetchDataForNextLoginAttempt[] =
     "LoginFetchDataForNextLoginAttempt";
+// lockManagedGuestSession tests.
+constexpr char kLockManagedGuestSessionNotActive[] =
+    "LoginLockManagedGuestSessionNotActive";
+// unlockManagedGuestSession tests.
+constexpr char kUnlockManagedGuestSession[] = "LoginUnlockManagedGuestSession";
+constexpr char kUnlockManagedGuestSessionWrongPassword[] =
+    "LoginUnlockManagedGuestSessionWrongPassword";
+constexpr char kUnlockManagedGuestSessionNotLocked[] =
+    "LoginUnlockManagedGuestSessionNotLocked";
+constexpr char kUnlockManagedGuestSessionNotManagedGuestSession[] =
+    "LoginUnlockManagedGuestSessionNotManagedGuestSession";
+constexpr char kUnlockManagedGuestSessionWrongExtensionId[] =
+    "LoginUnlockManagedGuestSessionWrongExtensionId";
+// In-session extension tests.
+constexpr char kInSessionLoginLockManagedGuestSession[] =
+    "InSessionLoginLockManagedGuestSession";
+constexpr char kInSessionLoginLockManagedGuestSessionNoPermission[] =
+    "InSessionLoginLockManagedGuestSessionNoPermission";
+constexpr char kInSessionUnlockManagedGuestSessionNoPermission[] =
+    "InSessionLoginUnlockManagedGuestSessionNoPermission";
 
 }  // namespace
 
@@ -44,6 +95,11 @@
 class LoginApitest : public LoginScreenApitestBase {
  public:
   LoginApitest() : LoginScreenApitestBase(version_info::Channel::STABLE) {}
+
+  LoginApitest(const LoginApitest&) = delete;
+
+  LoginApitest& operator=(const LoginApitest&) = delete;
+
   ~LoginApitest() override = default;
 
   void SetUpDeviceLocalAccountPolicy() {
@@ -58,22 +114,84 @@
     RefreshDevicePolicy();
   }
 
+  std::unique_ptr<policy::UserPolicyBuilder>
+  MakeInSessionExtensionUserPolicyBuilder() {
+    std::unique_ptr<policy::UserPolicyBuilder> user_policy_builder =
+        std::make_unique<policy::UserPolicyBuilder>();
+    enterprise_management::PolicyData& policy_data =
+        user_policy_builder->policy_data();
+    policy_data.set_public_key_version(1);
+    user_policy_builder->payload()
+        .mutable_extensioninstallforcelist()
+        ->mutable_value()
+        ->add_entries(base::ReplaceStringPlaceholders(
+            "$1;$2",
+            {kInSessionExtensionId,
+             embedded_test_server()
+                 ->GetURL(kInSessionExtensionUpdateManifestPath)
+                 .spec()},
+            nullptr));
+    user_policy_builder->SetDefaultSigningKey();
+
+    return user_policy_builder;
+  }
+
+  void RefreshPolicies() {
+    base::RunLoop run_loop;
+    g_browser_process->policy_service()->RefreshPolicies(
+        run_loop.QuitClosure());
+    run_loop.Run();
+  }
+
+  virtual void SetUpInSessionExtension() {
+    std::unique_ptr<policy::UserPolicyBuilder> user_policy_builder =
+        MakeInSessionExtensionUserPolicyBuilder();
+    enterprise_management::PolicyData& policy_data =
+        user_policy_builder->policy_data();
+    policy_data.set_policy_type(
+        policy::dm_protocol::kChromePublicAccountPolicyType);
+    policy_data.set_username(kAccountId);
+    policy_data.set_settings_entity_id(kAccountId);
+    user_policy_builder->Build();
+
+    ASSERT_TRUE(local_policy_mixin_.server()->UpdatePolicy(
+        policy::dm_protocol::kChromePublicAccountPolicyType, kAccountId,
+        user_policy_builder->payload().SerializeAsString()));
+    session_manager_client()->set_device_local_account_policy(
+        kAccountId, user_policy_builder->GetBlob());
+    RefreshPolicies();
+  }
+
   void SetTestCustomArg(const std::string custom_arg) {
     config_.SetKey("customArg", base::Value(custom_arg));
     extensions::TestGetConfigFunction::set_test_config_state(&config_);
   }
 
+  void LogInWithPassword() {
+    SessionStateWaiter waiter(session_manager::SessionState::ACTIVE);
+    SetTestCustomArg(kPassword);
+    SetUpLoginScreenExtensionAndRunTest(kLaunchManagedGuestSessionWithPassword);
+    waiter.Wait();
+  }
+
+  void SetSessionState(session_manager::SessionState session_state) {
+    session_manager::SessionManager::Get()->SetSessionState(session_state);
+  }
+
+  // Also checks that session is locked.
+  void LockScreen() { screen_locker_tester_.Lock(); }
+
  private:
   chromeos::LocalPolicyTestServerMixin local_policy_mixin_{&mixin_host_};
   base::DictionaryValue config_;
-
-  DISALLOW_COPY_AND_ASSIGN(LoginApitest);
+  ScreenLockerTester screen_locker_tester_;
 };
 
 IN_PROC_BROWSER_TEST_F(LoginApitest, LaunchManagedGuestSession) {
   SetUpDeviceLocalAccountPolicy();
-  SetUpExtensionAndRunTest(kLaunchManagedGuestSession);
-  SessionStateWaiter(session_manager::SessionState::ACTIVE).Wait();
+  SessionStateWaiter waiter(session_manager::SessionState::ACTIVE);
+  SetUpLoginScreenExtensionAndRunTest(kLaunchManagedGuestSession);
+  waiter.Wait();
 
   // Check that the active user is of type |USER_TYPE_PUBLIC_ACCOUNT|.
   // We cannot use the email as an identifier as a different email is generated
@@ -81,10 +199,19 @@
   user_manager::UserManager* user_manager = user_manager::UserManager::Get();
   EXPECT_TRUE(user_manager->GetActiveUser()->GetType() ==
               user_manager::USER_TYPE_PUBLIC_ACCOUNT);
+  EXPECT_FALSE(user_manager->CanCurrentUserLock());
+}
+
+IN_PROC_BROWSER_TEST_F(LoginApitest, LaunchManagedGuestSessionWithPassword) {
+  SetUpDeviceLocalAccountPolicy();
+  LogInWithPassword();
+
+  user_manager::UserManager* user_manager = user_manager::UserManager::Get();
+  EXPECT_TRUE(user_manager->CanCurrentUserLock());
 }
 
 IN_PROC_BROWSER_TEST_F(LoginApitest, LaunchManagedGuestSessionNoAccounts) {
-  SetUpExtensionAndRunTest(kLaunchManagedGuestSessionNoAccounts);
+  SetUpLoginScreenExtensionAndRunTest(kLaunchManagedGuestSessionNoAccounts);
 }
 
 IN_PROC_BROWSER_TEST_F(LoginApitest, ExitCurrentSession) {
@@ -94,7 +221,8 @@
       chrome::NOTIFICATION_APP_TERMINATING,
       content::NotificationService::AllSources());
 
-  SetUpExtensionAndRunTest(kExitCurrentSession, /*assert_test_succeed=*/false);
+  SetUpLoginScreenExtensionAndRunTest(kExitCurrentSession,
+                                      /*assert_test_succeed=*/false);
   termination_waiter.Wait();
 
   PrefService* local_state = g_browser_process->local_state();
@@ -107,10 +235,202 @@
   PrefService* local_state = g_browser_process->local_state();
   local_state->SetString(prefs::kLoginExtensionApiDataForNextLoginAttempt,
                          kData);
-  SetUpExtensionAndRunTest(kFetchDataForNextLoginAttempt);
+  SetUpLoginScreenExtensionAndRunTest(kFetchDataForNextLoginAttempt);
 
   EXPECT_EQ("", local_state->GetString(
                     prefs::kLoginExtensionApiDataForNextLoginAttempt));
 }
 
+IN_PROC_BROWSER_TEST_F(LoginApitest, LockManagedGuestSession) {
+  SetUpDeviceLocalAccountPolicy();
+  LogInWithPassword();
+
+  SetUpTestListeners();
+  SetUpInSessionExtension();
+  SessionStateWaiter waiter(session_manager::SessionState::LOCKED);
+  RunTest(kInSessionLoginLockManagedGuestSession);
+  waiter.Wait();
+}
+
+IN_PROC_BROWSER_TEST_F(LoginApitest, LockManagedGuestSessionNotActive) {
+  SetUpDeviceLocalAccountPolicy();
+  LogInWithPassword();
+
+  // Login screen extensions stop when the session becomes active and start
+  // again when the session is locked. The test extension will be waiting for a
+  // new test after the session is locked.
+  SetUpTestListeners();
+  LockScreen();
+  RunTest(kLockManagedGuestSessionNotActive);
+}
+
+IN_PROC_BROWSER_TEST_F(LoginApitest, LockManagedGuestSessionNoPermission) {
+  SetUpDeviceLocalAccountPolicy();
+  SessionStateWaiter waiter(session_manager::SessionState::ACTIVE);
+  SetUpLoginScreenExtensionAndRunTest(kLaunchManagedGuestSession);
+  waiter.Wait();
+
+  SetUpTestListeners();
+  SetUpInSessionExtension();
+  RunTest(kInSessionLoginLockManagedGuestSessionNoPermission);
+}
+
+IN_PROC_BROWSER_TEST_F(LoginApitest, UnlockManagedGuestSession) {
+  SetUpDeviceLocalAccountPolicy();
+  LogInWithPassword();
+
+  SetUpTestListeners();
+  LockScreen();
+  SessionStateWaiter waiter(session_manager::SessionState::ACTIVE);
+  RunTest(kUnlockManagedGuestSession);
+  waiter.Wait();
+}
+
+IN_PROC_BROWSER_TEST_F(LoginApitest, UnlockManagedGuestSessionLockedWithApi) {
+  SetUpDeviceLocalAccountPolicy();
+  LogInWithPassword();
+
+  SetUpTestListeners();
+  SetUpInSessionExtension();
+  SessionStateWaiter locked_waiter(session_manager::SessionState::LOCKED);
+  RunTest(kInSessionLoginLockManagedGuestSession);
+  locked_waiter.Wait();
+
+  SetUpTestListeners();
+  SessionStateWaiter active_waiter(session_manager::SessionState::ACTIVE);
+  RunTest(kUnlockManagedGuestSession);
+  active_waiter.Wait();
+}
+
+IN_PROC_BROWSER_TEST_F(LoginApitest, UnlockManagedGuestSessionWrongPassword) {
+  // Note: the password check will fail even if the correct password is used as
+  // |FakeCryptohomeClient::CheckKeyEx()| does not check the user session's
+  // cipher blob.
+  FakeCryptohomeClient::Get()->set_enable_auth_check(true);
+  SetUpDeviceLocalAccountPolicy();
+  LogInWithPassword();
+
+  SetTestCustomArg(kWrongPassword);
+  SetUpTestListeners();
+  LockScreen();
+  RunTest(kUnlockManagedGuestSessionWrongPassword);
+}
+
+IN_PROC_BROWSER_TEST_F(LoginApitest, UnlockManagedGuestSessionNoPermission) {
+  SetUpDeviceLocalAccountPolicy();
+  LogInWithPassword();
+
+  SetUpTestListeners();
+  SetUpInSessionExtension();
+  RunTest(kInSessionUnlockManagedGuestSessionNoPermission);
+}
+
+// This test checks that the case where the profile has been created (which
+// sets the |kLoginExtensionApiLaunchExtensionId| pref, but the session is not
+// yet active.
+IN_PROC_BROWSER_TEST_F(LoginApitest, UnlockManagedGuestSessionNotLocked) {
+  SetUpDeviceLocalAccountPolicy();
+  LogInWithPassword();
+
+  SetUpTestListeners();
+  // Manually setting |LOGGED_IN_NOT_ACTIVE| state here as it is difficult to
+  // remain in this state during the login process.
+  SetSessionState(session_manager::SessionState::LOGGED_IN_NOT_ACTIVE);
+  RunTest(kUnlockManagedGuestSessionNotLocked);
+}
+
+IN_PROC_BROWSER_TEST_F(LoginApitest,
+                       UnlockManagedGuestSessionWrongExtensionId) {
+  SetUpDeviceLocalAccountPolicy();
+  LogInWithPassword();
+
+  const user_manager::User* active_user =
+      user_manager::UserManager::Get()->GetActiveUser();
+  Profile* profile =
+      chromeos::ProfileHelper::Get()->GetProfileByUser(active_user);
+  PrefService* prefs = profile->GetPrefs();
+  prefs->SetString(prefs::kLoginExtensionApiLaunchExtensionId,
+                   kWrongExtensionId);
+
+  SetUpTestListeners();
+  LockScreen();
+  RunTest(kUnlockManagedGuestSessionWrongExtensionId);
+}
+
+class LoginApitestWithEnterpriseUser : public LoginApitest {
+ public:
+  LoginApitestWithEnterpriseUser() = default;
+
+  LoginApitestWithEnterpriseUser(const LoginApitestWithEnterpriseUser&) =
+      delete;
+
+  LoginApitestWithEnterpriseUser& operator=(
+      const LoginApitestWithEnterpriseUser&) = delete;
+
+  ~LoginApitestWithEnterpriseUser() override = default;
+
+  void LoginUser() {
+    logged_in_user_mixin_.LogInUser(/*issue_any_scope_token=*/false,
+                                    /*wait_for_active_session=*/true,
+                                    /*request_policy_update=*/true);
+  }
+
+  void SetUpInSessionExtension() override {
+    AccountId account_id = logged_in_user_mixin_.GetAccountId();
+    std::unique_ptr<policy::UserPolicyBuilder> user_policy_builder =
+        MakeInSessionExtensionUserPolicyBuilder();
+    enterprise_management::PolicyData& policy_data =
+        user_policy_builder->policy_data();
+    policy_data.set_policy_type(policy::dm_protocol::kChromeUserPolicyType);
+    policy_data.set_username(account_id.GetUserEmail());
+    policy_data.set_gaia_id(account_id.GetGaiaId());
+    user_policy_builder->Build();
+
+    ASSERT_TRUE(
+        logged_in_user_mixin_.GetLocalPolicyTestServerMixin()->UpdateUserPolicy(
+            user_policy_builder->payload(), account_id.GetUserEmail()));
+    session_manager_client()->set_user_policy(
+        cryptohome::CreateAccountIdentifierFromAccountId(account_id),
+        user_policy_builder->GetBlob());
+    RefreshPolicies();
+  }
+
+ private:
+  // Use a different test server as |LoginApitest| uses the one from
+  // |embedded_test_server()|.
+  net::EmbeddedTestServer test_server_;
+  LoggedInUserMixin logged_in_user_mixin_{
+      &mixin_host_,
+      LoggedInUserMixin::LogInType::kRegular,
+      &test_server_,
+      this,
+      /*should_launch_browser=*/true,
+      AccountId::FromUserEmailGaiaId(FakeGaiaMixin::kEnterpriseUser1,
+                                     FakeGaiaMixin::kEnterpriseUser1GaiaId)};
+};
+
+IN_PROC_BROWSER_TEST_F(LoginApitestWithEnterpriseUser,
+                       LaunchManagedGuestSessionAlreadyExistsActiveSession) {
+  LoginUser();
+  LockScreen();
+  SetUpLoginScreenExtensionAndRunTest(
+      kLaunchManagedGuestSessionAlreadyExistsActiveSession);
+}
+
+IN_PROC_BROWSER_TEST_F(LoginApitestWithEnterpriseUser,
+                       UnlockManagedGuestSessionNotManagedGuestSession) {
+  LoginUser();
+  LockScreen();
+  SetUpLoginScreenExtensionAndRunTest(
+      kUnlockManagedGuestSessionNotManagedGuestSession);
+}
+
+IN_PROC_BROWSER_TEST_F(LoginApitestWithEnterpriseUser,
+                       LockManagedGuestSessionNotManagedGuestSession) {
+  LoginUser();
+  SetUpTestListeners();
+  SetUpInSessionExtension();
+  RunTest(kInSessionLoginLockManagedGuestSessionNoPermission);
+}
+
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.cc b/chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.cc
index 0830e2a..e3ed9458 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.cc
+++ b/chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.cc
@@ -28,28 +28,43 @@
       extension_id_(kExtensionId),
       extension_update_manifest_path_(kExtensionUpdateManifestPath) {}
 
-LoginScreenApitestBase::~LoginScreenApitestBase() = default;
-
-void LoginScreenApitestBase::SetUpExtensionAndRunTest(
-    const std::string& testName) {
-  SetUpExtensionAndRunTest(testName, /*assert_test_succeed=*/true);
+LoginScreenApitestBase::~LoginScreenApitestBase() {
+  catcher_.reset();
+  listener_.reset();
 }
-void LoginScreenApitestBase::SetUpExtensionAndRunTest(
-    const std::string& testName,
-    bool assert_test_succeed) {
-  extensions::ResultCatcher catcher;
 
-  ExtensionTestMessageListener listener(kWaitingForTestName,
-                                        /*will_reply=*/true);
+void LoginScreenApitestBase::SetUpTestListeners() {
+  catcher_ = std::make_unique<extensions::ResultCatcher>();
+  listener_ =
+      std::make_unique<ExtensionTestMessageListener>(kWaitingForTestName,
+                                                     /*will_reply=*/true);
+}
 
-  AddExtensionForForceInstallation(extension_id_,
-                                   extension_update_manifest_path_);
+void LoginScreenApitestBase::RunTest(const std::string& test_name) {
+  RunTest(test_name, /*assert_test_succeed=*/true);
+}
 
-  ASSERT_TRUE(listener.WaitUntilSatisfied());
-  listener.Reply(testName);
+void LoginScreenApitestBase::RunTest(const std::string& test_name,
+                                     bool assert_test_succeed) {
+  ASSERT_TRUE(listener_->WaitUntilSatisfied());
+  listener_->Reply(test_name);
 
   if (assert_test_succeed)
-    ASSERT_TRUE(catcher.GetNextResult());
+    ASSERT_TRUE(catcher_->GetNextResult());
+}
+
+void LoginScreenApitestBase::SetUpLoginScreenExtensionAndRunTest(
+    const std::string& test_name) {
+  SetUpLoginScreenExtensionAndRunTest(test_name, /*assert_test_succeed=*/true);
+}
+
+void LoginScreenApitestBase::SetUpLoginScreenExtensionAndRunTest(
+    const std::string& test_name,
+    bool assert_test_succeed) {
+  SetUpTestListeners();
+  AddExtensionForForceInstallation(extension_id_,
+                                   extension_update_manifest_path_);
+  RunTest(test_name, assert_test_succeed);
 }
 
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.h b/chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.h
index 01d7c4c..fe442d9 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.h
+++ b/chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.h
@@ -5,11 +5,19 @@
 #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_SCREEN_APITEST_BASE_H_
 #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_LOGIN_SCREEN_LOGIN_SCREEN_APITEST_BASE_H_
 
+#include <memory>
 #include <string>
 
+#include "base/memory/weak_ptr.h"
 #include "chrome/browser/chromeos/policy/signin_profile_extensions_policy_test_base.h"
 #include "components/version_info/version_info.h"
 
+class ExtensionTestMessageListener;
+
+namespace extensions {
+class ResultCatcher;
+}  // namespace extensions
+
 namespace chromeos {
 
 // This browser test uses a test extension to test certain API calls on the
@@ -24,18 +32,27 @@
     : public policy::SigninProfileExtensionsPolicyTestBase {
  public:
   explicit LoginScreenApitestBase(version_info::Channel channel);
+
+  LoginScreenApitestBase(const LoginScreenApitestBase&) = delete;
+
+  LoginScreenApitestBase& operator=(const LoginScreenApitestBase&) = delete;
+
   ~LoginScreenApitestBase() override;
 
-  void SetUpExtensionAndRunTest(const std::string& testName);
+  void SetUpTestListeners();
 
-  void SetUpExtensionAndRunTest(const std::string& testName,
-                                bool assert_test_succeed);
+  void RunTest(const std::string& test_name);
+  void RunTest(const std::string& test_name, bool assert_test_succeed);
+
+  void SetUpLoginScreenExtensionAndRunTest(const std::string& test_name);
+  void SetUpLoginScreenExtensionAndRunTest(const std::string& test_name,
+                                           bool assert_test_succeed);
 
  protected:
   const std::string extension_id_;
   const std::string extension_update_manifest_path_;
-
-  DISALLOW_COPY_AND_ASSIGN(LoginScreenApitestBase);
+  std::unique_ptr<extensions::ResultCatcher> catcher_;
+  std::unique_ptr<ExtensionTestMessageListener> listener_;
 };
 
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/login_screen/login_screen_ui/login_screen_ui_apitest.cc b/chrome/browser/chromeos/extensions/login_screen/login_screen_ui/login_screen_ui_apitest.cc
index eb284b2..e93fd4fb 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login_screen_ui/login_screen_ui_apitest.cc
+++ b/chrome/browser/chromeos/extensions/login_screen/login_screen_ui/login_screen_ui_apitest.cc
@@ -67,7 +67,7 @@
 };
 
 IN_PROC_BROWSER_TEST_F(LoginScreenUiApitest, ExtensionCanOpenWindow) {
-  SetUpExtensionAndRunTest(kCanOpenWindow);
+  SetUpLoginScreenExtensionAndRunTest(kCanOpenWindow);
   ASSERT_TRUE(HasOpenWindow());
   // userCanClose defaults to false
   EXPECT_TRUE(IsMovementDisabled());
@@ -77,22 +77,22 @@
 
 IN_PROC_BROWSER_TEST_F(LoginScreenUiApitest,
                        ExtensionCannotOpenMultipleWindows) {
-  SetUpExtensionAndRunTest(kCannotOpenMultipleWindows);
+  SetUpLoginScreenExtensionAndRunTest(kCannotOpenMultipleWindows);
   EXPECT_TRUE(HasOpenWindow());
 }
 
 IN_PROC_BROWSER_TEST_F(LoginScreenUiApitest, ExtensionCanOpenAndCloseWindow) {
-  SetUpExtensionAndRunTest(kCanOpenAndCloseWindow);
+  SetUpLoginScreenExtensionAndRunTest(kCanOpenAndCloseWindow);
   EXPECT_FALSE(HasOpenWindow());
 }
 
 IN_PROC_BROWSER_TEST_F(LoginScreenUiApitest, ExtensionCannotCloseNoWindow) {
-  SetUpExtensionAndRunTest(kCannotCloseNoWindow);
+  SetUpLoginScreenExtensionAndRunTest(kCannotCloseNoWindow);
   EXPECT_FALSE(HasOpenWindow());
 }
 
 IN_PROC_BROWSER_TEST_F(LoginScreenUiApitest, UserCanCloseWindow) {
-  SetUpExtensionAndRunTest(kUserCanCloseWindow);
+  SetUpLoginScreenExtensionAndRunTest(kUserCanCloseWindow);
   ASSERT_TRUE(HasOpenWindow());
   EXPECT_TRUE(IsMovementDisabled());
   EXPECT_TRUE(CanCloseDialog());
@@ -100,7 +100,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(LoginScreenUiApitest, UserCannotCloseWindow) {
-  SetUpExtensionAndRunTest(kUserCannotCloseWindow);
+  SetUpLoginScreenExtensionAndRunTest(kUserCannotCloseWindow);
   ASSERT_TRUE(HasOpenWindow());
   EXPECT_TRUE(IsMovementDisabled());
   EXPECT_FALSE(CanCloseDialog());
diff --git a/chrome/browser/chromeos/extensions/login_screen/storage_apitest.cc b/chrome/browser/chromeos/extensions/login_screen/storage_apitest.cc
index 4239ff2..efd5c7b 100644
--- a/chrome/browser/chromeos/extensions/login_screen/storage_apitest.cc
+++ b/chrome/browser/chromeos/extensions/login_screen/storage_apitest.cc
@@ -28,15 +28,15 @@
 };
 
 IN_PROC_BROWSER_TEST_F(StorageApitest, CannotAccessLocalStorage) {
-  SetUpExtensionAndRunTest(kCannotAccessLocalStorage);
+  SetUpLoginScreenExtensionAndRunTest(kCannotAccessLocalStorage);
 }
 
 IN_PROC_BROWSER_TEST_F(StorageApitest, CannotAccessSyncStorage) {
-  SetUpExtensionAndRunTest(kCannotAccessSyncStorage);
+  SetUpLoginScreenExtensionAndRunTest(kCannotAccessSyncStorage);
 }
 
 IN_PROC_BROWSER_TEST_F(StorageApitest, CanAccessManagedStorage) {
-  SetUpExtensionAndRunTest(kCanAccessManagedStorage);
+  SetUpLoginScreenExtensionAndRunTest(kCanAccessManagedStorage);
 }
 
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
index 132d5ae..5adbdd26 100644
--- a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
+++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
@@ -465,6 +465,7 @@
         TestCase("openQuickViewRemovablePartitions"),
         TestCase("openQuickViewMtp"),
         TestCase("openQuickViewTabIndexImage"),
+        TestCase("openQuickViewBrokenImage"),
         TestCase("pressEnterOnInfoBoxToOpenClose"),
         TestCase("closeQuickView"),
         TestCase("cantOpenQuickViewWithMultipleFiles"),
diff --git a/chrome/browser/chromeos/login/existing_user_controller.cc b/chrome/browser/chromeos/login/existing_user_controller.cc
index b1a8697..7c7150e 100644
--- a/chrome/browser/chromeos/login/existing_user_controller.cc
+++ b/chrome/browser/chromeos/login/existing_user_controller.cc
@@ -75,6 +75,7 @@
 #include "chrome/common/channel_info.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_switches.h"
+#include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/grit/generated_resources.h"
 #include "chromeos/constants/chromeos_switches.h"
@@ -322,6 +323,18 @@
   return GetLoginDisplayHost()->GetLoginDisplay();
 }
 
+void SetLoginExtensionApiLaunchExtensionIdPref(const AccountId& account_id,
+                                               const std::string extension_id) {
+  const user_manager::User* user =
+      user_manager::UserManager::Get()->FindUser(account_id);
+  DCHECK(user);
+  Profile* profile = chromeos::ProfileHelper::Get()->GetProfileByUser(user);
+  DCHECK(profile);
+  PrefService* prefs = profile->GetPrefs();
+  prefs->SetString(prefs::kLoginExtensionApiLaunchExtensionId, extension_id);
+  prefs->CommitPendingWrite();
+}
+
 }  // namespace
 
 // Utility class used to wait for a Public Session policy store load if public
@@ -971,6 +984,17 @@
     DeviceSettingsService::Get()->MarkWillEstablishConsumerOwnership();
   }
 
+  if (user_context.IsLockableManagedGuestSession()) {
+    CHECK(user_context.GetUserType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT);
+    user_manager::User* user =
+        user_manager::UserManager::Get()->FindUserAndModify(
+            user_context.GetAccountId());
+    DCHECK(user);
+    user->AddProfileCreatedObserver(base::BindOnce(
+        &SetLoginExtensionApiLaunchExtensionIdPref, user_context.GetAccountId(),
+        user_context.GetManagedGuestSessionLaunchExtensionId()));
+  }
+
   UserSessionManager::StartSessionType start_session_type =
       UserAddingScreen::Get()->IsRunning()
           ? UserSessionManager::SECONDARY_USER_SESSION
diff --git a/chrome/browser/chromeos/login/users/chrome_user_manager_impl.cc b/chrome/browser/chromeos/login/users/chrome_user_manager_impl.cc
index b12675f2..415b7ba 100644
--- a/chrome/browser/chromeos/login/users/chrome_user_manager_impl.cc
+++ b/chrome/browser/chromeos/login/users/chrome_user_manager_impl.cc
@@ -1319,6 +1319,15 @@
 
     if (user->HasGaiaAccount())
       GetUserImageManager(user->GetAccountId())->UserProfileCreated();
+
+    // Allow managed guest session user to lock if
+    // |kLoginExtensionApiLaunchExtensionId| is set.
+    if (user->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT &&
+        !profile->GetPrefs()
+             ->GetString(prefs::kLoginExtensionApiLaunchExtensionId)
+             .empty()) {
+      user->set_can_lock(true);
+    }
   }
 
   // If there is pending user switch, do it now.
diff --git a/chrome/browser/chromeos/login/users/fake_chrome_user_manager.cc b/chrome/browser/chromeos/login/users/fake_chrome_user_manager.cc
index ada21a54..60d1fa2 100644
--- a/chrome/browser/chromeos/login/users/fake_chrome_user_manager.cc
+++ b/chrome/browser/chromeos/login/users/fake_chrome_user_manager.cc
@@ -530,7 +530,7 @@
 }
 
 bool FakeChromeUserManager::CanCurrentUserLock() const {
-  return false;
+  return current_user_can_lock_;
 }
 
 bool FakeChromeUserManager::IsUserLoggedIn() const {
diff --git a/chrome/browser/chromeos/login/users/fake_chrome_user_manager.h b/chrome/browser/chromeos/login/users/fake_chrome_user_manager.h
index 5dd0f92..a3a46b7 100644
--- a/chrome/browser/chromeos/login/users/fake_chrome_user_manager.h
+++ b/chrome/browser/chromeos/login/users/fake_chrome_user_manager.h
@@ -204,6 +204,10 @@
     is_enterprise_managed_ = is_enterprise_managed;
   }
 
+  void set_current_user_can_lock(bool current_user_can_lock) {
+    current_user_can_lock_ = current_user_can_lock;
+  }
+
  private:
   // Lazily creates default user flow.
   UserFlow* GetDefaultUserFlow() const;
@@ -237,6 +241,9 @@
   // Whether the device is enterprise managed.
   bool is_enterprise_managed_ = false;
 
+  // Whether the current user can lock.
+  bool current_user_can_lock_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(FakeChromeUserManager);
 };
 
diff --git a/chrome/browser/chromeos/policy/signin_profile_extensions_policy_browsertest.cc b/chrome/browser/chromeos/policy/signin_profile_extensions_policy_browsertest.cc
index a17f253..8aaefa8 100644
--- a/chrome/browser/chromeos/policy/signin_profile_extensions_policy_browsertest.cc
+++ b/chrome/browser/chromeos/policy/signin_profile_extensions_policy_browsertest.cc
@@ -7,10 +7,14 @@
 
 #include "base/bind.h"
 #include "base/macros.h"
+#include "base/run_loop.h"
+#include "base/strings/stringprintf.h"
+#include "base/version.h"
 #include "chrome/browser/chromeos/policy/signin_profile_extensions_policy_test_base.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/extensions/crx_installer.h"
 #include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "components/version_info/version_info.h"
 #include "content/public/browser/browser_context.h"
@@ -24,8 +28,13 @@
 #include "extensions/browser/notification_types.h"
 #include "extensions/browser/test_extension_registry_observer.h"
 #include "extensions/common/extension.h"
+#include "extensions/common/extension_set.h"
 #include "extensions/common/features/feature_channel.h"
+#include "net/http/http_status_code.h"
+#include "net/test/embedded_test_server/http_request.h"
+#include "net/test/embedded_test_server/http_response.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
 
 namespace content {
 class StoragePartition;
@@ -41,8 +50,10 @@
 // * The manual testing app which is whitelisted for running in the sign-in
 //   profile:
 const char kWhitelistedAppId[] = "bjaiihebfngildkcjkjckolinodhliff";
-const char kWhitelistedAppUpdateManifestPath[] =
-    "/extensions/signin_screen_manual_test_app/update_manifest.xml";
+const char kWhitelistedAppUpdateManifestPathFormat[] =
+    "/extensions/signin_screen_manual_test_app/crx/%s/update_manifest.xml";
+const char kWhitelistedAppLatestVersion[] = "4.0";
+const char kWhitelistedAppOlderVersion[] = "3.0";
 // * A trivial test app which is NOT whitelisted for running in the sign-in
 //   profile:
 const char kNotWhitelistedAppId[] = "mockapnacjbcdncmpkjngjalkhphojek";
@@ -59,6 +70,13 @@
 const char kNotWhitelistedExtensionUpdateManifestPath[] =
     "/extensions/trivial_extension/update_manifest.xml";
 
+// Returns the update manifest path for the whitelisted testing app with the
+// given version.
+std::string GetWhitelistedAppUpdateManifestPath(const std::string& version) {
+  return base::StringPrintf(kWhitelistedAppUpdateManifestPathFormat,
+                            version.c_str());
+}
+
 // Observer that allows waiting for an installation failure of a specific
 // extension/app.
 // TODO(emaxx): Extract this into a more generic helper class for using in other
@@ -127,6 +145,50 @@
   DISALLOW_COPY_AND_ASSIGN(ExtensionBackgroundPageReadyObserver);
 };
 
+// Observer that allows waiting until the specified version of the given
+// extension/app gets installed.
+class ExtensionInstallObserver final
+    : public extensions::ExtensionRegistryObserver {
+ public:
+  ExtensionInstallObserver(Profile* profile,
+                           const std::string& extension_id,
+                           const base::Version& awaited_version)
+      : profile_(profile),
+        extension_id_(extension_id),
+        awaited_version_(awaited_version) {
+    extensions::ExtensionRegistry::Get(profile)->AddObserver(this);
+  }
+
+  ExtensionInstallObserver(const ExtensionInstallObserver&) = delete;
+  ExtensionInstallObserver& operator=(const ExtensionInstallObserver&) = delete;
+
+  ~ExtensionInstallObserver() override {
+    extensions::ExtensionRegistry::Get(profile_)->RemoveObserver(this);
+  }
+
+  // Should be called no more than once.
+  void Wait() {
+    // Note that the expected event could have already been observed before this
+    // point, in which case the run loop will exit immediately.
+    run_loop_.Run();
+  }
+
+  void OnExtensionInstalled(content::BrowserContext* browser_context,
+                            const extensions::Extension* extension,
+                            bool is_update) override {
+    if (extension->id() == extension_id_ &&
+        extension->version() == awaited_version_) {
+      run_loop_.Quit();
+    }
+  }
+
+ private:
+  Profile* const profile_;
+  const std::string extension_id_;
+  const base::Version awaited_version_;
+  base::RunLoop run_loop_;
+};
+
 // Class for testing sign-in profile apps/extensions that are installed via the
 // device policy under different browser channels.
 class SigninProfileExtensionsPolicyPerChannelTest
@@ -160,8 +222,9 @@
   extensions::TestExtensionRegistryObserver registry_observer(
       extensions::ExtensionRegistry::Get(profile), kWhitelistedAppId);
 
-  AddExtensionForForceInstallation(kWhitelistedAppId,
-                                   kWhitelistedAppUpdateManifestPath);
+  AddExtensionForForceInstallation(
+      kWhitelistedAppId,
+      GetWhitelistedAppUpdateManifestPath(kWhitelistedAppLatestVersion));
 
   registry_observer.WaitForExtensionLoaded();
   const extensions::Extension* extension =
@@ -299,8 +362,9 @@
   extensions::TestExtensionRegistryObserver registry_observer2(
       extensions::ExtensionRegistry::Get(profile), kNotWhitelistedAppId);
 
-  AddExtensionForForceInstallation(kWhitelistedAppId,
-                                   kWhitelistedAppUpdateManifestPath);
+  AddExtensionForForceInstallation(
+      kWhitelistedAppId,
+      GetWhitelistedAppUpdateManifestPath(kWhitelistedAppLatestVersion));
   AddExtensionForForceInstallation(kNotWhitelistedAppId,
                                    kNotWhitelistedUpdateManifestPath);
 
@@ -318,8 +382,9 @@
   ExtensionBackgroundPageReadyObserver page_observer_for_extension(
       kWhitelistedExtensionId);
 
-  AddExtensionForForceInstallation(kWhitelistedAppId,
-                                   kWhitelistedAppUpdateManifestPath);
+  AddExtensionForForceInstallation(
+      kWhitelistedAppId,
+      GetWhitelistedAppUpdateManifestPath(kWhitelistedAppLatestVersion));
   AddExtensionForForceInstallation(kWhitelistedExtensionId,
                                    kWhitelistedExtensionUpdateManifestPath);
 
@@ -355,8 +420,9 @@
             extensions::ExtensionRegistry::Get(GetInitialProfile()),
             kWhitelistedAppId);
 
-    AddExtensionForForceInstallation(kWhitelistedAppId,
-                                     kWhitelistedAppUpdateManifestPath);
+    AddExtensionForForceInstallation(
+        kWhitelistedAppId,
+        GetWhitelistedAppUpdateManifestPath(kWhitelistedAppLatestVersion));
 
     // In the non-PRE test, this simulates inability to make network requests
     // for fetching the extension update manifest and CRX files. In the PRE test
@@ -395,4 +461,135 @@
   WaitForTestExtensionLoaded();
 }
 
+// Class for testing the auto update of the sign-in profile extensions.
+class SigninProfileExtensionsAutoUpdatePolicyTest
+    : public SigninProfileExtensionsPolicyTest {
+ public:
+  SigninProfileExtensionsAutoUpdatePolicyTest() {
+    embedded_test_server()->RegisterRequestHandler(base::Bind(
+        &SigninProfileExtensionsAutoUpdatePolicyTest::HandleTestServerRequest,
+        base::Unretained(this)));
+  }
+
+  void SetUpOnMainThread() override {
+    SigninProfileExtensionsPolicyTest::SetUpOnMainThread();
+
+    test_extension_registry_observer_ =
+        std::make_unique<extensions::TestExtensionRegistryObserver>(
+            extensions::ExtensionRegistry::Get(GetInitialProfile()),
+            kWhitelistedAppId);
+    test_extension_latest_version_install_observer_ =
+        std::make_unique<ExtensionInstallObserver>(
+            GetInitialProfile(), kWhitelistedAppId,
+            base::Version(kWhitelistedAppLatestVersion));
+
+    AddExtensionForForceInstallation(kWhitelistedAppId,
+                                     kRedirectingUpdateManifestPath);
+  }
+
+  void TearDownOnMainThread() override {
+    test_extension_latest_version_install_observer_.reset();
+    test_extension_registry_observer_.reset();
+    SigninProfileExtensionsPolicyTest::TearDownOnMainThread();
+  }
+
+  // Enables serving the test extension's update manifest at the specified
+  // version.
+  void StartServingTestExtension(const std::string& extension_version) {
+    served_extension_version_ = extension_version;
+  }
+
+  void WaitForTestExtensionLoaded() {
+    test_extension_registry_observer_->WaitForExtensionLoaded();
+  }
+
+  void WaitForTestExtensionLatestVersionInstalled() {
+    test_extension_latest_version_install_observer_->Wait();
+  }
+
+  base::Version GetTestExtensionVersion() {
+    const extensions::Extension* const extension =
+        extensions::ExtensionRegistry::Get(GetInitialProfile())
+            ->enabled_extensions()
+            .GetByID(kWhitelistedAppId);
+    if (!extension)
+      return base::Version();
+    return extension->version();
+  }
+
+ private:
+  // Path on the embedded test server that redirects to the update manifest of
+  // the test extension for the version that is currently served.
+  const std::string kRedirectingUpdateManifestPath =
+      "/redirecting-update-manifest-path.xml";
+
+  // Handler for the embedded test server. Provides special behavior for the
+  // test extension's update manifest URL in accordance to
+  // |served_extension_version_|.
+  std::unique_ptr<net::test_server::HttpResponse> HandleTestServerRequest(
+      const net::test_server::HttpRequest& request) {
+    if (request.GetURL().path() != kRedirectingUpdateManifestPath)
+      return nullptr;
+    if (served_extension_version_.empty()) {
+      // No extension is served now, so return an error.
+      auto response = std::make_unique<net::test_server::BasicHttpResponse>();
+      response->set_code(net::HTTP_INTERNAL_SERVER_ERROR);
+      return response;
+    }
+    // Redirect to the XML file for the corresponding version.
+    auto response = std::make_unique<net::test_server::BasicHttpResponse>();
+    response->set_code(net::HTTP_TEMPORARY_REDIRECT);
+    response->AddCustomHeader("Location",
+                              embedded_test_server()
+                                  ->GetURL(GetWhitelistedAppUpdateManifestPath(
+                                      served_extension_version_))
+                                  .spec());
+    return response;
+  }
+
+  // Specifies which version of the test extension needs to be served. An empty
+  // string means that no version is served.
+  std::string served_extension_version_;
+
+  std::unique_ptr<extensions::TestExtensionRegistryObserver>
+      test_extension_registry_observer_;
+  std::unique_ptr<ExtensionInstallObserver>
+      test_extension_latest_version_install_observer_;
+};
+
+// This is the first preparation step for the actual test. Here the old version
+// of the whitelisted app is served, and it gets installed into the sign-in
+// profile.
+IN_PROC_BROWSER_TEST_F(SigninProfileExtensionsAutoUpdatePolicyTest,
+                       PRE_PRE_Test) {
+  StartServingTestExtension(kWhitelistedAppOlderVersion);
+  WaitForTestExtensionLoaded();
+  EXPECT_EQ(GetTestExtensionVersion(),
+            base::Version(kWhitelistedAppOlderVersion));
+}
+
+// This is the second preparation step for the actual test. Here the new version
+// of the app is served, and it gets fetched and installed.
+IN_PROC_BROWSER_TEST_F(SigninProfileExtensionsAutoUpdatePolicyTest, PRE_Test) {
+  // Let the extensions system to load the previously fetched version before
+  // starting to serve the newer version, to avoid hitting flaky DCHECKs in the
+  // extensions system internals (see https://crbug.com/810799).
+  WaitForTestExtensionLoaded();
+  EXPECT_EQ(GetTestExtensionVersion(),
+            base::Version(kWhitelistedAppOlderVersion));
+
+  // Start serving the newer version and verify that it gets installed.
+  StartServingTestExtension(kWhitelistedAppLatestVersion);
+  WaitForTestExtensionLatestVersionInstalled();
+}
+
+// This is the actual test. Here we verify that the new version of the app, as
+// fetched in the PRE_Test, gets launched even in the "offline" mode (since
+// we're not serving any version of the extension in this part of the test).
+IN_PROC_BROWSER_TEST_F(SigninProfileExtensionsAutoUpdatePolicyTest, Test) {
+  WaitForTestExtensionLoaded();
+  EXPECT_EQ(GetTestExtensionVersion(),
+            base::Version(kWhitelistedAppLatestVersion));
+}
+
 }  // namespace policy
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc
index e776b75..e2840460 100644
--- a/chrome/browser/chromeos/preferences.cc
+++ b/chrome/browser/chromeos/preferences.cc
@@ -418,6 +418,11 @@
 
   registry->RegisterBooleanPref(prefs::kSettingsShowBrowserBanner, true);
   registry->RegisterBooleanPref(prefs::kSettingsShowOSBanner, true);
+
+  // This pref is a per-session pref and must not be synced.
+  registry->RegisterStringPref(prefs::kLoginExtensionApiLaunchExtensionId,
+                               std::string(),
+                               PrefRegistry::NO_REGISTRATION_FLAGS);
 }
 
 void Preferences::InitUserPrefs(sync_preferences::PrefServiceSyncable* prefs) {
diff --git a/chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_messaging.cc b/chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_messaging.cc
index 2ce7688..13c49793 100644
--- a/chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_messaging.cc
+++ b/chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_messaging.cc
@@ -43,7 +43,7 @@
 // Note: the list size must be kept in sync with
 // |kWilcoDtcSupportdHostOriginsSize|.
 const char* const kWilcoDtcSupportdHostOrigins[] = {
-    "chrome-extension://okdnlenpdegbpdgniggponebnbkbeeca/"};
+    "chrome-extension://emelalhagcpibaiiiijjlkmhhbekaidg/"};
 
 // Size of |kWilcoDtcSupportdHostOrigins| array.
 const size_t kWilcoDtcSupportdHostOriginsSize =
diff --git a/chrome/browser/extensions/tab_helper.cc b/chrome/browser/extensions/tab_helper.cc
index 8eae5786..3e0588d 100644
--- a/chrome/browser/extensions/tab_helper.cc
+++ b/chrome/browser/extensions/tab_helper.cc
@@ -27,6 +27,7 @@
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
+#include "chrome/common/buildflags.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
 #include "chrome/common/render_messages.h"
@@ -59,6 +60,11 @@
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
 #include "url/url_constants.h"
 
+#if BUILDFLAG(ENABLE_SESSION_SERVICE)
+#include "chrome/browser/sessions/session_service.h"
+#include "chrome/browser/sessions/session_service_factory.h"
+#endif
+
 using content::NavigationController;
 using content::NavigationEntry;
 using content::WebContents;
@@ -113,10 +119,19 @@
 
   UpdateExtensionAppIcon(extension_app_);
 
+#if BUILDFLAG(ENABLE_SESSION_SERVICE)
   if (extension_app_) {
-    SessionTabHelper::FromWebContents(web_contents())
-        ->SetTabExtensionAppID(GetAppId());
+    SessionService* session_service = SessionServiceFactory::GetForProfile(
+        Profile::FromBrowserContext(web_contents()->GetBrowserContext()));
+    if (session_service) {
+      SessionTabHelper* session_tab_helper =
+          SessionTabHelper::FromWebContents(web_contents());
+      session_service->SetTabExtensionAppID(session_tab_helper->window_id(),
+                                            session_tab_helper->session_id(),
+                                            GetAppId());
+    }
   }
+#endif
 }
 
 void TabHelper::SetExtensionAppById(const ExtensionId& extension_app_id) {
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index bcb2a07..ec1c48e 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -2090,6 +2090,11 @@
     "expiry_milestone": 83
   },
   {
+    "name": "enable-webassembly-tiering",
+    "owners": [ "clemensb", "wasm-team@google.com" ],
+    "expiry_milestone": 86
+  },
+  {
     "name": "enable-webgl-draft-extensions",
     "owners": [ "webgl-team@google.com" ],
     // This flag is the only way for end users to test upcoming WebGL
@@ -3393,6 +3398,11 @@
     "expiry_milestone": 77
   },
   {
+    "name": "sync-setup-friendly-settings",
+    "owners": ["msalama"],
+    "expiry_milestone": 84
+  },
+  {
     "name": "sync-wifi-configurations",
     "owners": ["jonmann", "cros-system-services@google.com"],
     "expiry_milestone": 85
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index aa265543..7b472a3 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -992,6 +992,11 @@
     "Enables support for the WebAssembly Threads proposal. Implies "
     "#shared-array-buffer and #enable-webassembly.";
 
+const char kEnableWasmTieringName[] = "WebAssembly tiering";
+const char kEnableWasmTieringDescription[] =
+    "Enables tiered compilation of WebAssembly (will tier up to TurboFan if "
+    "#enable-webassembly-baseline is enabled.";
+
 const char kEvDetailsInPageInfoName[] = "EV certificate details in Page Info.";
 const char kEvDetailsInPageInfoDescription[] =
     "Shows the EV certificate details in the Page Info bubble.";
@@ -3053,6 +3058,10 @@
     "Shows a Google icon next to context menu items powered by Google "
     "services.";
 
+const char kSyncSetupFriendlySettingsName[] = "Sync setup friendly settings";
+const char kSyncSetupFriendlySettingsDescription[] =
+    "Enable the new sync setup friendly settings";
+
 #endif  // !defined(OS_ANDROID)
 
 // Windows ---------------------------------------------------------------------
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index efaae4a4..01c78e8 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -594,6 +594,9 @@
 extern const char kEnableWasmThreadsName[];
 extern const char kEnableWasmThreadsDescription[];
 
+extern const char kEnableWasmTieringName[];
+extern const char kEnableWasmTieringDescription[];
+
 extern const char kEvDetailsInPageInfoName[];
 extern const char kEvDetailsInPageInfoDescription[];
 
@@ -1786,6 +1789,9 @@
 extern const char kGoogleBrandedContextMenuName[];
 extern const char kGoogleBrandedContextMenuDescription[];
 
+extern const char kSyncSetupFriendlySettingsName[];
+extern const char kSyncSetupFriendlySettingsDescription[];
+
 #endif  // defined(OS_ANDROID)
 
 // Windows --------------------------------------------------------------------
diff --git a/chrome/browser/metrics/BUILD.gn b/chrome/browser/metrics/BUILD.gn
index 5401072..eec3866 100644
--- a/chrome/browser/metrics/BUILD.gn
+++ b/chrome/browser/metrics/BUILD.gn
@@ -4,6 +4,34 @@
 
 import("//components/metrics/generate_expired_histograms_array.gni")
 
+if (!is_android) {
+  static_library("test_support") {
+    testonly = true
+    sources = [
+      "testing/demographic_metrics_test_utils.cc",
+      "testing/demographic_metrics_test_utils.h",
+      "testing/sync_metrics_test_utils.cc",
+      "testing/sync_metrics_test_utils.h",
+    ]
+
+    deps = [
+      "//base",
+      "//chrome/browser",
+      "//components/network_time",
+      "//components/prefs",
+      "//components/signin/public/identity_manager",
+      "//components/sync",
+      "//components/sync/base",
+      "//components/sync/test/fake_server",
+      "//third_party/metrics_proto",
+    ]
+
+    if (!is_fuchsia) {
+      deps += [ "//chrome/test:sync_integration_test_support" ]
+    }
+  }
+}
+
 generate_expired_histograms_array("expired_histograms_array") {
   inputs = [
     "//tools/metrics/histograms/histograms.xml",
diff --git a/chrome/browser/metrics/metrics_service_user_demographics_browsertest.cc b/chrome/browser/metrics/metrics_service_user_demographics_browsertest.cc
new file mode 100644
index 0000000..2122354
--- /dev/null
+++ b/chrome/browser/metrics/metrics_service_user_demographics_browsertest.cc
@@ -0,0 +1,187 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/metrics/metrics_service.h"
+
+#include <string>
+#include <vector>
+
+#include "base/command_line.h"
+#include "base/feature_list.h"
+#include "base/memory/weak_ptr.h"
+#include "base/optional.h"
+#include "base/test/metrics/histogram_tester.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
+#include "chrome/browser/metrics/chrome_metrics_services_manager_client.h"
+#include "chrome/browser/metrics/testing/demographic_metrics_test_utils.h"
+#include "chrome/browser/metrics/testing/sync_metrics_test_utils.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
+#include "chrome/browser/sync/test/integration/sync_test.h"
+#include "components/metrics/delegating_provider.h"
+#include "components/metrics/demographic_metrics_provider.h"
+#include "components/metrics/metrics_switches.h"
+#include "components/metrics_services_manager/metrics_services_manager.h"
+#include "components/sync/driver/sync_user_settings.h"
+#include "testing/gmock/include/gmock/gmock-matchers.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "third_party/metrics_proto/chrome_user_metrics_extension.pb.h"
+#include "third_party/metrics_proto/user_demographics.pb.h"
+#include "third_party/zlib/google/compression_utils.h"
+
+namespace metrics {
+namespace {
+
+class MetricsServiceUserDemographicsBrowserTest
+    : public SyncTest,
+      public testing::WithParamInterface<test::DemographicsTestParams> {
+ public:
+  MetricsServiceUserDemographicsBrowserTest() : SyncTest(SINGLE_CLIENT) {
+    if (GetParam().enable_feature) {
+      // Enable UMA and reporting of the synced user's birth year and gender.
+      scoped_feature_list_.InitWithFeatures(
+          // enabled_features =
+          {internal::kMetricsReportingFeature,
+           DemographicMetricsProvider::kDemographicMetricsReporting},
+          // disabled_features =
+          {});
+    } else {
+      scoped_feature_list_.InitWithFeatures(
+          // enabled_features =
+          {internal::kMetricsReportingFeature},
+          // disabled_features =
+          {DemographicMetricsProvider::kDemographicMetricsReporting});
+    }
+  }
+
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    // Enable the metrics service for testing (in recording-only mode).
+    command_line->AppendSwitch(switches::kMetricsRecordingOnly);
+  }
+
+  void SetUp() override {
+    // Consent for metrics and crash reporting for testing.
+    ChromeMetricsServiceAccessor::SetMetricsAndCrashReportingForTesting(
+        &metrics_consent_);
+    SyncTest::SetUp();
+  }
+
+  // Forces a log record to be generated. Returns a copy of the record on
+  // success; otherwise, returns std::nullopt.
+  base::Optional<ChromeUserMetricsExtension> GenerateLogRecord() {
+    // Make sure that the metrics service is instantiated.
+    MetricsService* const metrics_service =
+        g_browser_process->GetMetricsServicesManager()->GetMetricsService();
+    if (metrics_service == nullptr) {
+      LOG(ERROR) << "Metrics service is not available";
+      return base::nullopt;
+    }
+
+    // Force the creation of a log record (i.e., trigger all metrics providers).
+    metrics_service->CloseCurrentLogForTest();
+
+    // Stage/serialize the log record for transmission.
+    MetricsLogStore* const log_store = metrics_service->LogStoreForTest();
+    log_store->StageNextLog();
+    if (!log_store->has_staged_log()) {
+      LOG(ERROR) << "No staged log.";
+      return base::nullopt;
+    }
+
+    // Decompress the staged log.
+    std::string uncompressed_log;
+    if (!compression::GzipUncompress(log_store->staged_log(),
+                                     &uncompressed_log)) {
+      LOG(ERROR) << "Decompression failed.";
+      return base::nullopt;
+    }
+
+    // Deserialize and return the log.
+    ChromeUserMetricsExtension uma_proto;
+    if (!uma_proto.ParseFromString(uncompressed_log)) {
+      LOG(ERROR) << "Deserialization failed.";
+      return base::nullopt;
+    }
+
+    return uma_proto;
+  }
+
+ private:
+  bool metrics_consent_ = true;
+
+  base::test::ScopedFeatureList scoped_feature_list_;
+
+  DISALLOW_COPY_AND_ASSIGN(MetricsServiceUserDemographicsBrowserTest);
+};
+
+// TODO(crbug/1016118): Add the remaining test cases.
+IN_PROC_BROWSER_TEST_P(MetricsServiceUserDemographicsBrowserTest,
+                       AddSyncedUserBirthYearAndGenderToProtoData) {
+  test::DemographicsTestParams param = GetParam();
+
+  base::HistogramTester histogram;
+
+  const int test_birth_year =
+      test::UpdateNetworkTimeAndGetMinimalEligibleBirthYear();
+  const UserDemographicsProto::Gender test_gender =
+      UserDemographicsProto::GENDER_FEMALE;
+
+  // Add the test synced user birth year and gender priority prefs to the sync
+  // server data.
+  test::AddUserBirthYearAndGenderToSyncServer(GetFakeServer()->AsWeakPtr(),
+                                              test_birth_year, test_gender);
+
+  Profile* test_profile = ProfileManager::GetActiveUserProfile();
+
+  // Enable sync for the test profile.
+  std::unique_ptr<ProfileSyncServiceHarness> test_profile_harness =
+      test::InitializeProfileForSync(test_profile,
+                                     GetFakeServer()->AsWeakPtr());
+  test_profile_harness->SetupSync();
+
+  // Make sure that there is only one Profile to allow reporting the user's
+  // birth year and gender.
+  ASSERT_EQ(1, num_clients());
+
+  // Generate a log record.
+  base::Optional<ChromeUserMetricsExtension> uma_proto = GenerateLogRecord();
+  ASSERT_TRUE(uma_proto.has_value());
+
+  // Check log content and the histogram.
+  if (param.expect_reported_demographics) {
+    EXPECT_EQ(test::GetNoisedBirthYear(test_birth_year, *test_profile),
+              uma_proto->user_demographics().birth_year());
+    EXPECT_EQ(test_gender, uma_proto->user_demographics().gender());
+    histogram.ExpectUniqueSample("UMA.UserDemographics.Status",
+                                 syncer::UserDemographicsStatus::kSuccess, 1);
+  } else {
+    EXPECT_FALSE(uma_proto->has_user_demographics());
+    histogram.ExpectTotalCount("UMA.UserDemographics.Status", /*count=*/0);
+  }
+
+  test_profile_harness->service()->GetUserSettings()->SetSyncRequested(false);
+}
+
+#if defined(OS_CHROMEOS)
+// Cannot test for the enabled feature on Chrome OS because there are always
+// multiple profiles.
+static const auto kDemographicsTestParams = testing::Values(
+    test::DemographicsTestParams{/*enable_feature=*/false,
+                                 /*expect_reported_demographics=*/false});
+#else
+static const auto kDemographicsTestParams = testing::Values(
+    test::DemographicsTestParams{/*enable_feature=*/false,
+                                 /*expect_reported_demographics=*/false},
+    test::DemographicsTestParams{/*enable_feature=*/true,
+                                 /*expect_reported_demographics=*/true});
+#endif
+
+INSTANTIATE_TEST_SUITE_P(,
+                         MetricsServiceUserDemographicsBrowserTest,
+                         kDemographicsTestParams);
+
+}  // namespace
+}  // namespace metrics
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc b/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc
index 6e0c19d..818cc31 100644
--- a/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc
+++ b/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc
@@ -707,8 +707,9 @@
 }
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
 
-// TODO(crbug.com/989810): Re-enable on Win once not flaky.
-#if defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER) || defined(OS_WIN)
+// TODO(crbug.com/989810): Re-enable on Win and Mac once not flaky.
+#if defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER) || \
+    defined(OS_WIN) || defined(OS_MACOSX)
 #define MAYBE_FetchDuringTrace DISABLED_FetchDuringTrace
 #else
 #define MAYBE_FetchDuringTrace FetchDuringTrace
diff --git a/chrome/browser/metrics/startup_metrics_browsertest.cc b/chrome/browser/metrics/startup_metrics_browsertest.cc
index 27a199a..bb3fd7e 100644
--- a/chrome/browser/metrics/startup_metrics_browsertest.cc
+++ b/chrome/browser/metrics/startup_metrics_browsertest.cc
@@ -16,7 +16,6 @@
 namespace {
 
 constexpr const char* kStartupMetrics[] = {
-    "Startup.BrowserMainToRendererMain",
     "Startup.BrowserMessageLoopStartTime",
     "Startup.BrowserMessageLoopStartTimeFromMainEntry3",
     "Startup.BrowserOpenTabs",
diff --git a/chrome/browser/metrics/testing/demographic_metrics_test_utils.cc b/chrome/browser/metrics/testing/demographic_metrics_test_utils.cc
new file mode 100644
index 0000000..a7088f8
--- /dev/null
+++ b/chrome/browser/metrics/testing/demographic_metrics_test_utils.cc
@@ -0,0 +1,85 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/metrics/testing/demographic_metrics_test_utils.h"
+
+#include "base/i18n/time_formatting.h"
+#include "base/strings/stringprintf.h"
+#include "base/time/time.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/profiles/profile.h"
+#include "components/network_time/network_time_tracker.h"
+#include "components/prefs/pref_service.h"
+#include "components/sync/base/pref_names.h"
+#include "components/sync/base/user_demographics.h"
+#include "components/sync/engine_impl/loopback_server/persistent_unique_client_entity.h"
+#include "components/sync/protocol/sync.pb.h"
+
+namespace metrics {
+namespace test {
+
+void AddUserBirthYearAndGenderToSyncServer(
+    base::WeakPtr<fake_server::FakeServer> fake_server,
+    int birth_year,
+    metrics::UserDemographicsProto::Gender gender) {
+  DCHECK(fake_server);
+
+  sync_pb::EntitySpecifics specifics;
+  specifics.mutable_priority_preference()->mutable_preference()->set_name(
+      syncer::prefs::kSyncDemographics);
+  specifics.mutable_priority_preference()->mutable_preference()->set_value(
+      base::StringPrintf("{\"birth_year\":%d,\"gender\":%d}", birth_year,
+                         static_cast<int>(gender)));
+  fake_server->InjectEntity(
+      syncer::PersistentUniqueClientEntity::CreateFromSpecificsForTesting(
+          /*non_unique_name=*/syncer::prefs::kSyncDemographics,
+          /*client_tag=*/specifics.preference().name(), specifics,
+          /*creation_time=*/0,
+          /*last_modified_time=*/0));
+}
+
+int UpdateNetworkTimeAndGetMinimalEligibleBirthYear() {
+  base::Time now = base::Time::Now();
+  // Simulate the latency in the network to get the network time from the remote
+  // server.
+  constexpr base::TimeDelta kLatency = base::TimeDelta::FromMilliseconds(10);
+  // Simulate the time taken to call UpdateNetworkTime() since the moment the
+  // callback was created. When not testing with the fake sync server, the
+  // callback is called when doing an HTTP request to the sync server.
+  constexpr base::TimeDelta kCallbackDelay =
+      base::TimeDelta::FromMilliseconds(10);
+  // Simulate a network time that is a bit earlier than the now time.
+  base::Time network_time = now - kCallbackDelay - kLatency;
+  // Simulate the time in ticks at the moment the UpdateNetworkTime callback
+  // function is created, which time should be at least 1 millisecond behind the
+  // moment the callback is run to pass the DCHECK.
+  base::TimeTicks post_time = base::TimeTicks::Now() - kCallbackDelay;
+  g_browser_process->network_time_tracker()->UpdateNetworkTime(
+      network_time,
+      /*resolution=*/base::TimeDelta::FromMilliseconds(1), kLatency, post_time);
+
+  constexpr int kEligibleAge =
+      syncer::kUserDemographicsMinAgeInYears +
+      syncer::kUserDemographicsBirthYearNoiseOffsetRange;
+
+  base::Time::Exploded exploded_time;
+  now.UTCExplode(&exploded_time);
+  // Return the maximal birth year that is eligible for reporting the user's
+  // birth year and gender. The -1 year is the extra buffer that Sync uses to
+  // make sure that the user is at least 20 yo because the user only gives the
+  // year of their birth date. For example, considering that the current date is
+  // the 05 Jan 2019 and that the user was born the 05 Mar 1999, the age of the
+  // user would be computed to 20 yo when using the year resolution, but the
+  // user is in fact 19.
+  return exploded_time.year - kEligibleAge - 1;
+}
+
+int GetNoisedBirthYear(int raw_birth_year, const Profile& profile) {
+  int birth_year_offset = profile.GetPrefs()->GetInteger(
+      syncer::prefs::kSyncDemographicsBirthYearOffset);
+  return birth_year_offset + raw_birth_year;
+}
+
+}  // namespace test
+}  // namespace metrics
diff --git a/chrome/browser/metrics/testing/demographic_metrics_test_utils.h b/chrome/browser/metrics/testing/demographic_metrics_test_utils.h
new file mode 100644
index 0000000..b67fb53
--- /dev/null
+++ b/chrome/browser/metrics/testing/demographic_metrics_test_utils.h
@@ -0,0 +1,53 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_METRICS_TESTING_DEMOGRAPHIC_METRICS_TEST_UTILS_H_
+#define CHROME_BROWSER_METRICS_TESTING_DEMOGRAPHIC_METRICS_TEST_UTILS_H_
+
+#include "base/memory/weak_ptr.h"
+#include "components/sync/test/fake_server/fake_server.h"
+#include "third_party/metrics_proto/user_demographics.pb.h"
+
+// Helpers to support testing the user's noised birth year and gender metrics in
+// browser tests.
+
+class Profile;
+
+namespace metrics {
+namespace test {
+
+// Parameters for the parameterized tests.
+struct DemographicsTestParams {
+  // Enable the feature to report the user's birth year and gender.
+  bool enable_feature = false;
+  // Expectation for the user's noised birth year and gender to be reported.
+  // Having |enable_feature| set to true does not necessarily mean that
+  // |expect_reported_demographics| will be true because other conditions might
+  // stop the reporting of the user's noised birth year and gender, e.g.,
+  // sync is turned off.
+  bool expect_reported_demographics = false;
+};
+
+// Adds the User Demographic priority pref to the sync |fake_server|, which
+// contains the test synced user's |birth_year| and |gender|.
+void AddUserBirthYearAndGenderToSyncServer(
+    base::WeakPtr<fake_server::FakeServer> fake_server,
+    int birth_year,
+    metrics::UserDemographicsProto::Gender gender);
+
+// Updates the network time that is used to compute the test synced user's age
+// and returns the minimal elibible birth year for the user to provide their
+// birth year and gender.
+int UpdateNetworkTimeAndGetMinimalEligibleBirthYear();
+
+// Gets the noised birth year of the user, where the |raw_birth_year|
+// corresponds to the user birth year to noise and |profile| corresponds to the
+// profile of the user that has the noise pref. This function should be run
+// after the Demographic Metrics Provider is run.
+int GetNoisedBirthYear(int raw_birth_year, const Profile& profile);
+
+}  // namespace test
+}  // namespace metrics
+
+#endif  // CHROME_BROWSER_METRICS_TESTING_DEMOGRAPHIC_METRICS_TEST_UTILS_H_
diff --git a/chrome/browser/metrics/testing/sync_metrics_test_utils.cc b/chrome/browser/metrics/testing/sync_metrics_test_utils.cc
new file mode 100644
index 0000000..6d45bff
--- /dev/null
+++ b/chrome/browser/metrics/testing/sync_metrics_test_utils.cc
@@ -0,0 +1,46 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/metrics/testing/sync_metrics_test_utils.h"
+
+#include "chrome/browser/signin/identity_manager_factory.h"
+#include "chrome/browser/sync/profile_sync_service_factory.h"
+#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
+#include "chrome/browser/sync/test/integration/sync_test.h"
+#include "components/signin/public/identity_manager/account_info.h"
+#include "components/signin/public/identity_manager/identity_manager.h"
+#include "components/sync/test/fake_server/fake_server_network_resources.h"
+
+namespace metrics {
+namespace test {
+
+std::unique_ptr<ProfileSyncServiceHarness> InitializeProfileForSync(
+    Profile* profile,
+    base::WeakPtr<fake_server::FakeServer> fake_server) {
+  ProfileSyncServiceFactory::GetAsProfileSyncServiceForProfile(profile)
+      ->OverrideNetworkForTest(
+          fake_server::CreateFakeServerHttpPostProviderFactory(
+              fake_server->AsWeakPtr()));
+
+  std::string username;
+#if defined(OS_CHROMEOS)
+  // In browser tests, the profile may already by authenticated with stub
+  // account |user_manager::kStubUserEmail|.
+  CoreAccountInfo info =
+      IdentityManagerFactory::GetForProfile(profile)->GetPrimaryAccountInfo();
+  username = info.email;
+#endif
+  if (username.empty()) {
+    username = "user@gmail.com";
+  }
+
+  std::unique_ptr<ProfileSyncServiceHarness> harness =
+      ProfileSyncServiceHarness::Create(
+          profile, username, "unused" /* password */,
+          ProfileSyncServiceHarness::SigninType::FAKE_SIGNIN);
+  return harness;
+}
+
+}  // namespace test
+}  // namespace metrics
diff --git a/chrome/browser/metrics/testing/sync_metrics_test_utils.h b/chrome/browser/metrics/testing/sync_metrics_test_utils.h
new file mode 100644
index 0000000..95f4f55
--- /dev/null
+++ b/chrome/browser/metrics/testing/sync_metrics_test_utils.h
@@ -0,0 +1,33 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_METRICS_TESTING_SYNC_METRICS_TEST_UTILS_H_
+#define CHROME_BROWSER_METRICS_TESTING_SYNC_METRICS_TEST_UTILS_H_
+
+#include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
+#include "components/sync/test/fake_server/fake_server.h"
+#include "third_party/metrics_proto/user_demographics.pb.h"
+
+// Helpers to support sync in metrics browser tests.
+
+class Profile;
+class ProfileSyncServiceHarness;
+
+namespace fake_server {
+class FakeServer;
+}
+
+namespace metrics {
+namespace test {
+
+// Initializes and enables the test Sync service of the |profile|.
+std::unique_ptr<ProfileSyncServiceHarness> InitializeProfileForSync(
+    Profile* profile,
+    base::WeakPtr<fake_server::FakeServer> fake_server);
+
+}  // namespace test
+}  // namespace metrics
+
+#endif  // CHROME_BROWSER_METRICS_TESTING_SYNC_METRICS_TEST_UTILS_H_
diff --git a/chrome/browser/metrics/ukm_browsertest.cc b/chrome/browser/metrics/ukm_browsertest.cc
index 17721d8..49977de 100644
--- a/chrome/browser/metrics/ukm_browsertest.cc
+++ b/chrome/browser/metrics/ukm_browsertest.cc
@@ -9,6 +9,8 @@
 #include "base/stl_util.h"
 #include "base/strings/string_util.h"
 #include "base/system/sys_info.h"
+#include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "build/buildflag.h"
 #include "chrome/browser/browser_process.h"
@@ -16,7 +18,9 @@
 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
 #include "chrome/browser/metrics/chrome_metrics_service_client.h"
 #include "chrome/browser/metrics/chrome_metrics_services_manager_client.h"
+#include "chrome/browser/metrics/testing/demographic_metrics_test_utils.h"
 #include "chrome/browser/metrics/testing/metrics_reporting_pref_helper.h"
+#include "chrome/browser/metrics/testing/sync_metrics_test_utils.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
@@ -30,6 +34,7 @@
 #include "chrome/browser/unified_consent/unified_consent_service_factory.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/metrics/demographic_metrics_provider.h"
 #include "components/metrics_services_manager/metrics_services_manager.h"
 #include "components/signin/public/base/signin_buildflags.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
@@ -54,6 +59,7 @@
 #include "services/metrics/public/cpp/ukm_source.h"
 #include "services/network/test/test_network_quality_tracker.h"
 #include "third_party/metrics_proto/ukm/report.pb.h"
+#include "third_party/metrics_proto/user_demographics.pb.h"
 #include "third_party/zlib/google/compression_utils.h"
 #include "url/url_constants.h"
 
@@ -211,7 +217,7 @@
   ukm::Report GetUkmReport() {
     EXPECT_TRUE(HasUnsentUkmLogs());
 
-    metrics::UnsentLogStore* log_store =
+    UnsentLogStore* log_store =
         ukm_service()->reporting_service_.ukm_log_store();
     if (log_store->has_staged_log()) {
       // For testing purposes, we are examining the content of a staged log
@@ -231,36 +237,10 @@
   }
 
  protected:
-  std::unique_ptr<ProfileSyncServiceHarness> InitializeProfileForSync(
-      Profile* profile) {
-    ProfileSyncServiceFactory::GetAsProfileSyncServiceForProfile(profile)
-        ->OverrideNetworkForTest(
-            fake_server::CreateFakeServerHttpPostProviderFactory(
-                GetFakeServer()->AsWeakPtr()));
-
-    std::string username;
-#if defined(OS_CHROMEOS)
-    // In browser tests, the profile may already by authenticated with stub
-    // account |user_manager::kStubUserEmail|.
-    CoreAccountInfo info =
-        IdentityManagerFactory::GetForProfile(profile)->GetPrimaryAccountInfo();
-    username = info.email;
-#endif
-    if (username.empty()) {
-      username = "user@gmail.com";
-    }
-
-    std::unique_ptr<ProfileSyncServiceHarness> harness =
-        ProfileSyncServiceHarness::Create(
-            profile, username, "unused" /* password */,
-            ProfileSyncServiceHarness::SigninType::FAKE_SIGNIN);
-    return harness;
-  }
-
   std::unique_ptr<ProfileSyncServiceHarness> EnableSyncForProfile(
       Profile* profile) {
     std::unique_ptr<ProfileSyncServiceHarness> harness =
-        InitializeProfileForSync(profile);
+        test::InitializeProfileForSync(profile, GetFakeServer()->AsWeakPtr());
     EXPECT_TRUE(harness->SetupSync());
 
     // If unified consent is enabled, then enable url-keyed-anonymized data
@@ -389,6 +369,36 @@
   DISALLOW_COPY_AND_ASSIGN(UkmEnabledChecker);
 };
 
+// Test the reporting of the synced user's birth year and gender.
+class UkmBrowserTestWithDemographics
+    : public UkmBrowserTestBase,
+      public testing::WithParamInterface<test::DemographicsTestParams> {
+ public:
+  UkmBrowserTestWithDemographics() : UkmBrowserTestBase() {
+    test::DemographicsTestParams param = GetParam();
+    if (param.enable_feature) {
+      scoped_feature_list_.InitWithFeatures(
+          // enabled_features
+          {DemographicMetricsProvider::kDemographicMetricsReporting,
+           ukm::UkmService::kReportUserNoisedUserBirthYearAndGender},
+          // disabled_features
+          {});
+    } else {
+      scoped_feature_list_.InitWithFeatures(
+          // enabled_features
+          {},
+          // disabled_features
+          {DemographicMetricsProvider::kDemographicMetricsReporting,
+           ukm::UkmService::kReportUserNoisedUserBirthYearAndGender});
+    }
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+
+  DISALLOW_COPY_AND_ASSIGN(UkmBrowserTestWithDemographics);
+};
+
 // Make sure that UKM is disabled while an incognito window is open.
 // Keep in sync with UkmTest.testRegularPlusIncognitoCheck in
 // chrome/android/javatests/src/org/chromium/chrome/browser/metrics/
@@ -579,6 +589,76 @@
   CloseBrowserSynchronously(sync_browser);
 }
 
+// TODO(crbug/1016118): Add the remaining test cases.
+IN_PROC_BROWSER_TEST_P(UkmBrowserTestWithDemographics,
+                       AddSyncedUserBirthYearAndGenderToProtoData) {
+  test::DemographicsTestParams param = GetParam();
+  MetricsConsentOverride metrics_consent(true);
+
+  base::HistogramTester histogram;
+
+  const int test_birth_year =
+      test::UpdateNetworkTimeAndGetMinimalEligibleBirthYear();
+  const UserDemographicsProto::Gender test_gender =
+      UserDemographicsProto::GENDER_FEMALE;
+
+  // Add the test synced user birth year and gender priority prefs to the sync
+  // server data.
+  test::AddUserBirthYearAndGenderToSyncServer(GetFakeServer()->AsWeakPtr(),
+                                              test_birth_year, test_gender);
+
+  Profile* test_profile = ProfileManager::GetActiveUserProfile();
+  std::unique_ptr<ProfileSyncServiceHarness> harness =
+      EnableSyncForProfile(test_profile);
+
+  // Make sure that there is only one Profile to allow reporting the user's
+  // birth year and gender.
+  ASSERT_EQ(1, num_clients());
+
+  Browser* sync_browser = CreateBrowser(test_profile);
+  EXPECT_TRUE(ukm_enabled());
+  uint64_t original_client_id = client_id();
+  EXPECT_NE(0U, original_client_id);
+
+  // Log UKM metrics report.
+  BuildAndStoreUkmLog();
+  EXPECT_TRUE(HasUnsentUkmLogs());
+
+  // Check the log's content and the histogram.
+  ukm::Report report = GetUkmReport();
+  if (param.expect_reported_demographics) {
+    EXPECT_EQ(test::GetNoisedBirthYear(test_birth_year, *test_profile),
+              report.user_demographics().birth_year());
+    EXPECT_EQ(test_gender, report.user_demographics().gender());
+    histogram.ExpectUniqueSample("UKM.UserDemographics.Status",
+                                 syncer::UserDemographicsStatus::kSuccess, 1);
+  } else {
+    EXPECT_FALSE(report.has_user_demographics());
+    histogram.ExpectTotalCount("UKM.UserDemographics.Status", /*count=*/0);
+  }
+
+  harness->service()->GetUserSettings()->SetSyncRequested(false);
+  CloseBrowserSynchronously(sync_browser);
+}
+
+#if defined(OS_CHROMEOS)
+// Cannot test for the enabled feature on Chrome OS because there are always
+// multiple profiles.
+static const auto kDemographicsTestParams = testing::Values(
+    test::DemographicsTestParams{/*enable_feature=*/false,
+                                 /*expect_reported_demographics=*/false});
+#else
+static const auto kDemographicsTestParams = testing::Values(
+    test::DemographicsTestParams{/*enable_feature=*/false,
+                                 /*expect_reported_demographics=*/false},
+    test::DemographicsTestParams{/*enable_feature=*/true,
+                                 /*expect_reported_demographics=*/true});
+#endif
+
+INSTANTIATE_TEST_SUITE_P(,
+                         UkmBrowserTestWithDemographics,
+                         kDemographicsTestParams);
+
 // Verifies that network provider attaches effective connection type correctly
 // to the UKM report.
 IN_PROC_BROWSER_TEST_F(UkmBrowserTest, NetworkProviderPopulatesSystemProfile) {
@@ -903,8 +983,8 @@
   // Need to set the Metrics Default to OPT_OUT to trigger MetricsReporting.
   DCHECK(g_browser_process);
   PrefService* local_state = g_browser_process->local_state();
-  metrics::ForceRecordMetricsReportingDefaultState(
-      local_state, metrics::EnableMetricsDefault::OPT_OUT);
+  ForceRecordMetricsReportingDefaultState(local_state,
+                                          EnableMetricsDefault::OPT_OUT);
   // Verify that kMetricsReportingFeature is disabled (i.e. other metrics
   // services will be sampled out).
   EXPECT_FALSE(
@@ -967,7 +1047,7 @@
   // transport mode.
   Profile* profile = ProfileManager::GetActiveUserProfile();
   std::unique_ptr<ProfileSyncServiceHarness> harness =
-      InitializeProfileForSync(profile);
+      test::InitializeProfileForSync(profile, GetFakeServer()->AsWeakPtr());
   syncer::SyncService* sync_service =
       ProfileSyncServiceFactory::GetForProfile(profile);
 
diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc
index 3adf99a..256f03fd 100644
--- a/chrome/browser/net/profile_network_context_service.cc
+++ b/chrome/browser/net/profile_network_context_service.cc
@@ -12,6 +12,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/metrics/field_trial.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_split.h"
@@ -94,6 +95,9 @@
 
 bool* g_discard_domain_reliability_uploads_for_testing = nullptr;
 
+const char kHttpCacheFinchExperimentGroups[] =
+    "profile_network_context_service.http_cache_finch_experiment_groups";
+
 std::vector<std::string> TranslateStringArray(const base::ListValue* list) {
   std::vector<std::string> strings;
   for (const base::Value& value : *list) {
@@ -344,6 +348,10 @@
   registry->RegisterIntegerPref(
       prefs::kAmbientAuthenticationInPrivateModesEnabled,
       static_cast<int>(net::AmbientAuthAllowedProfileTypes::REGULAR_ONLY));
+
+  // For information about whether to reset the HTTP Cache or not, store the
+  // groups for all the relevant experiments.  Initially unknown status for all.
+  registry->RegisterStringPref(kHttpCacheFinchExperimentGroups, "NoneNoneNone");
 }
 
 void ProfileNetworkContextService::DisableQuicIfNotAllowed() {
@@ -592,6 +600,30 @@
 #endif
 }
 
+bool GetHttpCacheBackendResetParam(PrefService* local_state) {
+  // Get the field trial groups.  If the server cannot be reached, then
+  // this corresponds to "None" for each experiment.
+  base::FieldTrial* field_trial = base::FeatureList::GetFieldTrial(
+      net::features::kSplitCacheByNetworkIsolationKey);
+  std::string current_field_trial_status =
+      (field_trial ? field_trial->group_name() : "None");
+  field_trial = base::FeatureList::GetFieldTrial(
+      net::features::kAppendFrameOriginToNetworkIsolationKey);
+  current_field_trial_status +=
+      (field_trial ? field_trial->group_name() : "None");
+  field_trial = base::FeatureList::GetFieldTrial(
+      net::features::kUseRegistrableDomainInNetworkIsolationKey);
+  current_field_trial_status +=
+      (field_trial ? field_trial->group_name() : "None");
+
+  std::string previous_field_trial_status =
+      local_state->GetString(kHttpCacheFinchExperimentGroups);
+  local_state->SetString(kHttpCacheFinchExperimentGroups,
+                         current_field_trial_status);
+
+  return current_field_trial_status != previous_field_trial_status;
+}
+
 network::mojom::NetworkContextParamsPtr
 ProfileNetworkContextService::CreateNetworkContextParams(
     bool in_memory,
@@ -803,6 +835,9 @@
           ->GetOriginAccessList()
           .CreateCorsOriginAccessPatternsList();
 
+  network_context_params->reset_http_cache_backend =
+      GetHttpCacheBackendResetParam(g_browser_process->local_state());
+
   return network_context_params;
 }
 
diff --git a/chrome/browser/net/profile_network_context_service_browsertest.cc b/chrome/browser/net/profile_network_context_service_browsertest.cc
index d187abb..54f6dffa 100644
--- a/chrome/browser/net/profile_network_context_service_browsertest.cc
+++ b/chrome/browser/net/profile_network_context_service_browsertest.cc
@@ -16,9 +16,12 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
 #include "base/threading/thread_restrictions.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
+#include "chrome/browser/metrics/subprocess_metrics_provider.h"
 #include "chrome/browser/net/profile_network_context_service.h"
 #include "chrome/browser/net/profile_network_context_service_factory.h"
 #include "chrome/browser/policy/policy_test_utils.h"
@@ -43,6 +46,7 @@
 #include "content/public/common/content_features.h"
 #include "content/public/test/simple_url_loader_test_helper.h"
 #include "mojo/public/cpp/system/data_pipe_utils.h"
+#include "net/base/features.h"
 #include "net/base/load_flags.h"
 #include "net/http/http_auth_preferences.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
@@ -75,13 +79,12 @@
 // Most tests for this class are in NetworkContextConfigurationBrowserTest.
 class ProfileNetworkContextServiceBrowsertest : public InProcessBrowserTest {
  public:
-  ProfileNetworkContextServiceBrowsertest() {
-    EXPECT_TRUE(embedded_test_server()->Start());
-  }
+  ProfileNetworkContextServiceBrowsertest() = default;
 
-  ~ProfileNetworkContextServiceBrowsertest() override {}
+  ~ProfileNetworkContextServiceBrowsertest() override = default;
 
   void SetUpOnMainThread() override {
+    EXPECT_TRUE(embedded_test_server()->Start());
     loader_factory_ = content::BrowserContext::GetDefaultStoragePartition(
                           browser()->profile())
                           ->GetURLLoaderFactoryForBrowserProcess()
@@ -160,6 +163,83 @@
   EXPECT_TRUE(base::Contains(encodings, "br"));
 }
 
+class ProfileNetworkContextServiceCacheSameBrowsertest
+    : public ProfileNetworkContextServiceBrowsertest {
+ public:
+  ProfileNetworkContextServiceCacheSameBrowsertest() = default;
+  ~ProfileNetworkContextServiceCacheSameBrowsertest() override = default;
+
+  void SetUp() override {
+    scoped_feature_list_.InitWithFeatures(
+        {}, {net::features::kSplitCacheByNetworkIsolationKey,
+             net::features::kAppendFrameOriginToNetworkIsolationKey,
+             net::features::kUseRegistrableDomainInNetworkIsolationKey});
+    ProfileNetworkContextServiceBrowsertest::SetUp();
+  }
+
+  void CheckCacheNotReset() {
+    content::FetchHistogramsFromChildProcesses();
+    SubprocessMetricsProvider::MergeHistogramDeltasForTesting();
+    // Some tests load the cache multiple times, so compare to zero.
+    EXPECT_GT(histograms_.GetBucketCount("HttpCache.HardReset", false), 0);
+    // Make sure it's never reset.
+    EXPECT_EQ(histograms_.GetBucketCount("HttpCache.HardReset", true), 0);
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+  base::HistogramTester histograms_;
+};
+
+IN_PROC_BROWSER_TEST_F(ProfileNetworkContextServiceCacheSameBrowsertest,
+                       TestCacheResetParameter) {
+  // At this point, we have already called the initialization once on startup.
+  // Verify that we have the correct values in the local_state.
+  PrefService* local_state = g_browser_process->local_state();
+  DCHECK_EQ(
+      local_state->GetString(
+          "profile_network_context_service.http_cache_finch_experiment_groups"),
+      "NoneNoneNone");
+
+  CheckCacheNotReset();
+}
+
+class ProfileNetworkContextServiceCacheChangeBrowsertest
+    : public ProfileNetworkContextServiceBrowsertest {
+ public:
+  ProfileNetworkContextServiceCacheChangeBrowsertest() {
+    scoped_feature_list_.InitWithFeaturesAndParameters(
+        {{net::features::kAppendFrameOriginToNetworkIsolationKey, {}}},
+        {net::features::kSplitCacheByNetworkIsolationKey,
+         net::features::kUseRegistrableDomainInNetworkIsolationKey});
+  }
+  ~ProfileNetworkContextServiceCacheChangeBrowsertest() override = default;
+
+  void CheckCacheReset() {
+    content::FetchHistogramsFromChildProcesses();
+    SubprocessMetricsProvider::MergeHistogramDeltasForTesting();
+    // Some tests load the cache multiple times, but should only be reset once.
+    EXPECT_EQ(histograms_.GetBucketCount("HttpCache.HardReset", true), 1);
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+  base::HistogramTester histograms_;
+};
+
+IN_PROC_BROWSER_TEST_F(ProfileNetworkContextServiceCacheChangeBrowsertest,
+                       TestCacheResetParameter) {
+  // At this point, we have already called the initialization once on startup.
+  // Verify that we have the correct values in the local_state.
+  PrefService* local_state = g_browser_process->local_state();
+  DCHECK_EQ(
+      local_state->GetString(
+          "profile_network_context_service.http_cache_finch_experiment_groups"),
+      "Nonescoped_feature_list_trial_groupNone");
+
+  CheckCacheReset();
+}
+
 enum class AmbientAuthProfileBit {
   INCOGNITO = 1,
   GUEST = 2,
diff --git a/chrome/browser/notifications/notification_platform_bridge_android_unittest.cc b/chrome/browser/notifications/notification_platform_bridge_android_unittest.cc
new file mode 100644
index 0000000..41d85da
--- /dev/null
+++ b/chrome/browser/notifications/notification_platform_bridge_android_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/NotificationPlatformBridgeUnitTest_jni.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using base::android::AttachCurrentThread;
+
+class NotificationPlatformBridgeUnitTest : public ::testing::Test {
+ public:
+  NotificationPlatformBridgeUnitTest()
+      : j_test_(Java_NotificationPlatformBridgeUnitTest_Constructor(
+            AttachCurrentThread())) {}
+
+  const base::android::ScopedJavaGlobalRef<jobject>& j_test() {
+    return j_test_;
+  }
+
+ private:
+  base::android::ScopedJavaGlobalRef<jobject> j_test_;
+};
+
+JAVA_TESTS(NotificationPlatformBridgeUnitTest, j_test())
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac.h b/chrome/browser/notifications/notification_platform_bridge_mac.h
index 8622be0..0529ac9 100644
--- a/chrome/browser/notifications/notification_platform_bridge_mac.h
+++ b/chrome/browser/notifications/notification_platform_bridge_mac.h
@@ -53,6 +53,9 @@
   // when a notification gets activated.
   static bool VerifyNotificationData(NSDictionary* response) WARN_UNUSED_RESULT;
 
+  // Returns if alerts are supported on this machine.
+  static bool SupportsAlerts();
+
  private:
   // Cocoa class that receives callbacks from the NSUserNotificationCenter.
   base::scoped_nsobject<NotificationCenterDelegate> delegate_;
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac.mm b/chrome/browser/notifications/notification_platform_bridge_mac.mm
index 9b28d69..989a3aa 100644
--- a/chrome/browser/notifications/notification_platform_bridge_mac.mm
+++ b/chrome/browser/notifications/notification_platform_bridge_mac.mm
@@ -23,6 +23,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/system/sys_info.h"
 #include "base/task/post_task.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/notifications/notification_common.h"
@@ -123,10 +124,7 @@
 
 bool IsPersistentNotification(
     const message_center::Notification& notification) {
-  // TODO(crbug.com/1007418): Remove this and find a way to show alert style
-  // notifications in 10.15 and above. At least show them as banners until then
-  // as a temporary workaround.
-  if (base::mac::IsAtLeastOS10_15())
+  if (!NotificationPlatformBridgeMac::SupportsAlerts())
     return false;
 
   return notification.never_timeout() ||
@@ -174,6 +172,19 @@
 
   return etldplusone;
 }
+
+// Implements the version check to determine if alerts are supported. Do not
+// call this method directly as SysInfo::OperatingSystemVersionNumbers might be
+// an expensive call. Instead use NotificationPlatformBridgeMac::SupportsAlerts
+// which caches this value.
+bool SupportsAlertsImpl() {
+  int32_t major, minor, bugfix;
+  base::SysInfo::OperatingSystemVersionNumbers(&major, &minor, &bugfix);
+  // Allow alerts on all versions except 10.15.0, 10.15.1 & 10.15.2.
+  // See crbug.com/1007418 for details.
+  return major != 10 || minor != 15 || bugfix > 2;
+}
+
 }  // namespace
 
 // A Cocoa class that represents the delegate of NSUserNotificationCenter and
@@ -462,6 +473,13 @@
   return true;
 }
 
+// static
+bool NotificationPlatformBridgeMac::SupportsAlerts() {
+  // Cache result as SysInfo::OperatingSystemVersionNumbers might be expensive.
+  static bool supports_alerts = SupportsAlertsImpl();
+  return supports_alerts;
+}
+
 // /////////////////////////////////////////////////////////////////////////////
 @implementation NotificationCenterDelegate
 - (void)userNotificationCenter:(NSUserNotificationCenter*)center
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm b/chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm
index 7c92cb1d..f7f66f9 100644
--- a/chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm
+++ b/chrome/browser/notifications/notification_platform_bridge_mac_unittest.mm
@@ -281,8 +281,7 @@
 }
 
 TEST_F(NotificationPlatformBridgeMacTest, TestDisplayProgress) {
-  // TODO(crbug.com/1007418): Enable this when we support alerts on 10.15 again.
-  if (base::mac::IsAtLeastOS10_15())
+  if (!NotificationPlatformBridgeMac::SupportsAlerts())
     return;
 
   std::unique_ptr<Notification> notification =
@@ -362,8 +361,7 @@
 }
 
 TEST_F(NotificationPlatformBridgeMacTest, TestDisplayAlert) {
-  // TODO(crbug.com/1007418): Enable this when we support alerts on 10.15 again.
-  if (base::mac::IsAtLeastOS10_15())
+  if (!NotificationPlatformBridgeMac::SupportsAlerts())
     return;
 
   std::unique_ptr<Notification> alert =
@@ -378,8 +376,7 @@
 }
 
 TEST_F(NotificationPlatformBridgeMacTest, TestDisplayBannerAndAlert) {
-  // TODO(crbug.com/1007418): Enable this when we support alerts on 10.15 again.
-  if (base::mac::IsAtLeastOS10_15())
+  if (!NotificationPlatformBridgeMac::SupportsAlerts())
     return;
 
   std::unique_ptr<Notification> alert =
@@ -398,8 +395,7 @@
 }
 
 TEST_F(NotificationPlatformBridgeMacTest, TestCloseAlert) {
-  // TODO(crbug.com/1007418): Enable this when we support alerts on 10.15 again.
-  if (base::mac::IsAtLeastOS10_15())
+  if (!NotificationPlatformBridgeMac::SupportsAlerts())
     return;
 
   std::unique_ptr<Notification> alert =
@@ -417,8 +413,7 @@
 }
 
 TEST_F(NotificationPlatformBridgeMacTest, TestQuitRemovesBannersAndAlerts) {
-  // TODO(crbug.com/1007418): Enable this when we support alerts on 10.15 again.
-  if (base::mac::IsAtLeastOS10_15())
+  if (!NotificationPlatformBridgeMac::SupportsAlerts())
     return;
 
   std::unique_ptr<Notification> notification = CreateBanner(
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
index 8170d66..8d8ba10 100644
--- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc
@@ -292,24 +292,6 @@
         timing.paint_timing->first_meaningful_paint.value().InMilliseconds());
   }
   const page_load_metrics::ContentfulPaintTimingInfo&
-      main_frame_largest_image_paint =
-          largest_contentful_paint_handler_.MainFrameLargestImagePaint();
-  if (!main_frame_largest_image_paint.IsEmpty() &&
-      WasStartedInForegroundOptionalEventInForeground(
-          main_frame_largest_image_paint.Time(), GetDelegate())) {
-    builder.SetExperimental_PaintTiming_NavigationToLargestImagePaint(
-        timing.paint_timing->largest_image_paint.value().InMilliseconds());
-  }
-  const page_load_metrics::ContentfulPaintTimingInfo&
-      main_frame_largest_text_paint =
-          largest_contentful_paint_handler_.MainFrameLargestTextPaint();
-  if (!main_frame_largest_text_paint.IsEmpty() &&
-      WasStartedInForegroundOptionalEventInForeground(
-          main_frame_largest_text_paint.Time(), GetDelegate())) {
-    builder.SetExperimental_PaintTiming_NavigationToLargestTextPaint(
-        timing.paint_timing->largest_text_paint.value().InMilliseconds());
-  }
-  const page_load_metrics::ContentfulPaintTimingInfo&
       main_frame_largest_contentful_paint =
           largest_contentful_paint_handler_.MainFrameLargestContentfulPaint();
   if (!main_frame_largest_contentful_paint.IsEmpty() &&
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
index 3ced9fba..5a8755f 100644
--- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc
@@ -281,8 +281,7 @@
                                                           GURL(kTestUrl1));
     tester()->test_ukm_recorder().ExpectEntryMetric(
         kv.second.get(),
-        PageLoad::kExperimental_PaintTiming_NavigationToLargestImagePaintName,
-        600);
+        PageLoad::kPaintTiming_NavigationToLargestContentfulPaintName, 600);
     EXPECT_TRUE(tester()->test_ukm_recorder().EntryHasMetric(
         kv.second.get(), PageLoad::kPageTiming_ForegroundDurationName));
   }
@@ -314,7 +313,7 @@
   for (const auto& kv : merged_entries) {
     EXPECT_FALSE(tester()->test_ukm_recorder().EntryHasMetric(
         kv.second.get(),
-        PageLoad::kExperimental_PaintTiming_NavigationToLargestImagePaintName));
+        PageLoad::kPaintTiming_NavigationToLargestContentfulPaintName));
   }
 }
 
@@ -344,10 +343,7 @@
   for (const auto& kv : merged_entries) {
     EXPECT_FALSE(tester()->test_ukm_recorder().EntryHasMetric(
         kv.second.get(),
-        PageLoad::kExperimental_PaintTiming_NavigationToLargestImagePaintName));
-    EXPECT_FALSE(tester()->test_ukm_recorder().EntryHasMetric(
-        kv.second.get(),
-        PageLoad::kExperimental_PaintTiming_NavigationToLargestTextPaintName));
+        PageLoad::kPaintTiming_NavigationToLargestContentfulPaintName));
   }
 }
 
@@ -388,12 +384,7 @@
                                                           GURL(kTestUrl1));
     tester()->test_ukm_recorder().ExpectEntryMetric(
         kv.second.get(),
-        PageLoad::kExperimental_PaintTiming_NavigationToLargestImagePaintName,
-        600);
-    tester()->test_ukm_recorder().ExpectEntryMetric(
-        kv.second.get(),
-        PageLoad::kExperimental_PaintTiming_NavigationToLargestTextPaintName,
-        600);
+        PageLoad::kPaintTiming_NavigationToLargestContentfulPaintName, 600);
     EXPECT_TRUE(tester()->test_ukm_recorder().EntryHasMetric(
         kv.second.get(), PageLoad::kPageTiming_ForegroundDurationName));
   }
@@ -424,8 +415,7 @@
                                                           GURL(kTestUrl1));
     tester()->test_ukm_recorder().ExpectEntryMetric(
         kv.second.get(),
-        PageLoad::kExperimental_PaintTiming_NavigationToLargestTextPaintName,
-        600);
+        PageLoad::kPaintTiming_NavigationToLargestContentfulPaintName, 600);
     EXPECT_TRUE(tester()->test_ukm_recorder().EntryHasMetric(
         kv.second.get(), PageLoad::kPageTiming_ForegroundDurationName));
   }
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 cc7e607..575ec07 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
@@ -49,7 +49,17 @@
 
     /** Whether Autofill Assistant is enabled */
     public static final String AUTOFILL_ASSISTANT_ENABLED = "autofill_assistant_switch";
+    /** Whether the Autofill Assistant onboarding has been accepted. */
+    public static final String AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED =
+            "AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED";
+    /**
+     * LEGACY preference indicating whether "do not show again" was checked in the autofill
+     * assistant onboarding
+     */
+    public static final String AUTOFILL_ASSISTANT_SKIP_INIT_SCREEN =
+            "AUTOFILL_ASSISTANT_SKIP_INIT_SCREEN";
 
+    public static final String BOOKMARKS_LAST_MODIFIED_FOLDER_ID = "last_bookmark_folder_id";
     public static final String BOOKMARKS_LAST_USED_URL = "enhanced_bookmark_last_used_url";
     public static final String BOOKMARKS_LAST_USED_PARENT =
             "enhanced_bookmark_last_used_parent_folder";
@@ -392,6 +402,11 @@
     public static final String HOMEPAGE_LOCATION_POLICY = "Chrome.Policy.HomepageLocation";
 
     /**
+     * Key for UUID-based generator used for Chrome Invalidations (sync, etc.).
+     */
+    public static final String INVALIDATIONS_UUID_PREF_KEY = "chromium.invalidations.uuid";
+
+    /**
      * When the user is shown a badge that the current Android OS version is unsupported, and they
      * tap it to display the menu (which has additional information), we store the current version
      * of Chrome to this preference to ensure we only show the badge once. The value is cleared
@@ -457,6 +472,10 @@
     public static final String SIGNIN_PROMO_SETTINGS_PERSONALIZED_DISMISSED =
             "settings_personalized_signin_promo_dismissed";
 
+    public static final String SNAPSHOT_DATABASE_REMOVED = "snapshot_database_removed";
+
+    public static final String SYNC_SESSIONS_UUID = "chromium.sync.sessions.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.
@@ -582,6 +601,9 @@
         return Arrays.asList(
                 ACCESSIBILITY_TAB_SWITCHER,
                 AUTOFILL_ASSISTANT_ENABLED,
+                AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED,
+                AUTOFILL_ASSISTANT_SKIP_INIT_SCREEN,
+                BOOKMARKS_LAST_MODIFIED_FOLDER_ID,
                 BOOKMARKS_LAST_USED_URL,
                 BOOKMARKS_LAST_USED_PARENT,
                 CHROME_DEFAULT_BROWSER,
@@ -665,6 +687,7 @@
                 HOMEPAGE_CUSTOM_URI,
                 HOMEPAGE_ENABLED,
                 HOMEPAGE_USE_DEFAULT_URI,
+                INVALIDATIONS_UUID_PREF_KEY,
                 LATEST_UNSUPPORTED_VERSION,
                 OFFLINE_INDICATOR_V2_ENABLED,
                 PRIVACY_ALLOW_PRERENDER_OLD,
@@ -684,7 +707,9 @@
                 SIGNIN_PROMO_NTP_PROMO_SUPPRESSION_PERIOD_START,
                 SIGNIN_PROMO_PERSONALIZED_DECLINED,
                 SIGNIN_PROMO_SETTINGS_PERSONALIZED_DISMISSED,
+                SNAPSHOT_DATABASE_REMOVED,
                 START_SURFACE_SINGLE_PANE_ENABLED_KEY,
+                SYNC_SESSIONS_UUID,
                 TWA_DIALOG_NUMBER_OF_DISMISSALS_ON_CLEAR_DATA,
                 TWA_DIALOG_NUMBER_OF_DISMISSALS_ON_UNINSTALL,
                 TWA_DISCLOSURE_ACCEPTED_PACKAGES,
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/SharedPreferencesManager.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/SharedPreferencesManager.java
index e262d38..3c68a4a 100644
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/SharedPreferencesManager.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/SharedPreferencesManager.java
@@ -65,6 +65,11 @@
         return swappedOut;
     }
 
+    @VisibleForTesting
+    public void disableKeyCheckerForTesting() {
+        mKeyChecker = new BaseChromePreferenceKeyChecker();
+    }
+
     /**
      * Observes preference changes.
      */
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index b2a459fb..330f0981 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -218,9 +218,6 @@
 #if BUILDFLAG(ENABLE_FEED_IN_CHROME)
 #include "components/feed/core/pref_names.h"
 #endif  // BUILDFLAG(ENABLE_FEED_IN_CHROME)
-#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
-#include "components/games/core/games_prefs.h"
-#endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
 #else   // defined(OS_ANDROID)
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/enterprise_reporting/prefs.h"
@@ -630,6 +627,8 @@
   network_time::NetworkTimeTracker::RegisterPrefs(registry);
   OriginTrialPrefs::RegisterPrefs(registry);
   password_manager::PasswordManager::RegisterLocalPrefs(registry);
+  policy::BrowserPolicyConnector::RegisterPrefs(registry);
+  policy::PolicyStatisticsCollector::RegisterPrefs(registry);
   PrefProxyConfigTrackerImpl::RegisterPrefs(registry);
   ProfileAttributesEntry::RegisterLocalStatePrefs(registry);
   ProfileInfoCache::RegisterPrefs(registry);
@@ -646,17 +645,10 @@
   update_client::RegisterPrefs(registry);
   variations::VariationsService::RegisterPrefs(registry);
 
-  policy::BrowserPolicyConnector::RegisterPrefs(registry);
-  policy::PolicyStatisticsCollector::RegisterPrefs(registry);
-
 #if BUILDFLAG(ENABLE_BACKGROUND_MODE)
   BackgroundModeManager::RegisterPrefs(registry);
 #endif
 
-#if BUILDFLAG(ENABLE_EXTENSIONS) and defined(OS_CHROMEOS)
-  chromeos::EasyUnlockService::RegisterPrefs(registry);
-#endif
-
 #if BUILDFLAG(ENABLE_PLUGINS)
   PluginsResourceService::RegisterPrefs(registry);
 #endif
@@ -664,19 +656,16 @@
 #if defined(OS_ANDROID)
   ::android::RegisterPrefs(registry);
 #else
-  media_router::RegisterLocalStatePrefs(registry);
+  enterprise_reporting::RegisterLocalStatePrefs(registry);
   // The native GCM is used on Android instead.
   gcm::GCMChannelStatusSyncer::RegisterPrefs(registry);
   gcm::RegisterPrefs(registry);
+  media_router::RegisterLocalStatePrefs(registry);
   metrics::TabStatsTracker::RegisterPrefs(registry);
   RegisterBrowserPrefs(registry);
   StartupBrowserCreator::RegisterLocalStatePrefs(registry);
   task_manager::TaskManagerInterface::RegisterPrefs(registry);
   UpgradeDetector::RegisterPrefs(registry);
-  enterprise_reporting::RegisterLocalStatePrefs(registry);
-#if !defined(OS_CHROMEOS)
-  RegisterDefaultBrowserPromptPrefs(registry);
-#endif  // !defined(OS_CHROMEOS)
 #endif  // !defined(OS_ANDROID)
 
 #if defined(OS_CHROMEOS)
@@ -691,6 +680,7 @@
   chromeos::DemoSetupController::RegisterLocalStatePrefs(registry);
   chromeos::DeviceOAuth2TokenService::RegisterPrefs(registry);
   chromeos::device_settings_cache::RegisterPrefs(registry);
+  chromeos::EasyUnlockService::RegisterPrefs(registry);
   chromeos::echo_offer::RegisterPrefs(registry);
   chromeos::EnableAdbSideloadingScreen::RegisterPrefs(registry);
   chromeos::EnableDebuggingScreenHandler::RegisterPrefs(registry);
@@ -740,7 +730,7 @@
   UpgradeDetectorChromeos::RegisterPrefs(registry);
   syncer::PerUserTopicSubscriptionManager::RegisterPrefs(registry);
   syncer::InvalidatorRegistrarWithMemory::RegisterPrefs(registry);
-#endif
+#endif  // defined(OS_CHROMEOS)
 
 #if defined(OS_MACOSX)
   confirm_quit::RegisterLocalState(registry);
@@ -766,6 +756,10 @@
   registry->RegisterStringPref(kLastWelcomedOSVersion, std::string());
 #endif  // defined(OS_WIN)
 
+#if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
+  RegisterDefaultBrowserPromptPrefs(registry);
+#endif
+
   // Obsolete. See MigrateObsoleteBrowserPrefs().
   registry->RegisterIntegerPref(metrics::prefs::kStabilityExecutionPhase, 0);
 #if !defined(OS_ANDROID)
@@ -870,6 +864,11 @@
   feature_engagement::SessionDurationUpdater::RegisterProfilePrefs(registry);
 #endif
 
+#if BUILDFLAG(ENABLE_OFFLINE_PAGES)
+  offline_pages::OfflineMetricsCollectorImpl::RegisterPrefs(registry);
+  offline_pages::prefetch_prefs::RegisterPrefs(registry);
+#endif
+
 #if BUILDFLAG(ENABLE_PLUGINS)
   PluginInfoHostImpl::RegisterUserPrefs(registry);
 #endif
@@ -879,6 +878,10 @@
   printing::PrintPreviewStickySettings::RegisterProfilePrefs(registry);
 #endif
 
+#if BUILDFLAG(ENABLE_RLZ)
+  ChromeRLZTrackerDelegate::RegisterProfilePrefs(registry);
+#endif
+
 #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
   LocalDiscoveryUI::RegisterProfilePrefs(registry);
 #endif
@@ -890,56 +893,51 @@
 #endif
 
 #if defined(OS_ANDROID)
-  ntp_tiles::PopularSitesImpl::RegisterProfilePrefs(registry);
-  variations::VariationsService::RegisterProfilePrefs(registry);
+  cdm::MediaDrmStorageImpl::RegisterProfilePrefs(registry);
+  explore_sites::HistoryStatisticsReporter::RegisterPrefs(registry);
+  games::prefs::RegisterProfilePrefs(registry);
   GeolocationPermissionContextAndroid::RegisterProfilePrefs(registry);
   KnownInterceptionDisclosureInfoBarDelegate::RegisterProfilePrefs(registry);
+  MediaDrmOriginIdManager::RegisterProfilePrefs(registry);
+  NotificationChannelsProviderAndroid::RegisterProfilePrefs(registry);
+  ntp_snippets::ClickBasedCategoryRanker::RegisterProfilePrefs(registry);
+  ntp_tiles::PopularSitesImpl::RegisterProfilePrefs(registry);
+  OomInterventionDecider::RegisterProfilePrefs(registry);
   PartnerBookmarksShim::RegisterProfilePrefs(registry);
   RecentTabsPagePrefs::RegisterProfilePrefs(registry);
   usage_stats::UsageStatsBridge::RegisterProfilePrefs(registry);
+  variations::VariationsService::RegisterProfilePrefs(registry);
 #if BUILDFLAG(ENABLE_FEED_IN_CHROME)
   feed::RegisterProfilePrefs(registry);
 #endif  // BUILDFLAG(ENABLE_FEED_IN_CHROME)
-#else
+#else   // defined(OS_ANDROID)
   apps::AppServiceProxy::RegisterProfilePrefs(registry);
   AppShortcutManager::RegisterProfilePrefs(registry);
-  DeviceIDFetcher::RegisterProfilePrefs(registry);
-  DevToolsWindow::RegisterProfilePrefs(registry);
-  extensions::CommandService::RegisterProfilePrefs(registry);
-  extensions::TabsCaptureVisibleTabFunction::RegisterProfilePrefs(registry);
-  NewTabUI::RegisterProfilePrefs(registry);
-  PepperFlashSettingsManager::RegisterProfilePrefs(registry);
-  PinnedTabCodec::RegisterProfilePrefs(registry);
-  signin::RegisterProfilePrefs(registry);
-#endif
-
-#if defined(OS_ANDROID)
-  cdm::MediaDrmStorageImpl::RegisterProfilePrefs(registry);
-  MediaDrmOriginIdManager::RegisterProfilePrefs(registry);
-  explore_sites::HistoryStatisticsReporter::RegisterPrefs(registry);
-  ntp_snippets::ClickBasedCategoryRanker::RegisterProfilePrefs(registry);
-  OomInterventionDecider::RegisterProfilePrefs(registry);
-  games::prefs::RegisterProfilePrefs(registry);
-#endif  // defined(OS_ANDROID)
-
-#if !defined(OS_ANDROID)
   browser_sync::ForeignSessionHandler::RegisterProfilePrefs(registry);
   ChromeAuthenticatorRequestDelegate::RegisterProfilePrefs(registry);
+  DeviceIDFetcher::RegisterProfilePrefs(registry);
+  DevToolsWindow::RegisterProfilePrefs(registry);
+  enterprise_reporting::RegisterProfilePrefs(registry);
+  extensions::CommandService::RegisterProfilePrefs(registry);
+  extensions::TabsCaptureVisibleTabFunction::RegisterProfilePrefs(registry);
   first_run::RegisterProfilePrefs(registry);
-  HatsService::RegisterProfilePrefs(registry);
-  InstantService::RegisterProfilePrefs(registry);
-  PromoService::RegisterProfilePrefs(registry);
-  SearchSuggestService::RegisterProfilePrefs(registry);
   gcm::GCMChannelStatusSyncer::RegisterProfilePrefs(registry);
   gcm::RegisterProfilePrefs(registry);
+  HatsService::RegisterProfilePrefs(registry);
+  HistoryUI::RegisterProfilePrefs(registry);
+  InstantService::RegisterProfilePrefs(registry);
   media_router::RegisterProfilePrefs(registry);
+  NewTabUI::RegisterProfilePrefs(registry);
   ntp_tiles::CustomLinksManagerImpl::RegisterProfilePrefs(registry);
+  PepperFlashSettingsManager::RegisterProfilePrefs(registry);
+  PinnedTabCodec::RegisterProfilePrefs(registry);
+  PromoService::RegisterProfilePrefs(registry);
+  SearchSuggestService::RegisterProfilePrefs(registry);
+  settings::SettingsUI::RegisterProfilePrefs(registry);
+  signin::RegisterProfilePrefs(registry);
   StartupBrowserCreator::RegisterProfilePrefs(registry);
-#endif
-
-#if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
-  default_apps::RegisterProfilePrefs(registry);
-#endif
+  UnifiedAutoplayConfig::RegisterProfilePrefs(registry);
+#endif  // defined(OS_ANDROID)
 
 #if defined(OS_CHROMEOS)
   app_list::AppListSyncableService::RegisterProfilePrefs(registry);
@@ -983,12 +981,9 @@
   policy::AppInstallEventLogger::RegisterProfilePrefs(registry);
   policy::AppInstallEventLogManagerWrapper::RegisterProfilePrefs(registry);
   policy::StatusCollector::RegisterProfilePrefs(registry);
+  RegisterChromeLauncherUserPrefs(registry);
   ::onc::RegisterProfilePrefs(registry);
-#endif
-
-#if BUILDFLAG(ENABLE_RLZ)
-  ChromeRLZTrackerDelegate::RegisterProfilePrefs(registry);
-#endif
+#endif  // defined(OS_CHROMEOS)
 
 #if defined(OS_WIN)
   component_updater::RegisterProfilePrefsForSwReporter(registry);
@@ -1003,39 +998,17 @@
   browser_switcher::BrowserSwitcherPrefs::RegisterProfilePrefs(registry);
 #endif
 
-#if defined(TOOLKIT_VIEWS)
-  accessibility_prefs::RegisterInvertBubbleUserPrefs(registry);
-  RegisterBrowserViewProfilePrefs(registry);
-#endif
-
-#if defined(OS_CHROMEOS)
-  RegisterChromeLauncherUserPrefs(registry);
-#endif
-
-#if !defined(OS_ANDROID)
-  HistoryUI::RegisterProfilePrefs(registry);
-  settings::SettingsUI::RegisterProfilePrefs(registry);
-#endif
-
-#if BUILDFLAG(ENABLE_OFFLINE_PAGES)
-  offline_pages::OfflineMetricsCollectorImpl::RegisterPrefs(registry);
-  offline_pages::prefetch_prefs::RegisterPrefs(registry);
-#endif
-
-#if defined(OS_ANDROID)
-  NotificationChannelsProviderAndroid::RegisterProfilePrefs(registry);
-#endif
-
-#if !defined(OS_ANDROID)
-  UnifiedAutoplayConfig::RegisterProfilePrefs(registry);
+#if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
+  default_apps::RegisterProfilePrefs(registry);
 #endif
 
 #if !defined(OS_CHROMEOS) && BUILDFLAG(ENABLE_EXTENSIONS)
   extensions::enterprise_reporting::RegisterProfilePrefs(registry);
 #endif
 
-#if !defined(OS_ANDROID)
-  enterprise_reporting::RegisterProfilePrefs(registry);
+#if defined(TOOLKIT_VIEWS)
+  accessibility_prefs::RegisterInvertBubbleUserPrefs(registry);
+  RegisterBrowserViewProfilePrefs(registry);
 #endif
 
   RegisterProfilePrefsForMigration(registry);
diff --git a/chrome/browser/renderer_preferences_util.cc b/chrome/browser/renderer_preferences_util.cc
index ed00da9..f7ce4ce 100644
--- a/chrome/browser/renderer_preferences_util.cc
+++ b/chrome/browser/renderer_preferences_util.cc
@@ -21,6 +21,7 @@
 #include "third_party/blink/public/mojom/renderer_preferences.mojom.h"
 #include "third_party/blink/public/public_buildflags.h"
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/base/ui_base_features.h"
 
 #if defined(TOOLKIT_VIEWS)
 #include "ui/views/controls/textfield/textfield.h"
@@ -178,6 +179,10 @@
     prefs->allow_cross_origin_auth_prompt =
         local_state->GetBoolean(prefs::kAllowCrossOriginAuthPrompt);
   }
+
+  if (::features::IsFormControlsRefreshEnabled()) {
+    prefs->focus_ring_color = SkColorSetRGB(0x10, 0x10, 0x10);
+  }
 }
 
 }  // namespace renderer_preferences_util
diff --git a/chrome/browser/resource_coordinator/tab_manager.cc b/chrome/browser/resource_coordinator/tab_manager.cc
index 4c635c0..2fa13cd 100644
--- a/chrome/browser/resource_coordinator/tab_manager.cc
+++ b/chrome/browser/resource_coordinator/tab_manager.cc
@@ -268,12 +268,20 @@
   return DiscardTabImpl(LifecycleUnitDiscardReason::EXTERNAL);
 }
 
-void TabManager::LogMemoryAndDiscardTab(LifecycleUnitDiscardReason reason) {
+void TabManager::DiscardTabFromMemoryPressure() {
   DCHECK(!base::FeatureList::IsEnabled(
       performance_manager::features::kUrgentDiscardingFromPerformanceManager));
-  // Discard immediately without waiting for LogMemory() (https://crbug/850545).
-  // Consider removing LogMemory() at all if nobody cares about the log.
-  LogMemory("Tab Discards Memory details");
+
+#if defined(OS_CHROMEOS)
+  // Output a log with per-process memory usage and number of file descriptors,
+  // as well as GPU memory details. Discard happens without waiting for the log
+  // (https://crbug.com/850545) Per comment at
+  // https://crrev.com/c/chromium/src/+/1980282/3#message-d45cc354e7776d7e3d208e22dd2f6bbca3e9eae8,
+  // this log is used to diagnose issues on ChromeOS. Do not output it on other
+  // platforms since it is not used and data shows it can create IO thread hangs
+  // (https://crbug.com/1040522).
+  memory::OomMemoryDetails::Log("Tab Discards Memory details");
+#endif  // defined(OS_CHROMEOS)
 
   // Start handling memory pressure. Suppress further notifications before
   // completion in case a slow handler queues up multiple dispatches of this
@@ -282,12 +290,7 @@
 
   TabDiscardDoneCB tab_discard_done(base::BindOnce(
       &TabManager::OnTabDiscardDone, weak_ptr_factory_.GetWeakPtr()));
-  DiscardTab(reason, std::move(tab_discard_done));
-}
-
-void TabManager::LogMemory(const std::string& title) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  memory::OomMemoryDetails::Log(title);
+  DiscardTab(LifecycleUnitDiscardReason::URGENT, std::move(tab_discard_done));
 }
 
 void TabManager::AddObserver(TabLifecycleObserver* observer) {
@@ -385,7 +388,7 @@
     case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE:
       return;
     case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL:
-      LogMemoryAndDiscardTab(LifecycleUnitDiscardReason::URGENT);
+      DiscardTabFromMemoryPressure();
       return;
   }
   NOTREACHED();
diff --git a/chrome/browser/resource_coordinator/tab_manager.h b/chrome/browser/resource_coordinator/tab_manager.h
index 779ab3d..7722635 100644
--- a/chrome/browser/resource_coordinator/tab_manager.h
+++ b/chrome/browser/resource_coordinator/tab_manager.h
@@ -8,7 +8,6 @@
 #include <stdint.h>
 
 #include <memory>
-#include <string>
 #include <vector>
 
 #include "base/compiler_specific.h"
@@ -104,13 +103,8 @@
   // was discarded.
   content::WebContents* DiscardTabByExtension(content::WebContents* contents);
 
-  // Log memory statistics for the running processes, then discards a tab.
-  // Tab discard happens sometime later, as collecting the statistics touches
-  // multiple threads and takes time.
-  void LogMemoryAndDiscardTab(LifecycleUnitDiscardReason reason);
-
-  // Log memory statistics for the running processes.
-  void LogMemory(const std::string& title);
+  // Discards a tab in response to memory pressure.
+  void DiscardTabFromMemoryPressure();
 
   // TODO(fdoray): Remove these methods. TabManager shouldn't know about tabs.
   // https://crbug.com/775644
diff --git a/chrome/browser/resources/settings/people_page/sync_browser_proxy.js b/chrome/browser/resources/settings/people_page/sync_browser_proxy.js
index 5ae3a43c..b846335 100644
--- a/chrome/browser/resources/settings/people_page/sync_browser_proxy.js
+++ b/chrome/browser/resources/settings/people_page/sync_browser_proxy.js
@@ -98,6 +98,11 @@
   };
 
   /**
+   * @typedef {{requestSucceeded: boolean, historyRecordingEnabled: boolean}}
+   */
+  let HistoryRecordingEnabled;
+
+  /**
    * Key to be used with localStorage.
    * @type {string}
    */
@@ -207,6 +212,13 @@
      * manager in passwords section on page load.
      */
     sendSyncPrefsChanged() {}
+
+    /**
+     * Fetches if history recording is enabled and can be used to provide
+     * personalized experience.
+     * @return {!Promise<!HistoryRecordingEnabled>}
+     */
+    queryIsHistoryRecordingEnabled() {}
   }
 
   /**
@@ -304,6 +316,11 @@
     sendSyncPrefsChanged() {
       chrome.send('SyncPrefsDispatch');
     }
+
+    /** @override */
+    queryIsHistoryRecordingEnabled() {
+      return cr.sendWithPromise('GetIsHistoryRecordingEnabledAndCanBeUsed');
+    }
   }
 
   cr.addSingletonGetter(SyncBrowserProxyImpl);
diff --git a/chrome/browser/resources/settings/people_page/sync_page.html b/chrome/browser/resources/settings/people_page/sync_page.html
index aa881290..ece496c4 100644
--- a/chrome/browser/resources/settings/people_page/sync_page.html
+++ b/chrome/browser/resources/settings/people_page/sync_page.html
@@ -14,6 +14,7 @@
 <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html">
 <link rel="import" href="sync_account_control.html">
+<link rel="import" href="chrome://resources/polymer/v1_0/paper-spinner/paper-spinner-lite.html">
 <link rel="import" href="sync_browser_proxy.html">
 <link rel="import" href="../privacy_page/personalization_options.html">
 <link rel="import" href="../route.html">
@@ -81,6 +82,32 @@
         width: 40px;
       }
 
+      #history-usage-state {
+        text-align: end;
+        vertical-align: middle;
+        width: 36px;
+      }
+
+      #history-usage-row[disabled] {
+        pointer-events: none;
+      }
+
+      #history-usage-row[disabled] > #history-usage-state {
+        text-align: center;
+      }
+
+      #history-usage-row > cr-icon-button.icon-external {
+        margin-inline-start: 1px;
+      }
+
+      #history-usage-state paper-spinner-lite {
+        --paper-spinner-color: var(--google-grey-500);
+        --paper-spinner-stroke-width: 2px;
+        height: var(--cr-icon-size);
+        vertical-align: middle;
+        width: var(--cr-icon-size);
+    }
+
       #toast {
         left: 0;
         z-index: 1;
@@ -168,13 +195,31 @@
             </cr-icon-button>
           </div>
 
-          <a class="inherit-color no-outline list-item" tabindex="-1"
+          <a id="history-usage-row"
+              class="inherit-color no-outline list-item" tabindex="-1"
               target="_blank" href="$i18n{activityControlsUrl}"
-              on-click="onActivityControlsTap_">
+              on-click="onActivityControlsTap_"
+              disabled$="[[hideActivityControlsUrl_]]">
             <div class="start settings-box-text">
               $i18n{personalizeGoogleServicesTitle}
+              <div id="history-usage-hint"
+                  class="secondary" hidden$="[[!isSWAAFetched_(sWAA_)]]">
+                [[getHistoryUsageHint_(sWAA_, syncPrefs.encryptAllData,
+                      syncPrefs.typedUrlsSynced)]]
+              </div>
             </div>
-            <cr-icon-button class="icon-external"></cr-icon-button>
+            <div id="history-usage-state"
+                hidden$="[[!syncSetupFriendlySettings_]]">
+              <paper-spinner-lite
+                  class="last" hidden$="[[!isSWAAFetching_(sWAA_)]]" active>
+              </paper-spinner-lite>
+              <div class="secondary" hidden$="[[!isSWAAFetched_(sWAA_)]]">
+                [[getSWAAStateText_(sWAA_)]]
+              </div>
+            </div>
+            <cr-icon-button class="icon-external"
+                hidden$="[[hideActivityControlsUrl_]]">
+            </cr-icon-button>
           </a>
 
           <a id="syncDashboardLink"
diff --git a/chrome/browser/resources/settings/people_page/sync_page.js b/chrome/browser/resources/settings/people_page/sync_page.js
index 80b678c..2773656b 100644
--- a/chrome/browser/resources/settings/people_page/sync_page.js
+++ b/chrome/browser/resources/settings/people_page/sync_page.js
@@ -15,6 +15,18 @@
 };
 
 /**
+ * All possible states for the sWAA bit.
+ * @enum {string}
+ */
+const sWAAState = {
+  NOT_FETCHED: 'not-fetched',
+  FETCHING: 'fetching',
+  FAILED: 'failed',
+  ON: 'On',
+  OFF: 'Off',
+};
+
+/**
  * @fileoverview
  * 'settings-sync-page' is the settings page containing sync settings.
  */
@@ -24,6 +36,7 @@
   behaviors: [
     WebUIListenerBehavior,
     settings.RouteObserverBehavior,
+    I18nBehavior,
   ],
 
   properties: {
@@ -149,12 +162,55 @@
       computed: 'computeDisableEncryptionOptions_(' +
           'syncPrefs, syncStatus)',
     },
+
+    /**
+     * If sync page friendly settings is enabled.
+     * @private
+     */
+    syncSetupFriendlySettings_: {
+      type: Boolean,
+      value: function() {
+        return loadTimeData.valueExists('syncSetupFriendlySettings') &&
+            loadTimeData.getBoolean('syncSetupFriendlySettings');
+      }
+    },
+
+    /**
+     * Whether history is not synced or data is encrypted.
+     * @private
+     */
+    historyNotSyncedOrEncrypted_: {
+      type: Boolean,
+      computed: 'computeHistoryNotSyncedOrEncrypted_(' +
+          'syncPrefs.encryptAllData, syncPrefs.typedUrlsSynced)',
+    },
+
+    /** @private */
+    hideActivityControlsUrl_: {
+      type: Boolean,
+      computed: 'computeHideActivityControlsUrl_(historyNotSyncedOrEncrypted_)',
+    },
+
+    /** @private */
+    sWAA_: {
+      type: String,
+      value: sWAAState.NOT_FETCHED,
+    },
   },
 
+  observers: ['fetchSWAA_(syncSectionDisabled_, historyNotSyncedOrEncrypted_)'],
+
   /** @private {?settings.SyncBrowserProxy} */
   browserProxy_: null,
 
   /**
+   * The visibility changed callback is used to refetch the |sWAA_| bit when
+   * the page is foregrounded.
+   * @private {?Function}
+   */
+  visibilityChangedCallback_: null,
+
+  /**
    * The beforeunload callback is used to show the 'Leave site' dialog. This
    * makes sure that the user has the chance to go back and confirm the sync
    * opt-in before leaving.
@@ -252,6 +308,113 @@
   },
 
   /**
+   * @return {boolean} Returns true if History sync is off or data is encrypted.
+   * @private
+   */
+  computeHistoryNotSyncedOrEncrypted_: function() {
+    return !!(this.syncPrefs) &&
+        (!this.syncPrefs.typedUrlsSynced || this.syncPrefs.encryptAllData);
+  },
+
+  /**
+   * @return {boolean}
+   * @private
+   */
+  computeHideActivityControlsUrl_: function() {
+    return !!this.syncSetupFriendlySettings_ &&
+        !!this.historyNotSyncedOrEncrypted_;
+  },
+
+
+  /**
+   * Compute and fetch the sWAA bit for sync users. sWAA is 'OFF' if sync
+   * history is off or data is encrypted with custom passphrase. Otherwise,
+   * a query to |Web and App Activity| is needed.
+   * @private
+   */
+  fetchSWAA_: function() {
+    if (settings.getCurrentRoute() !== settings.routes.SYNC) {
+      return;
+    }
+
+    if (!this.syncSetupFriendlySettings_) {
+      return;
+    }
+
+    if (!this.syncPrefs || this.syncPrefs.encryptAllData === undefined ||
+        this.syncPrefs.typedUrlsSynced === undefined) {
+      return;
+    }
+
+    if (this.syncSectionDisabled_) {
+      this.sWAA_ = sWAAState.NOT_FETCHED;
+      return;
+    }
+
+    if (this.historyNotSyncedOrEncrypted_) {
+      this.sWAA_ = sWAAState.OFF;
+      return;
+    }
+
+    if (this.sWAA_ === sWAAState.FETCHING) {
+      return;
+    }
+
+    this.sWAA_ = sWAAState.FETCHING;
+    const updateSWAA = historyRecordingEnabled => {
+      this.sWAA_ = historyRecordingEnabled.requestSucceeded ?
+          (historyRecordingEnabled.historyRecordingEnabled ? sWAAState.ON :
+                                                             sWAAState.OFF) :
+          sWAAState.FAILED;
+    };
+    this.browserProxy_.queryIsHistoryRecordingEnabled().then(updateSWAA);
+  },
+
+  /**
+   * Refetch sWAA when the page is forgrounded, to guarantee the value shown is
+   * most up-to-date.
+   * @private
+   */
+  visibilityHandler_: function() {
+    if (document.visibilityState === 'visible') {
+      this.fetchSWAA_();
+    }
+  },
+
+  /**
+   * Return hint to explain the sWAA state. It is displayed as secondary text in
+   * the history usage row.
+   * @private
+   */
+  getHistoryUsageHint_: function() {
+    if (this.sWAA_ === sWAAState.ON) {
+      return this.i18n('sWAAOnHint');
+    }
+
+    if (this.sWAA_ === sWAAState.OFF) {
+      if (this.syncPrefs.encryptAllData) {
+        return this.i18n('dataEncryptedHint');
+      }
+
+      if (!this.syncPrefs.typedUrlsSynced) {
+        return this.i18n('historySyncOffHint');
+      }
+      return this.i18n('sWAAOffHint');
+    }
+    return '';
+  },
+
+  /**
+   * @private
+   */
+  getSWAAStateText_: function() {
+    if (!this.isSWAAFetched_()) {
+      return '';
+    }
+    return this.i18n(this.sWAA_ === sWAAState.ON ? 'sWAAOn' : 'sWAAOff');
+  },
+
+  /**
    * @return {boolean}
    * @private
    */
@@ -334,10 +497,27 @@
     return expectedPageStatus == this.pageStatus_;
   },
 
+  /**
+   * @return {boolean}
+   * @private
+   */
+  isSWAAFetching_: function() {
+    return this.sWAA_ === sWAAState.FETCHING;
+  },
+
+  /**
+   * @return {boolean}
+   * @private
+   */
+  isSWAAFetched_: function() {
+    return this.sWAA_ === sWAAState.ON || this.sWAA_ === sWAAState.OFF;
+  },
+
   /** @private */
   onNavigateToPage_: function() {
     assert(settings.getCurrentRoute() == settings.routes.SYNC);
-
+    this.sWAA_ = sWAAState.NOT_FETCHED;
+    this.fetchSWAA_();
     if (this.beforeunloadCallback_) {
       return;
     }
@@ -364,6 +544,11 @@
 
     this.unloadCallback_ = this.onNavigateAwayFromPage_.bind(this);
     window.addEventListener('unload', this.unloadCallback_);
+
+    this.visibilityChangedCallback_ = this.visibilityHandler_.bind(this);
+    window.addEventListener('focus', this.visibilityChangedCallback_);
+    document.addEventListener(
+        'visibilitychange', this.visibilityChangedCallback_);
   },
 
   /** @private */
@@ -385,6 +570,13 @@
       window.removeEventListener('unload', this.unloadCallback_);
       this.unloadCallback_ = null;
     }
+
+    if (this.visibilityChangedCallback_) {
+      window.removeEventListener('focus', this.visibilityChangedCallback_);
+      document.removeEventListener(
+          'visibilitychange', this.visibilityChangedCallback_);
+      this.visibilityChangedCallback_ = null;
+    }
   },
 
   /**
@@ -403,6 +595,10 @@
         (this.syncStatus && this.syncStatus.supervisedUser)) {
       this.creatingNewPassphrase_ = false;
     }
+
+    if (this.sWAA_ === sWAAState.FAILED) {
+      this.fetchSWAA_();
+    }
   },
 
   /** @private */
diff --git a/chrome/browser/sessions/session_tab_helper.cc b/chrome/browser/sessions/session_tab_helper.cc
index 9886e495..70f659b 100644
--- a/chrome/browser/sessions/session_tab_helper.cc
+++ b/chrome/browser/sessions/session_tab_helper.cc
@@ -8,6 +8,7 @@
 #include "components/sessions/content/content_serialized_navigation_builder.h"
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/web_contents.h"
+#include "extensions/buildflags/buildflags.h"
 
 #if BUILDFLAG(ENABLE_EXTENSIONS)
 #include "extensions/common/extension_messages.h"
@@ -23,8 +24,7 @@
       session_id_(SessionID::NewUnique()),
       window_id_(SessionID::InvalidValue()) {}
 
-SessionTabHelper::~SessionTabHelper() {
-}
+SessionTabHelper::~SessionTabHelper() = default;
 
 void SessionTabHelper::SetWindowID(const SessionID& id) {
   window_id_ = id;
@@ -114,19 +114,5 @@
   session_service->UpdateTabNavigation(window_id(), session_id(), navigation);
 }
 #endif
-#if BUILDFLAG(ENABLE_EXTENSIONS)
-void SessionTabHelper::SetTabExtensionAppID(
-    const std::string& extension_app_id) {
-#if BUILDFLAG(ENABLE_SESSION_SERVICE)
-  SessionService* session_service = SessionServiceFactory::GetForProfile(
-      Profile::FromBrowserContext(web_contents()->GetBrowserContext()));
-  if (!session_service)
-    return;
-
-  session_service->SetTabExtensionAppID(window_id(), session_id(),
-                                        extension_app_id);
-#endif
-}
-#endif
 
 WEB_CONTENTS_USER_DATA_KEY_IMPL(SessionTabHelper)
diff --git a/chrome/browser/sessions/session_tab_helper.h b/chrome/browser/sessions/session_tab_helper.h
index 0a51079..f3e8182 100644
--- a/chrome/browser/sessions/session_tab_helper.h
+++ b/chrome/browser/sessions/session_tab_helper.h
@@ -10,7 +10,6 @@
 #include "components/sessions/core/session_id.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
-#include "extensions/buildflags/buildflags.h"
 
 // This class keeps the extension API's windowID up to date with the current
 // window of the tab and observes navigation events.
@@ -56,10 +55,6 @@
       const content::EntryChangedDetails& change_details) override;
 #endif
 
-#if BUILDFLAG(ENABLE_EXTENSIONS)
-  void SetTabExtensionAppID(const std::string& extension_app_id);
-#endif
-
  private:
   explicit SessionTabHelper(content::WebContents* contents);
   friend class content::WebContentsUserData<SessionTabHelper>;
diff --git a/chrome/browser/supervised_user/logged_in_user_mixin.h b/chrome/browser/supervised_user/logged_in_user_mixin.h
index a0afc535..807ae2b 100644
--- a/chrome/browser/supervised_user/logged_in_user_mixin.h
+++ b/chrome/browser/supervised_user/logged_in_user_mixin.h
@@ -96,6 +96,10 @@
 
   UserPolicyMixin* GetUserPolicyMixin() { return &user_policy_; }
 
+  LocalPolicyTestServerMixin* GetLocalPolicyTestServerMixin() {
+    return &local_policy_server_;
+  }
+
   policy::UserPolicyTestHelper* GetUserPolicyTestHelper() {
     return &user_policy_helper_;
   }
diff --git a/chrome/browser/sync/trusted_vault_client_android.cc b/chrome/browser/sync/trusted_vault_client_android.cc
index 289a271..6c53226 100644
--- a/chrome/browser/sync/trusted_vault_client_android.cc
+++ b/chrome/browser/sync/trusted_vault_client_android.cc
@@ -62,6 +62,10 @@
   std::move(cb).Run(!!result);
 }
 
+void TrustedVaultClientAndroid::NotifyKeysChanged(JNIEnv* env) {
+  observer_list_.Notify();
+}
+
 std::unique_ptr<TrustedVaultClientAndroid::Subscription>
 TrustedVaultClientAndroid::AddKeysChangedObserver(
     const base::RepeatingClosure& cb) {
diff --git a/chrome/browser/sync/trusted_vault_client_android.h b/chrome/browser/sync/trusted_vault_client_android.h
index 6cb94a2b..6f980d2 100644
--- a/chrome/browser/sync/trusted_vault_client_android.h
+++ b/chrome/browser/sync/trusted_vault_client_android.h
@@ -41,6 +41,9 @@
   // ongoing MarkKeysAsStale() request.
   void MarkKeysAsStaleCompleted(JNIEnv* env, jboolean result);
 
+  // Called from Java to notify that the keys in the vault may have changed.
+  void NotifyKeysChanged(JNIEnv* env);
+
   // TrustedVaultClient implementation.
   std::unique_ptr<Subscription> AddKeysChangedObserver(
       const base::RepeatingClosure& cb) override;
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 082c900..d063bdb0 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -509,7 +509,7 @@
     "//components/signin/public/identity_manager",
     "//components/spellcheck/browser",
     "//components/ssl_errors",
-    "//components/startup_metric_utils/browser:lib",
+    "//components/startup_metric_utils/browser",
     "//components/strings",
     "//components/subresource_filter/content/browser",
     "//components/subresource_filter/core/browser",
diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc
index 6edc6f8..7608ed3 100644
--- a/chrome/browser/ui/ui_features.cc
+++ b/chrome/browser/ui/ui_features.cc
@@ -107,6 +107,11 @@
 const base::Feature kWebUITabStripDemoOptions{
     "WebUITabStripDemoOptions", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enables friendly settings for the |chrome://settings/syncSetup| page.
+// https://crbug.com/1035421.
+const base::Feature kSyncSetupFriendlySettings{
+    "SyncSetupFriendlySettings", base::FEATURE_DISABLED_BY_DEFAULT};
+
 #if defined(OS_CHROMEOS)
 // Enables a warning about connecting to hidden WiFi networks.
 // https://crbug.com/903908
diff --git a/chrome/browser/ui/ui_features.h b/chrome/browser/ui/ui_features.h
index 946b268..ac1cf17 100644
--- a/chrome/browser/ui/ui_features.h
+++ b/chrome/browser/ui/ui_features.h
@@ -54,6 +54,8 @@
 
 extern const base::Feature kWebUITabStripDemoOptions;
 
+extern const base::Feature kSyncSetupFriendlySettings;
+
 #if defined(OS_CHROMEOS)
 extern const base::Feature kHiddenNetworkWarning;
 #endif  // defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
index 882bafa3..492a0be2 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
@@ -525,23 +525,8 @@
 
 BookmarkBarView::BookmarkBarView(Browser* browser, BrowserView* browser_view)
     : AnimationDelegateViews(this),
-      button_listener_(this),
-      menu_button_listener_(this),
-      page_navigator_(nullptr),
-      managed_(nullptr),
-      bookmark_menu_(nullptr),
-      bookmark_drop_menu_(nullptr),
-      other_bookmarks_button_(nullptr),
-      managed_bookmarks_button_(nullptr),
-      apps_page_shortcut_(nullptr),
-      overflow_button_(nullptr),
-      bookmarks_separator_view_(nullptr),
       browser_(browser),
-      browser_view_(browser_view),
-      infobar_visible_(false),
-      size_animation_(this),
-      throbbing_view_(nullptr),
-      bookmark_bar_state_(BookmarkBar::SHOW) {
+      browser_view_(browser_view) {
   SetID(VIEW_ID_BOOKMARK_BAR);
   Init();
 
@@ -1451,21 +1436,17 @@
 
   // Child views are traversed in the order they are added. Make sure the order
   // they are added matches the visual order.
-  apps_page_shortcut_ = CreateAppsPageShortcutButton();
-  AddChildView(apps_page_shortcut_);
+  apps_page_shortcut_ = AddChildView(CreateAppsPageShortcutButton());
 
-  managed_bookmarks_button_ = CreateManagedBookmarksButton();
+  managed_bookmarks_button_ = AddChildView(CreateManagedBookmarksButton());
   // Also re-enabled when the model is loaded.
   managed_bookmarks_button_->SetEnabled(false);
-  AddChildView(managed_bookmarks_button_);
 
-  overflow_button_ = CreateOverflowButton();
-  AddChildView(overflow_button_);
+  overflow_button_ = AddChildView(CreateOverflowButton());
 
-  other_bookmarks_button_ = CreateOtherBookmarksButton();
+  other_bookmarks_button_ = AddChildView(CreateOtherBookmarksButton());
   // We'll re-enable when the model is loaded.
   other_bookmarks_button_->SetEnabled(false);
-  AddChildView(other_bookmarks_button_);
 
   profile_pref_registrar_.Init(browser_->profile()->GetPrefs());
   profile_pref_registrar_.Add(
@@ -1479,8 +1460,8 @@
   apps_page_shortcut_->SetVisible(
       chrome::ShouldShowAppsShortcutInBookmarkBar(browser_->profile()));
 
-  bookmarks_separator_view_ = new ButtonSeparatorView();
-  AddChildView(bookmarks_separator_view_);
+  bookmarks_separator_view_ =
+      AddChildView(std::make_unique<ButtonSeparatorView>());
   UpdateBookmarksSeparatorVisibility();
 
   set_context_menu_controller(this);
@@ -1503,26 +1484,26 @@
   return i - bookmark_buttons_.cbegin();
 }
 
-MenuButton* BookmarkBarView::CreateOtherBookmarksButton() {
+std::unique_ptr<MenuButton> BookmarkBarView::CreateOtherBookmarksButton() {
   // Title is set in Loaded.
-  MenuButton* button =
-      new BookmarkFolderButton(base::string16(), &menu_button_listener_);
+  auto button = std::make_unique<BookmarkFolderButton>(base::string16(),
+                                                       &menu_button_listener_);
   button->SetID(VIEW_ID_OTHER_BOOKMARKS);
   button->set_context_menu_controller(this);
   return button;
 }
 
-MenuButton* BookmarkBarView::CreateManagedBookmarksButton() {
+std::unique_ptr<MenuButton> BookmarkBarView::CreateManagedBookmarksButton() {
   // Title is set in Loaded.
-  MenuButton* button =
-      new BookmarkFolderButton(base::string16(), &menu_button_listener_);
+  auto button = std::make_unique<BookmarkFolderButton>(base::string16(),
+                                                       &menu_button_listener_);
   button->SetID(VIEW_ID_MANAGED_BOOKMARKS);
   button->set_context_menu_controller(this);
   return button;
 }
 
-MenuButton* BookmarkBarView::CreateOverflowButton() {
-  MenuButton* button = new OverflowButton(this, &menu_button_listener_);
+std::unique_ptr<MenuButton> BookmarkBarView::CreateOverflowButton() {
+  auto button = std::make_unique<OverflowButton>(this, &menu_button_listener_);
 
   // The overflow button's image contains an arrow and therefore it is a
   // direction sensitive image and we need to flip it if the UI layout is
@@ -1541,26 +1522,29 @@
   return button;
 }
 
-views::View* BookmarkBarView::CreateBookmarkButton(const BookmarkNode* node) {
+std::unique_ptr<views::View> BookmarkBarView::CreateBookmarkButton(
+    const BookmarkNode* node) {
   int index = node->parent()->GetIndexOf(node);
-  views::LabelButton* button = nullptr;
+  std::unique_ptr<views::LabelButton> button;
   if (node->is_url()) {
-    button =
-        new BookmarkButton(&button_listener_, node->url(), node->GetTitle());
+    button = std::make_unique<BookmarkButton>(&button_listener_, node->url(),
+                                              node->GetTitle());
     button->GetViewAccessibility().OverrideDescription(url_formatter::FormatUrl(
         node->url(), url_formatter::kFormatUrlOmitDefaults,
         net::UnescapeRule::SPACES, nullptr, nullptr, nullptr));
   } else {
-    button = new BookmarkFolderButton(node->GetTitle(), &menu_button_listener_);
+    button = std::make_unique<BookmarkFolderButton>(node->GetTitle(),
+                                                    &menu_button_listener_);
     button->GetViewAccessibility().OverrideDescription("");
   }
-  ConfigureButton(node, button);
-  bookmark_buttons_.insert(bookmark_buttons_.cbegin() + index, button);
+  ConfigureButton(node, button.get());
+  bookmark_buttons_.insert(bookmark_buttons_.cbegin() + index, button.get());
   return button;
 }
 
-views::LabelButton* BookmarkBarView::CreateAppsPageShortcutButton() {
-  views::LabelButton* button = new ShortcutButton(
+std::unique_ptr<views::LabelButton>
+BookmarkBarView::CreateAppsPageShortcutButton() {
+  auto button = std::make_unique<ShortcutButton>(
       &button_listener_,
       l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_APPS_SHORTCUT_NAME));
   button->SetTooltipText(
@@ -2000,8 +1984,9 @@
     LayoutAndPaint();
 }
 
-void BookmarkBarView::InsertBookmarkButtonAtIndex(views::View* button,
-                                                  size_t index) {
+void BookmarkBarView::InsertBookmarkButtonAtIndex(
+    std::unique_ptr<views::View> button,
+    size_t index) {
 // All of the secondary buttons are always in the view hierarchy, even if
 // they're not visible. The order should be: [Apps shortcut] [Managed bookmark
 // button] ..bookmark buttons.. [Overflow chevron] [Other bookmarks]
@@ -2019,7 +2004,7 @@
   DCHECK_EQ(*i++, overflow_button_);
   DCHECK_EQ(*i++, other_bookmarks_button_);
 #endif
-  AddChildViewAt(button,
+  AddChildViewAt(std::move(button),
                  GetIndexOf(managed_bookmarks_button_) + 1 + int{index});
 }
 
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h
index 4f36df04..9362500 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h
@@ -278,19 +278,20 @@
   size_t GetFirstHiddenNodeIndex();
 
   // Creates the button showing the "Other Bookmarks" folder.
-  views::MenuButton* CreateOtherBookmarksButton();
+  std::unique_ptr<views::MenuButton> CreateOtherBookmarksButton();
 
   // Creates the button showing the "Managed Bookmarks" folder.
-  views::MenuButton* CreateManagedBookmarksButton();
+  std::unique_ptr<views::MenuButton> CreateManagedBookmarksButton();
 
   // Creates the button used when not all bookmark buttons fit.
-  views::MenuButton* CreateOverflowButton();
+  std::unique_ptr<views::MenuButton> CreateOverflowButton();
 
   // Creates the button for rendering the specified bookmark node.
-  views::View* CreateBookmarkButton(const bookmarks::BookmarkNode* node);
+  std::unique_ptr<views::View> CreateBookmarkButton(
+      const bookmarks::BookmarkNode* node);
 
   // Creates the button for rendering the apps page shortcut.
-  views::LabelButton* CreateAppsPageShortcutButton();
+  std::unique_ptr<views::LabelButton> CreateAppsPageShortcutButton();
 
   // Configures the button from the specified node. This sets the text,
   // and icon.
@@ -373,77 +374,78 @@
 
   // Inserts |button| in logical position |index| in the bar, maintaining
   // correct focus traversal order.
-  void InsertBookmarkButtonAtIndex(views::View* button, size_t index);
+  void InsertBookmarkButtonAtIndex(std::unique_ptr<views::View> button,
+                                   size_t index);
 
   // Returns the model index for the bookmark associated with |button|,
   // or size_t{-1} if |button| is not a bookmark button from this bar.
   size_t GetIndexForButton(views::View* button);
 
   // These forward button callbacks into ::On{Menu}ButtonPressed.
-  ButtonListener button_listener_;
-  MenuButtonListener menu_button_listener_;
+  ButtonListener button_listener_{this};
+  MenuButtonListener menu_button_listener_{this};
 
   // Needed to react to kShowAppsShortcutInBookmarkBar changes.
   PrefChangeRegistrar profile_pref_registrar_;
 
   // Used for opening urls.
-  content::PageNavigator* page_navigator_;
+  content::PageNavigator* page_navigator_ = nullptr;
 
   // BookmarkModel that owns the entries and folders that are shown in this
   // view. This is owned by the Profile.
-  bookmarks::BookmarkModel* model_;
+  bookmarks::BookmarkModel* model_ = nullptr;
 
   // ManagedBookmarkService. This is owned by the Profile.
-  bookmarks::ManagedBookmarkService* managed_;
+  bookmarks::ManagedBookmarkService* managed_ = nullptr;
 
   // Used to manage showing a Menu, either for the most recently bookmarked
   // entries, or for the starred folder.
-  BookmarkMenuController* bookmark_menu_;
+  BookmarkMenuController* bookmark_menu_ = nullptr;
 
   // Used when showing a menu for drag and drop. That is, if the user drags
   // over a folder this becomes non-null and manages the menu showing the
   // contents of the node.
-  BookmarkMenuController* bookmark_drop_menu_;
+  BookmarkMenuController* bookmark_drop_menu_ = nullptr;
 
   // If non-NULL we're showing a context menu for one of the items on the
   // bookmark bar.
   std::unique_ptr<BookmarkContextMenu> context_menu_;
 
   // Shows the "Other Bookmarks" folder button.
-  views::MenuButton* other_bookmarks_button_;
+  views::MenuButton* other_bookmarks_button_ = nullptr;
 
   // Shows the managed bookmarks entries.
-  views::MenuButton* managed_bookmarks_button_;
+  views::MenuButton* managed_bookmarks_button_ = nullptr;
 
   // Shows the Apps page shortcut.
-  views::LabelButton* apps_page_shortcut_;
+  views::LabelButton* apps_page_shortcut_ = nullptr;
 
   // Used to track drops on the bookmark bar view.
   std::unique_ptr<DropInfo> drop_info_;
 
   // Visible if not all the bookmark buttons fit.
-  views::MenuButton* overflow_button_;
+  views::MenuButton* overflow_button_ = nullptr;
 
   // The individual bookmark buttons.
   std::vector<views::LabelButton*> bookmark_buttons_;
 
-  ButtonSeparatorView* bookmarks_separator_view_;
+  ButtonSeparatorView* bookmarks_separator_view_ = nullptr;
 
   Browser* const browser_;
   BrowserView* browser_view_;
 
   // True if the owning browser is showing an infobar.
-  bool infobar_visible_;
+  bool infobar_visible_ = false;
 
   // Animation controlling showing and hiding of the bar.
-  gfx::SlideAnimation size_animation_;
+  gfx::SlideAnimation size_animation_{this};
 
   // If the bookmark bubble is showing, this is the visible ancestor of the URL.
   // The visible ancestor is either the |other_bookmarks_button_|,
   // |overflow_button_| or a button on the bar.
-  views::Button* throbbing_view_;
+  views::Button* throbbing_view_ = nullptr;
 
-  BookmarkBar::State bookmark_bar_state_;
+  BookmarkBar::State bookmark_bar_state_ = BookmarkBar::SHOW;
 
   base::ObserverList<BookmarkBarViewObserver>::Unchecked observers_;
 
diff --git a/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view_browsertest.cc b/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view_browsertest.cc
index b0f52c4..745fc45 100644
--- a/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view_browsertest.cc
+++ b/chrome/browser/ui/views/crostini/crostini_ansible_software_config_view_browsertest.cc
@@ -218,7 +218,8 @@
   EXPECT_NE(nullptr, ActiveView());
 
   ansible_management_service()->OnApplyAnsiblePlaybookProgress(
-      vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::SUCCEEDED);
+      vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::SUCCEEDED,
+      /*failure_details=*/"");
   base::RunLoop().RunUntilIdle();
 
   EXPECT_TRUE(HasNoView());
@@ -257,7 +258,8 @@
   EXPECT_NE(nullptr, ActiveView());
 
   ansible_management_service()->OnApplyAnsiblePlaybookProgress(
-      vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::FAILED);
+      vm_tools::cicerone::ApplyAnsiblePlaybookProgressSignal::FAILED,
+      /*failure_details=*/"");
   base::RunLoop().RunUntilIdle();
 
   EXPECT_NE(nullptr, ActiveView());
diff --git a/chrome/browser/ui/views/crostini/crostini_app_restart_view.cc b/chrome/browser/ui/views/crostini/crostini_app_restart_view.cc
index d8363ba3..382e5f4 100644
--- a/chrome/browser/ui/views/crostini/crostini_app_restart_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_app_restart_view.cc
@@ -39,10 +39,6 @@
   chrome::RecordDialogCreation(chrome::DialogIdentifier::CROSTINI_APP_RESTART);
 }
 
-int CrostiniAppRestartView::GetDialogButtons() const {
-  return ui::DIALOG_BUTTON_CANCEL | ui::DIALOG_BUTTON_OK;
-}
-
 bool CrostiniAppRestartView::ShouldShowCloseButton() const {
   return false;
 }
diff --git a/chrome/browser/ui/views/crostini/crostini_app_restart_view.h b/chrome/browser/ui/views/crostini/crostini_app_restart_view.h
index 6b56f46..c55893f 100644
--- a/chrome/browser/ui/views/crostini/crostini_app_restart_view.h
+++ b/chrome/browser/ui/views/crostini/crostini_app_restart_view.h
@@ -15,7 +15,6 @@
   static void Show(const ash::ShelfID& id, int64_t display_id);
 
   // views::DialogDelegateView:
-  int GetDialogButtons() const override;
   bool ShouldShowCloseButton() const override;
   bool Accept() override;
   gfx::Size CalculatePreferredSize() const override;
diff --git a/chrome/browser/ui/views/crostini/crostini_app_uninstaller_view.cc b/chrome/browser/ui/views/crostini/crostini_app_uninstaller_view.cc
index b940d6fd..486bf98 100644
--- a/chrome/browser/ui/views/crostini/crostini_app_uninstaller_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_app_uninstaller_view.cc
@@ -39,10 +39,6 @@
       ->Show();
 }
 
-int CrostiniAppUninstallerView::GetDialogButtons() const {
-  return ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL;
-}
-
 base::string16 CrostiniAppUninstallerView::GetWindowTitle() const {
   return l10n_util::GetStringUTF16(
       IDS_CROSTINI_APPLICATION_UNINSTALL_CONFIRM_TITLE);
diff --git a/chrome/browser/ui/views/crostini/crostini_app_uninstaller_view.h b/chrome/browser/ui/views/crostini/crostini_app_uninstaller_view.h
index 74da0cd..0494e1a 100644
--- a/chrome/browser/ui/views/crostini/crostini_app_uninstaller_view.h
+++ b/chrome/browser/ui/views/crostini/crostini_app_uninstaller_view.h
@@ -21,7 +21,6 @@
   static void Show(Profile* profile, const std::string& app_id);
 
   // views::DialogDelegateView:
-  int GetDialogButtons() const override;
   base::string16 GetWindowTitle() const override;
   bool ShouldShowCloseButton() const override;
   bool Accept() override;
diff --git a/chrome/browser/ui/views/crostini/crostini_force_close_view.cc b/chrome/browser/ui/views/crostini/crostini_force_close_view.cc
index cb2c52a..ea37670 100644
--- a/chrome/browser/ui/views/crostini/crostini_force_close_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_force_close_view.cc
@@ -57,10 +57,6 @@
   return ui::ModalType::MODAL_TYPE_WINDOW;
 }
 
-int CrostiniForceCloseView::GetDialogButtons() const {
-  return ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL;
-}
-
 bool CrostiniForceCloseView::ShouldShowCloseButton() const {
   return false;
 }
diff --git a/chrome/browser/ui/views/crostini/crostini_force_close_view.h b/chrome/browser/ui/views/crostini/crostini_force_close_view.h
index 4a3912ef..6cf0af0 100644
--- a/chrome/browser/ui/views/crostini/crostini_force_close_view.h
+++ b/chrome/browser/ui/views/crostini/crostini_force_close_view.h
@@ -35,7 +35,6 @@
   bool Accept() override;
   ui::ModalType GetModalType() const override;
   bool ShouldShowCloseButton() const override;
-  int GetDialogButtons() const override;
   base::string16 GetWindowTitle() const override;
   gfx::Size CalculatePreferredSize() const override;
 
diff --git a/chrome/browser/ui/views/crostini/crostini_package_install_failure_view.cc b/chrome/browser/ui/views/crostini/crostini_package_install_failure_view.cc
index 0ee7710..779283a 100644
--- a/chrome/browser/ui/views/crostini/crostini_package_install_failure_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_package_install_failure_view.cc
@@ -32,10 +32,6 @@
       ->Show();
 }
 
-int CrostiniPackageInstallFailureView::GetDialogButtons() const {
-  return ui::DIALOG_BUTTON_OK;
-}
-
 bool CrostiniPackageInstallFailureView::ShouldShowCloseButton() const {
   return false;
 }
@@ -54,6 +50,7 @@
 
 CrostiniPackageInstallFailureView::CrostiniPackageInstallFailureView(
     const std::string& error_message) {
+  DialogDelegate::set_buttons(ui::DIALOG_BUTTON_OK);
   views::LayoutProvider* provider = views::LayoutProvider::Get();
   SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical,
diff --git a/chrome/browser/ui/views/crostini/crostini_package_install_failure_view.h b/chrome/browser/ui/views/crostini/crostini_package_install_failure_view.h
index 6ae77fe6..cd825b8f 100644
--- a/chrome/browser/ui/views/crostini/crostini_package_install_failure_view.h
+++ b/chrome/browser/ui/views/crostini/crostini_package_install_failure_view.h
@@ -15,7 +15,6 @@
 
   // BubbleDialogDelegateView overrides.
   bool ShouldShowCloseButton() const override;
-  int GetDialogButtons() const override;
   base::string16 GetWindowTitle() const override;
   gfx::Size CalculatePreferredSize() const override;
 
diff --git a/chrome/browser/ui/views/crostini/crostini_uninstaller_view.cc b/chrome/browser/ui/views/crostini/crostini_uninstaller_view.cc
index 27b5f7b1..4a5d0bf 100644
--- a/chrome/browser/ui/views/crostini/crostini_uninstaller_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_uninstaller_view.cc
@@ -50,19 +50,6 @@
   g_crostini_uninstaller_view->GetWidget()->Show();
 }
 
-int CrostiniUninstallerView::GetDialogButtons() const {
-  switch (state_) {
-    case State::PROMPT:
-      return ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL;
-    case State::UNINSTALLING:
-      return ui::DIALOG_BUTTON_NONE;
-    case State::ERROR:
-      return ui::DIALOG_BUTTON_CANCEL;
-  }
-  NOTREACHED();
-  return 0;
-}
-
 base::string16 CrostiniUninstallerView::GetWindowTitle() const {
   const base::string16 device_type = ui::GetChromeOSDeviceName();
   return l10n_util::GetStringUTF16(IDS_CROSTINI_UNINSTALLER_TITLE);
@@ -74,6 +61,7 @@
 
 bool CrostiniUninstallerView::Accept() {
   state_ = State::UNINSTALLING;
+  DialogDelegate::set_buttons(ui::DIALOG_BUTTON_NONE);
   message_label_->SetText(
       l10n_util::GetStringUTF16(IDS_CROSTINI_UNINSTALLER_UNINSTALLING_MESSAGE));
 
@@ -140,6 +128,7 @@
 
 void CrostiniUninstallerView::HandleError(const base::string16& error_message) {
   state_ = State::ERROR;
+  DialogDelegate::set_buttons(ui::DIALOG_BUTTON_CANCEL);
   message_label_->SetVisible(true);
   message_label_->SetText(error_message);
   progress_bar_->SetVisible(false);
diff --git a/chrome/browser/ui/views/crostini/crostini_uninstaller_view.h b/chrome/browser/ui/views/crostini/crostini_uninstaller_view.h
index a33b0ed..d03548c 100644
--- a/chrome/browser/ui/views/crostini/crostini_uninstaller_view.h
+++ b/chrome/browser/ui/views/crostini/crostini_uninstaller_view.h
@@ -34,7 +34,6 @@
   static void Show(Profile* profile);
 
   // views::DialogDelegateView:
-  int GetDialogButtons() const override;
   base::string16 GetWindowTitle() const override;
   bool ShouldShowCloseButton() const override;
   bool Accept() override;
diff --git a/chrome/browser/ui/views/crostini/crostini_update_component_view.cc b/chrome/browser/ui/views/crostini/crostini_update_component_view.cc
index 270a04f1..355fa8e 100644
--- a/chrome/browser/ui/views/crostini/crostini_update_component_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_update_component_view.cc
@@ -46,10 +46,6 @@
   g_crostini_upgrade_view->GetWidget()->Show();
 }
 
-int CrostiniUpdateComponentView::GetDialogButtons() const {
-  return ui::DIALOG_BUTTON_OK;
-}
-
 base::string16 CrostiniUpdateComponentView::GetWindowTitle() const {
   return l10n_util::GetStringUTF16(IDS_CROSTINI_TERMINA_UPDATE_REQUIRED);
 }
@@ -72,6 +68,8 @@
 }
 
 CrostiniUpdateComponentView::CrostiniUpdateComponentView() {
+  DialogDelegate::set_buttons(ui::DIALOG_BUTTON_OK);
+
   views::LayoutProvider* provider = views::LayoutProvider::Get();
   SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical,
diff --git a/chrome/browser/ui/views/crostini/crostini_update_component_view.h b/chrome/browser/ui/views/crostini/crostini_update_component_view.h
index ff5eb58..db1842a 100644
--- a/chrome/browser/ui/views/crostini/crostini_update_component_view.h
+++ b/chrome/browser/ui/views/crostini/crostini_update_component_view.h
@@ -20,7 +20,6 @@
   static void Show(Profile* profile);
 
   // views::DialogDelegateView:
-  int GetDialogButtons() const override;
   base::string16 GetWindowTitle() const override;
   bool ShouldShowCloseButton() const override;
   gfx::Size CalculatePreferredSize() const override;
diff --git a/chrome/browser/ui/views/crostini/crostini_update_filesystem_view.cc b/chrome/browser/ui/views/crostini/crostini_update_filesystem_view.cc
index 34d11664..1124a43 100644
--- a/chrome/browser/ui/views/crostini/crostini_update_filesystem_view.cc
+++ b/chrome/browser/ui/views/crostini/crostini_update_filesystem_view.cc
@@ -90,10 +90,6 @@
   g_crostini_update_filesystem_view_dialog->GetWidget()->Show();
 }
 
-int CrostiniUpdateFilesystemView::GetDialogButtons() const {
-  return ui::DIALOG_BUTTON_OK;
-}
-
 base::string16 CrostiniUpdateFilesystemView::GetWindowTitle() const {
   return l10n_util::GetStringUTF16(IDS_CROSTINI_UPGRADING_LABEL);
 }
@@ -118,6 +114,8 @@
 CrostiniUpdateFilesystemView::CrostiniUpdateFilesystemView() {
   constexpr int kDialogSpacingVertical = 32;
 
+  DialogDelegate::set_buttons(ui::DIALOG_BUTTON_OK);
+
   views::LayoutProvider* provider = views::LayoutProvider::Get();
   SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical,
diff --git a/chrome/browser/ui/views/crostini/crostini_update_filesystem_view.h b/chrome/browser/ui/views/crostini/crostini_update_filesystem_view.h
index 7863d199..4fb7dcc 100644
--- a/chrome/browser/ui/views/crostini/crostini_update_filesystem_view.h
+++ b/chrome/browser/ui/views/crostini/crostini_update_filesystem_view.h
@@ -20,7 +20,6 @@
   static void Show(Profile* profile);
 
   // views::DialogDelegateView:
-  int GetDialogButtons() const override;
   base::string16 GetWindowTitle() const override;
   bool ShouldShowCloseButton() const override;
   gfx::Size CalculatePreferredSize() const override;
diff --git a/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc b/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc
index 71cb631..d79292c6 100644
--- a/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc
@@ -29,6 +29,7 @@
 #include "chrome/browser/chromeos/plugin_vm/plugin_vm_util.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
+#include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h"
 #include "chrome/browser/ui/webui/app_management/app_management.mojom.h"
 #include "chrome/browser/ui/webui/app_management/app_management_page_handler.h"
@@ -118,6 +119,9 @@
   html_source->AddBoolean(
       "showParentalControls",
       chromeos::settings::ShouldShowParentalControls(profile));
+  html_source->AddBoolean(
+      "syncSetupFriendlySettings",
+      base::FeatureList::IsEnabled(::features::kSyncSetupFriendlySettings));
 
   AddSettingsPageUIHandler(
       std::make_unique<::settings::AccessibilityMainHandler>());
diff --git a/chrome/browser/ui/webui/settings/people_handler.cc b/chrome/browser/ui/webui/settings/people_handler.cc
index 6d5442f..4337caf6 100644
--- a/chrome/browser/ui/webui/settings/people_handler.cc
+++ b/chrome/browser/ui/webui/settings/people_handler.cc
@@ -16,6 +16,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "build/build_config.h"
+#include "chrome/browser/history/web_history_service_factory.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_avatar_icon_util.h"
@@ -30,11 +31,14 @@
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/singleton_tabs.h"
+#include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/webui/signin/login_ui_service.h"
 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/autofill/core/common/autofill_prefs.h"
+#include "components/browsing_data/core/history_notice_utils.h"
+#include "components/history/core/browser/web_history_service.h"
 #include "components/prefs/pref_service.h"
 #include "components/signin/core/browser/signin_error_controller.h"
 #include "components/signin/public/base/signin_metrics.h"
@@ -305,6 +309,11 @@
       "SyncPrefsDispatch",
       base::BindRepeating(&PeopleHandler::HandleSyncPrefsDispatch,
                           base::Unretained(this)));
+  web_ui()->RegisterMessageCallback(
+      "GetIsHistoryRecordingEnabledAndCanBeUsed",
+      base::BindRepeating(
+          &PeopleHandler::HandleGetIsHistoryRecordingEnabledAndCanBeUsed,
+          base::Unretained(this)));
 #if defined(OS_CHROMEOS)
   web_ui()->RegisterMessageCallback(
       "AttemptUserExit",
@@ -474,6 +483,36 @@
     ProfileMetrics::LogProfileSyncInfo(ProfileMetrics::SYNC_CHOOSE);
 }
 
+void PeopleHandler::HandleGetIsHistoryRecordingEnabledAndCanBeUsed(
+    const base::ListValue* args) {
+  AllowJavascript();
+  std::string webui_callback_id;
+  CHECK(args->GetString(0, &webui_callback_id));
+
+  DCHECK(base::FeatureList::IsEnabled(features::kSyncSetupFriendlySettings));
+  syncer::SyncService* sync_service = GetSyncService();
+  history::WebHistoryService* history_service =
+      WebHistoryServiceFactory::GetForProfile(profile_);
+
+  browsing_data::IsHistoryRecordingEnabledAndCanBeUsed(
+      sync_service, history_service,
+      base::Bind(&PeopleHandler::OnQueryHistoryRecordingCompletion,
+                 weak_factory_.GetWeakPtr(), webui_callback_id));
+}
+
+void PeopleHandler::OnQueryHistoryRecordingCompletion(
+    const std::string& webui_callback_id,
+    const base::Optional<bool>& history_recording_enabled) {
+  if (!IsJavascriptAllowed())
+    return;
+
+  std::unique_ptr<base::DictionaryValue> status(new base::DictionaryValue);
+  status->SetBoolean("requestSucceeded", history_recording_enabled.has_value());
+  status->SetBoolean("historyRecordingEnabled",
+                     history_recording_enabled.value_or(false));
+  ResolveJavascriptCallback(base::Value(webui_callback_id), *status);
+}
+
 void PeopleHandler::HandleGetStoredAccounts(const base::ListValue* args) {
   CHECK_EQ(1U, args->GetSize());
   const base::Value* callback_id;
diff --git a/chrome/browser/ui/webui/settings/people_handler.h b/chrome/browser/ui/webui/settings/people_handler.h
index 89822fc..921cec5 100644
--- a/chrome/browser/ui/webui/settings/people_handler.h
+++ b/chrome/browser/ui/webui/settings/people_handler.h
@@ -156,6 +156,8 @@
   void HandleShowSetupUI(const base::ListValue* args);
   void HandleAttemptUserExit(const base::ListValue* args);
   void HandleSyncPrefsDispatch(const base::ListValue* args);
+  void HandleGetIsHistoryRecordingEnabledAndCanBeUsed(
+      const base::ListValue* args);
 #if defined(OS_CHROMEOS)
   void HandleRequestPinLoginState(const base::ListValue* args);
 #endif
@@ -181,6 +183,10 @@
   void OnPinLoginAvailable(bool is_available);
 #endif
 
+  void OnQueryHistoryRecordingCompletion(
+      const std::string& webui_callback_id,
+      const base::Optional<bool>& history_recording_enabled);
+
   void HandleGetStoredAccounts(const base::ListValue* args);
   void HandleStartSyncingWithEmail(const base::ListValue* args);
   base::Value GetStoredAccountsList();
@@ -230,9 +236,7 @@
   ScopedObserver<syncer::SyncService, syncer::SyncServiceObserver>
       sync_service_observer_{this};
 
-#if defined(OS_CHROMEOS)
   base::WeakPtrFactory<PeopleHandler> weak_factory_{this};
-#endif
 
   DISALLOW_COPY_AND_ASSIGN(PeopleHandler);
 };
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 7f21de6..1864519e 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -26,6 +26,7 @@
 #include "chrome/browser/signin/account_consistency_mode_manager.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
 #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h"
+#include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/webui/management_ui.h"
 #include "chrome/browser/ui/webui/policy_indicator_localized_strings_provider.h"
 #include "chrome/browser/ui/webui/webui_util.h"
@@ -2231,13 +2232,29 @@
     {"passphraseConfirmationPlaceholder",
      IDS_SETTINGS_PASSPHRASE_CONFIRMATION_PLACEHOLDER},
     {"submitPassphraseButton", IDS_SETTINGS_SUBMIT_PASSPHRASE},
-    {"personalizeGoogleServicesTitle",
-     IDS_SETTINGS_PERSONALIZE_GOOGLE_SERVICES_TITLE},
     {"existingPassphraseTitle", IDS_SETTINGS_EXISTING_PASSPHRASE_TITLE},
     {"enablePaymentsIntegrationCheckboxLabel",
      IDS_AUTOFILL_ENABLE_PAYMENTS_INTEGRATION_CHECKBOX_LABEL},
   };
   AddLocalizedStringsBulk(html_source, kLocalizedStrings);
+  if (base::FeatureList::IsEnabled(features::kSyncSetupFriendlySettings)) {
+    static constexpr webui::LocalizedString
+        kSyncSetupFriendlySettingsStrings[] = {
+            {"personalizeGoogleServicesTitle",
+             IDS_SETTINGS_USE_HISTORY_TO_PERSONALIZE_GOOGLE_SERVICES_TITLE},
+            {"sWAAOn", IDS_SETTINGS_SWAA_ON},
+            {"sWAAOff", IDS_SETTINGS_SWAA_OFF},
+            {"sWAAOnHint", IDS_SETTINGS_SWAA_ON_HINT},
+            {"dataEncryptedHint", IDS_SETTINGS_DATA_ENCRYPTED_HINT},
+            {"historySyncOffHint", IDS_SETTINGS_HISTORY_SYNC_OFF_HINT},
+            {"sWAAOffHint", IDS_SETTINGS_SWAA_OFF_HINT},
+        };
+    AddLocalizedStringsBulk(html_source, kSyncSetupFriendlySettingsStrings);
+  } else {
+    html_source->AddLocalizedString(
+        "personalizeGoogleServicesTitle",
+        IDS_SETTINGS_PERSONALIZE_GOOGLE_SERVICES_TITLE);
+  }
 #if defined(OS_CHROMEOS)
   AddFingerprintStrings(html_source);
 #endif  // OS_CHROMEOS
diff --git a/chrome/browser/ui/webui/settings/settings_ui.cc b/chrome/browser/ui/webui/settings/settings_ui.cc
index c9fb6d6..c2817c4 100644
--- a/chrome/browser/ui/webui/settings/settings_ui.cc
+++ b/chrome/browser/ui/webui/settings/settings_ui.cc
@@ -20,6 +20,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h"
+#include "chrome/browser/ui/ui_features.h"
 #include "chrome/browser/ui/webui/favicon_source.h"
 #include "chrome/browser/ui/webui/managed_ui_handler.h"
 #include "chrome/browser/ui/webui/metrics_handler.h"
@@ -234,6 +235,10 @@
                           base::FeatureList::IsEnabled(
                               password_manager::features::kPasswordImport));
 
+  html_source->AddBoolean(
+      "syncSetupFriendlySettings",
+      base::FeatureList::IsEnabled(features::kSyncSetupFriendlySettings));
+
 #if defined(OS_CHROMEOS)
   html_source->AddBoolean(
       "showParentalControls",
diff --git a/chrome/chrome_cleaner/engines/broker/engine_requests_no_blocking_unittest.cc b/chrome/chrome_cleaner/engines/broker/engine_requests_no_blocking_unittest.cc
index 6a3c45e..b403bd73 100644
--- a/chrome/chrome_cleaner/engines/broker/engine_requests_no_blocking_unittest.cc
+++ b/chrome/chrome_cleaner/engines/broker/engine_requests_no_blocking_unittest.cc
@@ -437,7 +437,9 @@
 };
 
 MULTIPROCESS_TEST_MAIN(EngineRequestsNoBlocking) {
-  base::test::TaskEnvironment task_environment;
+  // COM can't be initialized inside the sandbox.
+  base::test::TaskEnvironment task_environment(
+      base::test::TaskEnvironment::ThreadPoolCOMEnvironment::NONE);
 
   auto child_process = SetupSandboxedChildProcess();
   if (!child_process)
@@ -520,11 +522,6 @@
     : public ::testing::TestWithParam<const char*> {};
 
 TEST_P(EngineRequestsNoBlockingTest, TestRequest) {
-  // All of these tests fail when run on win8 bots so return right away.
-  // TODO(crbug.com/947576): Find out why and re-enable them.
-  if (base::win::GetVersion() == base::win::Version::WIN8)
-    return;
-
   base::test::TaskEnvironment task_environment;
 
   // This event will be shared between the parent and child processes. The
diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/common/extensions/api/_permission_features.json
index 0af7474..c929b37 100644
--- a/chrome/common/extensions/api/_permission_features.json
+++ b/chrome/common/extensions/api/_permission_features.json
@@ -451,6 +451,7 @@
     "platforms": ["chromeos"],
     "whitelist": [
       "7FE4A999359A456C4B0FB7B7AD85CEA29CA50519",  // Login screen APIs test extension
+      "3F5995FE79A861F019C6F093BEF98D73FA9D3A5F",  // Login screen APIs in-sesesion test extension
       "E219EE36A3B40612FD2A8CD6937B03EF0C97D3FE",  // Imprivata (login screen)
       "4DBFC1C52D6660DD90791976DF7FEF7B3D360509",  // Imprivata (login screen) DEV
       "A24DE1B21A67E25FB62AC8491642038FE25DA75B",  // Imprivata (in session)
diff --git a/chrome/common/extensions/api/login.idl b/chrome/common/extensions/api/login.idl
index 4231b217..83ab63e 100644
--- a/chrome/common/extensions/api/login.idl
+++ b/chrome/common/extensions/api/login.idl
@@ -13,7 +13,15 @@
     // Launches a managed guest session if one is set up via the admin console.
     // If there are several managed guest sessions set up, it will launch the
     // first available one.
-    static void launchManagedGuestSession(optional VoidCallback callback);
+    // |password|: If provided, the launched managed guest session will be
+    // lockable, and can only be unlocked by calling
+    // <code>unlockManagedGuestSession()</code> with the same password.
+    // |callback|: Note: If the function succeeds, the callback is not
+    // guaranteed to be called as the extension will be disabled when the
+    // session starts. Use this callback only to handle the failure case by
+    // checking <code>chrome.runtime.lastError</code>.
+    static void launchManagedGuestSession(optional DOMString password,
+                                          optional VoidCallback callback);
 
     // Exits the current session.
     // |dataForNextLoginAttempt|: If set, stores data which can be read by
@@ -28,5 +36,20 @@
     // |callback|: Called with the stored data, or an empty string if there was
     // no previously stored data.
     static void fetchDataForNextLoginAttempt(StringCallback callback);
+
+    // Locks the current managed guest session. The session has to have been
+    // launched by <code>launchManagedGuestSession()</code> with a password.
+    static void lockManagedGuestSession(optional VoidCallback callback);
+
+    // Unlocks a managed guest session which was launched by
+    // <code>launchManagedGuestSession()</code> with a password. The session
+    // will unlock if the provided password matches the one provided earlier.
+    // |password|: The password which will be used to unlock the session.
+    // |callback|: Note: If the function succeeds, the callback is not
+    // guaranteed to be called as the extension will be disabled when the
+    // session starts. Use this callback only to handle the failure case by
+    // checking <code>chrome.runtime.lastError</code>.
+    static void unlockManagedGuestSession(DOMString password,
+                                          optional VoidCallback callback);
   };
 };
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 0a0ba8fd..8f4b178 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -1006,6 +1006,14 @@
 const char kLoginExtensionApiDataForNextLoginAttempt[] =
     "extensions_api.login.data_for_next_login_attempt";
 
+// A string user profile pref containing the ID of the extension which launched
+// the current Managed Guest Session using the chrome.login extension API. A
+// non-empty ID indicates that the current Managed Guest Session is lockable,
+// and can only be unlocked by the specified extension using the chrome.login
+// extension API.
+const char kLoginExtensionApiLaunchExtensionId[] =
+    "extensions_api.login.launch_extension_id";
+
 // String containing last RSU lookup key uploaded. Empty until first upload.
 const char kLastRsuDeviceIdUploaded[] = "rsu.last_rsu_device_id_uploaded";
 
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index 18de222e..b21d367 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -321,6 +321,7 @@
 extern const char kAppReinstallRecommendationEnabled[];
 extern const char kStartupBrowserWindowLaunchSuppressed[];
 extern const char kLoginExtensionApiDataForNextLoginAttempt[];
+extern const char kLoginExtensionApiLaunchExtensionId[];
 extern const char kSettingsShowBrowserBanner[];
 extern const char kSettingsShowOSBanner[];
 extern const char kDeviceLoginScreenWebUsbAllowDevicesForUrls[];
diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn
index 4b54fa5..32d2163 100644
--- a/chrome/renderer/BUILD.gn
+++ b/chrome/renderer/BUILD.gn
@@ -157,7 +157,6 @@
     "//components/security_interstitials/core:",
     "//components/security_interstitials/core/common/mojom:",
     "//components/spellcheck:buildflags",
-    "//components/startup_metric_utils/common:interfaces",
     "//components/subresource_filter/content/renderer",
     "//components/translate/content/renderer",
     "//components/translate/core/common",
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index 9165e0a..d37bd74 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -88,7 +88,6 @@
 #include "components/safe_browsing/buildflags.h"
 #include "components/safe_browsing/content/renderer/threat_dom_details.h"
 #include "components/spellcheck/spellcheck_buildflags.h"
-#include "components/startup_metric_utils/common/startup_metric.mojom.h"
 #include "components/subresource_filter/content/renderer/subresource_filter_agent.h"
 #include "components/subresource_filter/content/renderer/unverified_ruleset_dealer.h"
 #include "components/subresource_filter/core/common/common_features.h"
@@ -319,7 +318,7 @@
 }  // namespace
 
 ChromeContentRendererClient::ChromeContentRendererClient()
-    : main_entry_time_(base::TimeTicks::Now()),
+    :
 #if defined(OS_WIN)
       remote_module_watcher_(nullptr, base::OnTaskRunnerDeleter(nullptr)),
 #endif
@@ -348,13 +347,6 @@
           ? blink::scheduler::WebRendererProcessType::kExtensionRenderer
           : blink::scheduler::WebRendererProcessType::kRenderer);
 
-  {
-    mojo::Remote<startup_metric_utils::mojom::StartupMetricHost>
-        startup_metric_host;
-    thread->BindHostReceiver(startup_metric_host.BindNewPipeAndPassReceiver());
-    startup_metric_host->RecordRendererMainEntryTime(main_entry_time_);
-  }
-
 #if defined(OS_WIN)
   mojo::PendingRemote<mojom::ModuleEventSink> module_event_sink;
   thread->BindHostReceiver(module_event_sink.InitWithNewPipeAndPassReceiver());
diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h
index dd5c2ca..d891d8a 100644
--- a/chrome/renderer/chrome_content_renderer_client.h
+++ b/chrome/renderer/chrome_content_renderer_client.h
@@ -261,10 +261,6 @@
   void BindWebRTCLoggingAgent(
       mojo::PendingReceiver<chrome::mojom::WebRtcLoggingAgent> receiver);
 
-  // Time at which this object was created. This is very close to the time at
-  // which the RendererMain function was entered.
-  base::TimeTicks main_entry_time_;
-
 #if BUILDFLAG(ENABLE_NACL)
   // Determines if a page/app/extension is allowed to run native (non-PNaCl)
   // NaCl modules.
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index e270d536..30b0dc4 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -686,6 +686,7 @@
       "//chrome:strings",
       "//chrome/browser",
       "//chrome/browser/devtools:test_support",
+      "//chrome/browser/metrics:test_support",
       "//chrome/browser/notifications/scheduler/test:test_support",
       "//chrome/browser/profiling_host:profiling_browsertests",
       "//chrome/browser/web_applications:browser_tests",
@@ -1000,6 +1001,7 @@
       "../browser/metrics/desktop_session_duration/audible_contents_tracker_browsertest.cc",
       "../browser/metrics/metrics_reporting_state_browsertest.cc",
       "../browser/metrics/metrics_service_browsertest.cc",
+      "../browser/metrics/metrics_service_user_demographics_browsertest.cc",
       "../browser/metrics/oom/out_of_memory_reporter_browsertest.cc",
       "../browser/metrics/process_memory_metrics_emitter_browsertest.cc",
       "../browser/metrics/startup_metrics_browsertest.cc",
@@ -3777,6 +3779,7 @@
       "../browser/installedapp/installed_app_provider_unittest.cc",
       "../browser/media/android/cdm/media_drm_origin_id_manager_unittest.cc",
       "../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/password_manager/account_chooser_dialog_android_unittest.cc",
       "../browser/password_manager/auto_signin_first_run_dialog_android_unittest.cc",
diff --git a/chrome/test/data/chromeos/file_manager/broken.jpg b/chrome/test/data/chromeos/file_manager/broken.jpg
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/chrome/test/data/chromeos/file_manager/broken.jpg
@@ -0,0 +1 @@
+
diff --git a/chrome/test/data/extensions/api_test/login_screen_apis/README b/chrome/test/data/extensions/api_test/login_screen_apis/README
index 71f8a09..85339d0 100644
--- a/chrome/test/data/extensions/api_test/login_screen_apis/README
+++ b/chrome/test/data/extensions/api_test/login_screen_apis/README
@@ -1,15 +1,20 @@
-The extension.crx package must be signed by WebStore, in order for
-the extension to have the expected ID which is whitelisted in Chrome:
-"oclffehlkdgibkainkilopaalpdobkan".
+The .crx packages must be signed by WebStore in order for the extensions to
+have the expected IDs which are whitelisted in Chrome.
+The expected IDs are:
+extension.crx:            oclffehlkdgibkainkilopaalpdobkan
+in_session_extension.crx: ofcpkomnogjenhfajfjadjmjppbegnad
 
-This extension is used in the API tests for the following APIs:
+extension.crx is used in the API tests for the following APIs:
 -chrome.loginScreenUi
 -chrome.storage
 -chrome.login
 
+in_session_extension.crx is used in the API tests for the following APIs:
+-chrome.login
+
 The code for the tests can be found under the
 chrome/browser/chromeos/extensions/login_screen_apis/ directory.
 
-In case a new version of the test extension has to be published on WebStore,
-please reach out to the OWNERS, chromeos-enterprise-extensions@ or
+In case a new version of one of the test extension has to be published on
+WebStore, please reach out to the OWNERS, chromeos-enterprise-extensions@ or
 managed-devices@ mailing list.
diff --git a/chrome/test/data/extensions/api_test/login_screen_apis/extension.crx b/chrome/test/data/extensions/api_test/login_screen_apis/extension.crx
index 04dde109..f29aebc 100644
--- a/chrome/test/data/extensions/api_test/login_screen_apis/extension.crx
+++ b/chrome/test/data/extensions/api_test/login_screen_apis/extension.crx
Binary files differ
diff --git a/chrome/test/data/extensions/api_test/login_screen_apis/extension/background.js b/chrome/test/data/extensions/api_test/login_screen_apis/extension/background.js
index 011529e4..83e1a42 100644
--- a/chrome/test/data/extensions/api_test/login_screen_apis/extension/background.js
+++ b/chrome/test/data/extensions/api_test/login_screen_apis/extension/background.js
@@ -11,6 +11,13 @@
     '"sync" is not available for login screen extensions';
 const noManagedGuestSessionAccountsErrorMessage =
     'No managed guest session accounts';
+const alreadyExistsActiveSessionErrorMessage =
+    'There is already an active session';
+const sessionNotLockedErrorMessage = 'Session is not locked';
+const sessionNotActiveErrorMessage = 'Session is not active';
+const noPermissionToUnlockErrorMessage =
+    'The extension does not have permission to unlock this session';
+const authenticationFailedErrorMessage = 'Authentication failed';
 
 const tests = {
   /* LoginScreenUi ************************************************************/
@@ -92,6 +99,20 @@
       chrome.test.succeed();
     });
   },
+  'LoginLaunchManagedGuestSessionWithPassword': () => {
+    chrome.test.getConfig(config => {
+      chrome.login.launchManagedGuestSession(config.customArg, () => {
+        chrome.test.assertNoLastError();
+        chrome.test.succeed();
+      });
+    });
+  },
+  'LoginLaunchManagedGuestSessionAlreadyExistsActiveSession': () => {
+    chrome.login.launchManagedGuestSession(() => {
+      chrome.test.assertLastError(alreadyExistsActiveSessionErrorMessage);
+      chrome.test.succeed();
+    });
+  },
   'LoginLaunchManagedGuestSessionNoAccounts': () => {
     chrome.login.launchManagedGuestSession(() => {
       chrome.test.assertLastError(noManagedGuestSessionAccountsErrorMessage);
@@ -113,6 +134,46 @@
       });
     });
   },
+  'LoginLockManagedGuestSessionNotActive': () => {
+    chrome.login.lockManagedGuestSession(() => {
+      chrome.test.assertLastError(sessionNotActiveErrorMessage);
+      chrome.test.succeed();
+    });
+  },
+  'LoginUnlockManagedGuestSession': () => {
+    chrome.test.getConfig(config => {
+      chrome.login.unlockManagedGuestSession(config.customArg, () => {
+        chrome.test.assertNoLastError();
+        chrome.test.succeed();
+      });
+    });
+  },
+  'LoginUnlockManagedGuestSessionWrongPassword': () => {
+    chrome.test.getConfig(config => {
+      chrome.login.unlockManagedGuestSession(config.customArg, () => {
+        chrome.test.assertLastError(authenticationFailedErrorMessage);
+        chrome.test.succeed();
+      });
+    });
+  },
+  'LoginUnlockManagedGuestSessionNotLocked': () => {
+    chrome.login.unlockManagedGuestSession('dummy_password', () => {
+      chrome.test.assertLastError(sessionNotLockedErrorMessage);
+      chrome.test.succeed();
+    });
+  },
+  'LoginUnlockManagedGuestSessionNotManagedGuestSession': () => {
+    chrome.login.unlockManagedGuestSession('dummy_password', () => {
+      chrome.test.assertLastError(noPermissionToUnlockErrorMessage);
+      chrome.test.succeed();
+    });
+  },
+  'LoginUnlockManagedGuestSessionWrongExtensionId': () => {
+    chrome.login.unlockManagedGuestSession('dummy_password', () => {
+      chrome.test.assertLastError(noPermissionToUnlockErrorMessage);
+      chrome.test.succeed();
+    });
+  },
 };
 
 // |waitForTestName()| waits for the browser test to reply with a test name and
diff --git a/chrome/test/data/extensions/api_test/login_screen_apis/extension/manifest.json b/chrome/test/data/extensions/api_test/login_screen_apis/extension/manifest.json
index e34313b0b..adc2319 100644
--- a/chrome/test/data/extensions/api_test/login_screen_apis/extension/manifest.json
+++ b/chrome/test/data/extensions/api_test/login_screen_apis/extension/manifest.json
@@ -1,6 +1,6 @@
 {
   "name": "Login screen APIs test extension",
-  "version": "1.20",
+  "version": "1.23",
   "manifest_version": 2,
   "description": "Login screen APIs test extension",
   "background": {
diff --git a/chrome/test/data/extensions/api_test/login_screen_apis/in_session_extension.crx b/chrome/test/data/extensions/api_test/login_screen_apis/in_session_extension.crx
new file mode 100644
index 0000000..f197a3f
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/login_screen_apis/in_session_extension.crx
Binary files differ
diff --git a/chrome/test/data/extensions/api_test/login_screen_apis/in_session_extension/background.js b/chrome/test/data/extensions/api_test/login_screen_apis/in_session_extension/background.js
new file mode 100644
index 0000000..f7b7118
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/login_screen_apis/in_session_extension/background.js
@@ -0,0 +1,44 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+const noPermissionToLockErrorMessage =
+    'The extension does not have permission to lock this session';
+const noPermissionToUnlockErrorMessage =
+    'The extension does not have permission to unlock this session';
+
+const tests = {
+  'InSessionLoginLockManagedGuestSession': () => {
+    chrome.login.lockManagedGuestSession(() => {
+      chrome.test.assertNoLastError();
+      chrome.test.succeed();
+    });
+  },
+  'InSessionLoginLockManagedGuestSessionNoPermission': () => {
+    chrome.login.lockManagedGuestSession(() => {
+      chrome.test.assertLastError(noPermissionToLockErrorMessage);
+      chrome.test.succeed();
+    });
+  },
+  'InSessionLoginUnlockManagedGuestSessionNoPermission': () => {
+    chrome.login.unlockManagedGuestSession('dummy_password', () => {
+      chrome.test.assertLastError(noPermissionToUnlockErrorMessage);
+      chrome.test.succeed();
+    });
+  },
+}
+
+// |waitForTestName()| waits for the browser test to reply with a test name and
+// runs the specified test. The browser test logic can be found at
+// chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.cc
+function waitForTestName(testName) {
+  if (!tests.hasOwnProperty(testName) ||
+      typeof tests[testName] !== 'function') {
+    chrome.test.fail('Test not found: ' + testName);
+    return;
+  }
+
+  chrome.test.runTests([tests[testName]]);
+}
+
+chrome.test.sendMessage('Waiting for test name', waitForTestName);
diff --git a/chrome/test/data/extensions/api_test/login_screen_apis/in_session_extension/manifest.json b/chrome/test/data/extensions/api_test/login_screen_apis/in_session_extension/manifest.json
new file mode 100644
index 0000000..e8918a7
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/login_screen_apis/in_session_extension/manifest.json
@@ -0,0 +1,13 @@
+{
+  "name": "Login screen APIs in-session test extension",
+  "version": "0.4",
+  "manifest_version": 2,
+  "description": "In session extension for testing the chrome.login extension API",
+  "background": {
+    "scripts": ["background.js"]
+  },
+  "permissions": [
+    "login"
+  ]
+}
+
diff --git a/chrome/test/data/extensions/api_test/login_screen_apis/update_manifest.xml b/chrome/test/data/extensions/api_test/login_screen_apis/update_manifest.xml
index 64abc8a8..c66b822 100644
--- a/chrome/test/data/extensions/api_test/login_screen_apis/update_manifest.xml
+++ b/chrome/test/data/extensions/api_test/login_screen_apis/update_manifest.xml
@@ -1,12 +1,18 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!--
-  This update manifest points to the ./extension.crx file. "mock.http" is a
-  placeholder that gets substituted with the test server address in runtime.
+  This update manifest points to the ./extension.crx and
+  ./in_session_extension.ctx files. "mock.http" is a  placeholder that gets
+  substituted with the test server address in runtime.
 -->
 <gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
   <app appid='oclffehlkdgibkainkilopaalpdobkan'>
     <updatecheck
         codebase='http://mock.http/extensions/api_test/login_screen_apis/extension.crx'
-        version='1.20' />
-   </app>
+        version='1.23' />
+  </app>
+  <app appid='ofcpkomnogjenhfajfjadjmjppbegnad'>
+    <updatecheck
+        codebase='http://mock.http/extensions/api_test/login_screen_apis/in_session_extension.crx'
+        version='0.4' />
+  </app>
 </gupdate>
diff --git a/chrome/test/data/extensions/signin_screen_manual_test_app/README b/chrome/test/data/extensions/signin_screen_manual_test_app/README
index 72eba2d..648b79c 100644
--- a/chrome/test/data/extensions/signin_screen_manual_test_app/README
+++ b/chrome/test/data/extensions/signin_screen_manual_test_app/README
@@ -1,9 +1,13 @@
-The app_signed_by_webstore.crx package must be a one signed by WebStore, in
-order for the app to have the expected ID which is whitelisted in Chrome -
-"bjaiihebfngildkcjkjckolinodhliff".
-
 This app is primarily intended to be used for the manual testing of the apps on
-the Chrome OS sign-in screen.
+the Chrome OS sign-in screen. The sources are located under the ./app/
+directory.
+
+The ./crx/**/app_signed_by_webstore.crx packages must be files signed by
+WebStore, in order for the app to have the expected ID which is whitelisted in
+Chrome - "bjaiihebfngildkcjkjckolinodhliff".
+
+Browser tests in Chrome currently require these packages for two different
+versions.
 
 In case a new version of the test app has to be published on WebStore, please
 reach out to the managed-devices@ mailing list.
diff --git a/chrome/test/data/extensions/signin_screen_manual_test_app/app_signed_by_webstore.crx b/chrome/test/data/extensions/signin_screen_manual_test_app/crx/3.0/app_signed_by_webstore.crx
similarity index 100%
rename from chrome/test/data/extensions/signin_screen_manual_test_app/app_signed_by_webstore.crx
rename to chrome/test/data/extensions/signin_screen_manual_test_app/crx/3.0/app_signed_by_webstore.crx
Binary files differ
diff --git a/chrome/test/data/extensions/signin_screen_manual_test_app/update_manifest.xml b/chrome/test/data/extensions/signin_screen_manual_test_app/crx/3.0/update_manifest.xml
similarity index 90%
rename from chrome/test/data/extensions/signin_screen_manual_test_app/update_manifest.xml
rename to chrome/test/data/extensions/signin_screen_manual_test_app/crx/3.0/update_manifest.xml
index a2676d7..0e2a2cca 100644
--- a/chrome/test/data/extensions/signin_screen_manual_test_app/update_manifest.xml
+++ b/chrome/test/data/extensions/signin_screen_manual_test_app/crx/3.0/update_manifest.xml
@@ -7,7 +7,7 @@
 <gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
   <app appid='bjaiihebfngildkcjkjckolinodhliff'>
     <updatecheck
-        codebase='http://mock.http/extensions/signin_screen_manual_test_app/app_signed_by_webstore.crx'
+        codebase='http://mock.http/extensions/signin_screen_manual_test_app/crx/3.0/app_signed_by_webstore.crx'
         version='3.0' />
    </app>
 </gupdate>
diff --git a/chrome/test/data/extensions/signin_screen_manual_test_app/crx/4.0/app_signed_by_webstore.crx b/chrome/test/data/extensions/signin_screen_manual_test_app/crx/4.0/app_signed_by_webstore.crx
new file mode 100644
index 0000000..cf681c9
--- /dev/null
+++ b/chrome/test/data/extensions/signin_screen_manual_test_app/crx/4.0/app_signed_by_webstore.crx
Binary files differ
diff --git a/chrome/test/data/extensions/signin_screen_manual_test_app/update_manifest.xml b/chrome/test/data/extensions/signin_screen_manual_test_app/crx/4.0/update_manifest.xml
similarity index 85%
copy from chrome/test/data/extensions/signin_screen_manual_test_app/update_manifest.xml
copy to chrome/test/data/extensions/signin_screen_manual_test_app/crx/4.0/update_manifest.xml
index a2676d7..37364fe 100644
--- a/chrome/test/data/extensions/signin_screen_manual_test_app/update_manifest.xml
+++ b/chrome/test/data/extensions/signin_screen_manual_test_app/crx/4.0/update_manifest.xml
@@ -7,7 +7,7 @@
 <gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
   <app appid='bjaiihebfngildkcjkjckolinodhliff'>
     <updatecheck
-        codebase='http://mock.http/extensions/signin_screen_manual_test_app/app_signed_by_webstore.crx'
-        version='3.0' />
+        codebase='http://mock.http/extensions/signin_screen_manual_test_app/crx/4.0/app_signed_by_webstore.crx'
+        version='4.0' />
    </app>
 </gupdate>
diff --git a/chrome/test/data/webui/settings/people_page_sync_page_test.js b/chrome/test/data/webui/settings/people_page_sync_page_test.js
index c294a32ca..7c84230 100644
--- a/chrome/test/data/webui/settings/people_page_sync_page_test.js
+++ b/chrome/test/data/webui/settings/people_page_sync_page_test.js
@@ -9,6 +9,18 @@
     let encryptWithGoogle = null;
     let encryptWithPassphrase = null;
 
+    suiteSetup(function() {
+      loadTimeData.overrideValues({
+        syncSetupFriendlySettings: true,
+        sWAAOn: 'On',
+        sWAAOff: 'Off',
+        sWAAOnHint: 'sWAAOnHint',
+        sWAAOffHint: 'sWAAOffHint',
+        historySyncOffHint: 'historySyncOffHint',
+        dataEncryptedHint: 'dataEncryptedHint'
+      });
+    });
+
     setup(function() {
       browserProxy = new TestSyncBrowserProxy();
       settings.SyncBrowserProxyImpl.instance_ = browserProxy;
@@ -508,6 +520,85 @@
       assertTrue(dashboardLink.hidden);
     });
 
+    test('sWAA', async function() {
+      function verifyResults(hidden, sWAA, sWAAHint, hideActivityControlsUrl) {
+        const sWAAText = syncPage.$$('#history-usage-state .secondary');
+        const historyUsageHint = syncPage.$$('#history-usage-hint');
+        assertEquals(sWAAText.hidden, hidden);
+        assertEquals(historyUsageHint.hidden, hidden);
+        assertEquals(
+            syncPage.$$('#history-usage-row')
+                .querySelector('.icon-external')
+                .hidden,
+            hideActivityControlsUrl);
+
+        if (!hidden) {
+          assertEquals(sWAAText.textContent.trim(), sWAA);
+          assertEquals(historyUsageHint.textContent.trim(), sWAAHint);
+        }
+      }
+
+      /** @param {Object=} syncPrefOverrides */
+      function setSyncPrefs(syncPrefOverrides = {}) {
+        const defaults = sync_test_util.getSyncAllPrefs();
+        const syncPrefs = Object.assign({}, defaults, syncPrefOverrides);
+        cr.webUIListenerCallback('sync-prefs-changed', syncPrefs);
+        Polymer.dom.flush();
+      }
+
+      const syncSection = syncPage.$$('#sync-section');
+      assertTrue(syncSection.hidden);
+      syncPage.syncStatus = {
+        signedIn: true,
+        disabled: false,
+        hasError: false,
+        statusAction: settings.StatusAction.NO_ACTION,
+      };
+      Polymer.dom.flush();
+      assertFalse(syncSection.hidden);
+      await browserProxy.whenCalled('queryIsHistoryRecordingEnabled');
+      verifyResults(
+          /*hidden=*/ false, 'On', 'sWAAOnHint',
+          /*hideActivityControlsUrl=*/ false);
+
+      // Data encrypted with custom passphrase.
+      setSyncPrefs({encryptAllData: true});
+      verifyResults(
+          /*hidden=*/ false, 'Off', 'dataEncryptedHint',
+          /*hideActivityControlsUrl=*/ true);
+
+      // sWAA off.
+      browserProxy.setHistoryRecordingEnabled({
+        requestSucceeded: true,
+        historyRecordingEnabled: /*hideActivityControlsUrl=*/ false
+      });
+      setSyncPrefs();
+      await browserProxy.whenCalled('queryIsHistoryRecordingEnabled');
+      verifyResults(
+          /*hidden=*/ false, 'Off', 'sWAAOffHint',
+          /*hideActivityControlsUrl=*/ false);
+
+      // Turn history sync off.
+      setSyncPrefs({syncAllDataTypes: false, typedUrlsSynced: false});
+      verifyResults(
+          /*hidden=*/ false, 'Off', 'historySyncOffHint',
+          /*hideActivityControlsUrl=*/ true);
+
+      // Verify hint is updated.
+      setSyncPrefs({encryptAllData: true});
+      verifyResults(
+          /*hidden=*/ false, 'Off', 'dataEncryptedHint',
+          /*hideActivityControlsUrl=*/ true);
+
+      // Failed to fetch |historyRecordingEnabled|.
+      browserProxy.setHistoryRecordingEnabled(
+          {requestSucceeded: false, historyRecordingEnabled: false});
+      setSyncPrefs();
+      await browserProxy.whenCalled('queryIsHistoryRecordingEnabled');
+      verifyResults(
+          /*hidden=*/ true, '', '', /*hideActivityControlsUrl=*/ false);
+    });
+
     // ##################################
     // TESTS THAT ARE SKIPPED ON CHROMEOS
     // ##################################
diff --git a/chrome/test/data/webui/settings/test_sync_browser_proxy.js b/chrome/test/data/webui/settings/test_sync_browser_proxy.js
index 3900d7d..8ea836e 100644
--- a/chrome/test/data/webui/settings/test_sync_browser_proxy.js
+++ b/chrome/test/data/webui/settings/test_sync_browser_proxy.js
@@ -19,11 +19,18 @@
       'sendSyncPrefsChanged',
       'startSignIn',
       'startSyncingWithEmail',
+      'queryIsHistoryRecordingEnabled',
     ]);
 
     /** @private {number} */
     this.impressionCount_ = 0;
 
+    /** @type {!HistoryRecordingEnabled} */
+    this.historyRecordingEnabled_ = {
+      requestSucceeded: true,
+      historyRecordingEnabled: true
+    };
+
     /** @type {!settings.PageStatus} */
     this.encryptionResponse = settings.PageStatus.CONFIGURE;
   }
@@ -101,4 +108,17 @@
   sendSyncPrefsChanged() {
     this.methodCalled('sendSyncPrefsChanged');
   }
+
+  /**
+   * @param {!HistoryRecordingEnabled} historyRecordingEnabled
+   */
+  setHistoryRecordingEnabled(historyRecordingEnabled) {
+    this.historyRecordingEnabled_ = historyRecordingEnabled;
+  }
+
+  /** @override */
+  queryIsHistoryRecordingEnabled() {
+    this.methodCalled('queryIsHistoryRecordingEnabled');
+    return Promise.resolve(this.historyRecordingEnabled_);
+  }
 }
diff --git a/chromeos/login/auth/user_context.cc b/chromeos/login/auth/user_context.cc
index 9ba9f54..fcb4e92 100644
--- a/chromeos/login/auth/user_context.cc
+++ b/chromeos/login/auth/user_context.cc
@@ -147,6 +147,14 @@
   return saml_password_attributes_;
 }
 
+bool UserContext::IsLockableManagedGuestSession() const {
+  return !managed_guest_session_launch_extension_id_.empty();
+}
+
+std::string UserContext::GetManagedGuestSessionLaunchExtensionId() const {
+  return managed_guest_session_launch_extension_id_;
+}
+
 bool UserContext::HasCredentials() const {
   return (account_id_.is_valid() && !key_.GetSecret().empty()) ||
          !auth_code_.empty();
@@ -236,6 +244,12 @@
   is_under_advanced_protection_ = is_under_advanced_protection;
 }
 
+void UserContext::SetManagedGuestSessionLaunchExtensionId(
+    const std::string& managed_guest_session_launch_extension_id) {
+  managed_guest_session_launch_extension_id_ =
+      managed_guest_session_launch_extension_id;
+}
+
 void UserContext::ClearSecrets() {
   key_.ClearSecret();
   password_key_.ClearSecret();
diff --git a/chromeos/login/auth/user_context.h b/chromeos/login/auth/user_context.h
index 61a3d2f..816b01ba 100644
--- a/chromeos/login/auth/user_context.h
+++ b/chromeos/login/auth/user_context.h
@@ -88,6 +88,9 @@
   GetSyncPasswordData() const;
   const base::Optional<SamlPasswordAttributes>& GetSamlPasswordAttributes()
       const;
+  // True if |managed_guest_session_launch_extension_id_| is non-empty.
+  bool IsLockableManagedGuestSession() const;
+  std::string GetManagedGuestSessionLaunchExtensionId() const;
 
   bool HasCredentials() const;
 
@@ -129,6 +132,11 @@
   void SetSamlPasswordAttributes(
       const SamlPasswordAttributes& saml_password_attributes);
   void SetIsUnderAdvancedProtection(bool is_under_advanced_protection);
+  // Sets |managed_guest_session_launch_extension_id_| which is used to set the
+  // |kLoginExtensionApiLaunchExtensionId| pref when the user's profile is
+  // created. Setting this pref indicates that this Managed Guest Session is
+  // lockable.
+  void SetManagedGuestSessionLaunchExtensionId(const std::string& extension_id);
 
   void ClearSecrets();
 
@@ -152,6 +160,7 @@
   std::string device_id_;
   std::string gaps_cookie_;
   bool is_under_advanced_protection_ = false;
+  std::string managed_guest_session_launch_extension_id_;
 
   // For password reuse detection use.
   base::Optional<password_manager::PasswordHashData> sync_password_data_;
diff --git a/chromeos/profiles/broadwell.afdo.newest.txt b/chromeos/profiles/broadwell.afdo.newest.txt
index 0dc5db1..d791b5f 100644
--- a/chromeos/profiles/broadwell.afdo.newest.txt
+++ b/chromeos/profiles/broadwell.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-broadwell-81-3987.18-1578307857-benchmark-81.0.4016.0-r1-redacted.afdo.xz
\ No newline at end of file
+chromeos-chrome-amd64-broadwell-81-3987.18-1578307857-benchmark-81.0.4019.0-r1-redacted.afdo.xz
\ No newline at end of file
diff --git a/chromeos/profiles/orderfile.newest.txt b/chromeos/profiles/orderfile.newest.txt
index 2f12a142..68839651 100644
--- a/chromeos/profiles/orderfile.newest.txt
+++ b/chromeos/profiles/orderfile.newest.txt
@@ -1 +1 @@
-chromeos-chrome-orderfile-field-81-3987.18-1577705382-benchmark-81.0.4013.0-r1.orderfile.xz
\ No newline at end of file
+chromeos-chrome-orderfile-field-81-3987.18-1577705382-benchmark-81.0.4016.0-r1.orderfile.xz
\ No newline at end of file
diff --git a/components/autofill_assistant/browser/actions/collect_user_data_action.cc b/components/autofill_assistant/browser/actions/collect_user_data_action.cc
index d67a6c1a..1486943e 100644
--- a/components/autofill_assistant/browser/actions/collect_user_data_action.cc
+++ b/components/autofill_assistant/browser/actions/collect_user_data_action.cc
@@ -844,8 +844,8 @@
       (collect_user_data_options_->request_payer_name ||
        collect_user_data_options_->request_payer_phone ||
        collect_user_data_options_->request_payer_email)) {
-    int default_selection = GetDefaultProfile(*collect_user_data_options_,
-                                              user_data->available_profiles);
+    int default_selection = GetDefaultContactProfile(
+        *collect_user_data_options_, user_data->available_profiles);
     if (default_selection != -1) {
       user_data->contact_profile = std::make_unique<autofill::AutofillProfile>(
           *(user_data->available_profiles[default_selection]));
@@ -857,8 +857,8 @@
   }
   if (user_data->shipping_address == nullptr &&
       collect_user_data_options_->request_shipping) {
-    int default_selection = GetDefaultProfile(*collect_user_data_options_,
-                                              user_data->available_profiles);
+    int default_selection = GetDefaultAddressProfile(
+        *collect_user_data_options_, user_data->available_profiles);
     if (default_selection != -1) {
       user_data->shipping_address = std::make_unique<autofill::AutofillProfile>(
           *(user_data->available_profiles[default_selection]));
diff --git a/components/autofill_assistant/browser/user_data_util.cc b/components/autofill_assistant/browser/user_data_util.cc
index 5ea598b..dbaabf36 100644
--- a/components/autofill_assistant/browser/user_data_util.cc
+++ b/components/autofill_assistant/browser/user_data_util.cc
@@ -8,6 +8,9 @@
 #include "base/i18n/case_conversion.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/autofill/core/browser/autofill_data_util.h"
+#include "components/autofill/core/browser/geo/address_i18n.h"
+#include "third_party/libaddressinput/chromium/addressinput_util.h"
+#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_data.h"
 
 namespace autofill_assistant {
 namespace {
@@ -20,8 +23,8 @@
       profile.GetRawInfo(autofill::NAME_LAST));
 }
 
-int CountCompleteFields(const CollectUserDataOptions& options,
-                        const autofill::AutofillProfile& profile) {
+int CountCompleteContactFields(const CollectUserDataOptions& options,
+                               const autofill::AutofillProfile& profile) {
   int completed_fields = 0;
   if (options.request_payer_name && !GetProfileFullName(profile).empty()) {
     ++completed_fields;
@@ -44,11 +47,11 @@
 // Helper function that compares instances of AutofillProfile by completeness
 // in regards to the current options. Full profiles should be ordered before
 // empty ones and fall back to compare the profile's name in case of equality.
-bool CompletenessCompare(const CollectUserDataOptions& options,
-                         const autofill::AutofillProfile& a,
-                         const autofill::AutofillProfile& b) {
-  int complete_fields_a = CountCompleteFields(options, a);
-  int complete_fields_b = CountCompleteFields(options, b);
+bool CompletenessCompareContacts(const CollectUserDataOptions& options,
+                                 const autofill::AutofillProfile& a,
+                                 const autofill::AutofillProfile& b) {
+  int complete_fields_a = CountCompleteContactFields(options, a);
+  int complete_fields_b = CountCompleteContactFields(options, b);
   if (complete_fields_a == complete_fields_b) {
     return base::i18n::ToLower(GetProfileFullName(a))
                .compare(base::i18n::ToLower(GetProfileFullName(b))) < 0;
@@ -56,8 +59,35 @@
   return complete_fields_a > complete_fields_b;
 }
 
-int CountCompleteFields(const CollectUserDataOptions& options,
-                        const PaymentInstrument& instrument) {
+int GetAddressCompletenessRating(const CollectUserDataOptions& options,
+                                 const autofill::AutofillProfile& profile) {
+  auto address_data =
+      autofill::i18n::CreateAddressDataFromAutofillProfile(profile, "en-US");
+  std::multimap<i18n::addressinput::AddressField,
+                i18n::addressinput::AddressProblem>
+      problems;
+  autofill::addressinput::ValidateRequiredFields(
+      *address_data, /* filter= */ nullptr, &problems);
+  return -problems.size();
+}
+
+// Helper function that compares instances of AutofillProfile by completeness
+// in regards to the current options. Full profiles should be ordered before
+// empty ones and fall back to compare the profile's name in case of equality.
+bool CompletenessCompareAddresses(const CollectUserDataOptions& options,
+                                  const autofill::AutofillProfile& a,
+                                  const autofill::AutofillProfile& b) {
+  int complete_fields_a = GetAddressCompletenessRating(options, a);
+  int complete_fields_b = GetAddressCompletenessRating(options, b);
+  if (complete_fields_a == complete_fields_b) {
+    return base::i18n::ToLower(GetProfileFullName(a))
+               .compare(base::i18n::ToLower(GetProfileFullName(b))) < 0;
+  }
+  return complete_fields_a > complete_fields_b;
+}
+
+int CountCompletePaymentInstrumentFields(const CollectUserDataOptions& options,
+                                         const PaymentInstrument& instrument) {
   int complete_fields = 0;
   if (!instrument.card->GetRawInfo(autofill::CREDIT_CARD_NAME_FULL).empty()) {
     ++complete_fields;
@@ -88,11 +118,12 @@
 // in regards to the current options. Full payment instruments should be
 // ordered before empty ones and fall back to compare the full name on the
 // credit card in case of equality.
-bool CompletenessCompare(const CollectUserDataOptions& options,
-                         const PaymentInstrument& a,
-                         const PaymentInstrument& b) {
-  int complete_fields_a = CountCompleteFields(options, a);
-  int complete_fields_b = CountCompleteFields(options, b);
+bool CompletenessComparePaymentInstruments(
+    const CollectUserDataOptions& options,
+    const PaymentInstrument& a,
+    const PaymentInstrument& b) {
+  int complete_fields_a = CountCompletePaymentInstrumentFields(options, a);
+  int complete_fields_b = CountCompletePaymentInstrumentFields(options, b);
   if (complete_fields_a == complete_fields_b) {
     return base::i18n::ToLower(
                a.card->GetRawInfo(autofill::CREDIT_CARD_NAME_FULL))
@@ -104,26 +135,27 @@
 
 }  // namespace
 
-std::vector<int> SortByCompleteness(
+std::vector<int> SortContactsByCompleteness(
     const CollectUserDataOptions& collect_user_data_options,
     const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles) {
   std::vector<int> profile_indices(profiles.size());
   std::iota(std::begin(profile_indices), std::end(profile_indices), 0);
   std::sort(profile_indices.begin(), profile_indices.end(),
             [&collect_user_data_options, &profiles](int i, int j) {
-              return CompletenessCompare(collect_user_data_options,
-                                         *profiles[i], *profiles[j]);
+              return CompletenessCompareContacts(collect_user_data_options,
+                                                 *profiles[i], *profiles[j]);
             });
   return profile_indices;
 }
 
-int GetDefaultProfile(
+int GetDefaultContactProfile(
     const CollectUserDataOptions& collect_user_data_options,
     const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles) {
   if (profiles.empty()) {
     return -1;
   }
-  auto sorted_indices = SortByCompleteness(collect_user_data_options, profiles);
+  auto sorted_indices =
+      SortContactsByCompleteness(collect_user_data_options, profiles);
   if (!collect_user_data_options.default_email.empty()) {
     for (int index : sorted_indices) {
       if (base::UTF16ToUTF8(
@@ -136,7 +168,31 @@
   return sorted_indices[0];
 }
 
-std::vector<int> SortByCompleteness(
+std::vector<int> SortAddressesByCompleteness(
+    const CollectUserDataOptions& collect_user_data_options,
+    const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles) {
+  std::vector<int> profile_indices(profiles.size());
+  std::iota(std::begin(profile_indices), std::end(profile_indices), 0);
+  std::sort(profile_indices.begin(), profile_indices.end(),
+            [&collect_user_data_options, &profiles](int i, int j) {
+              return CompletenessCompareAddresses(collect_user_data_options,
+                                                  *profiles[i], *profiles[j]);
+            });
+  return profile_indices;
+}
+
+int GetDefaultAddressProfile(
+    const CollectUserDataOptions& collect_user_data_options,
+    const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles) {
+  if (profiles.empty()) {
+    return -1;
+  }
+  auto sorted_indices =
+      SortContactsByCompleteness(collect_user_data_options, profiles);
+  return sorted_indices[0];
+}
+
+std::vector<int> SortPaymentInstrumentsByCompleteness(
     const CollectUserDataOptions& collect_user_data_options,
     const std::vector<std::unique_ptr<PaymentInstrument>>&
         payment_instruments) {
@@ -146,9 +202,9 @@
   std::sort(payment_instrument_indices.begin(),
             payment_instrument_indices.end(),
             [&collect_user_data_options, &payment_instruments](int a, int b) {
-              return CompletenessCompare(collect_user_data_options,
-                                         *payment_instruments[a],
-                                         *payment_instruments[b]);
+              return CompletenessComparePaymentInstruments(
+                  collect_user_data_options, *payment_instruments[a],
+                  *payment_instruments[b]);
             });
   return payment_instrument_indices;
 }
@@ -160,8 +216,8 @@
   if (payment_instruments.empty()) {
     return -1;
   }
-  auto sorted_indices =
-      SortByCompleteness(collect_user_data_options, payment_instruments);
+  auto sorted_indices = SortPaymentInstrumentsByCompleteness(
+      collect_user_data_options, payment_instruments);
   return sorted_indices[0];
 }
 
diff --git a/components/autofill_assistant/browser/user_data_util.h b/components/autofill_assistant/browser/user_data_util.h
index c4c31d5..58ac0df 100644
--- a/components/autofill_assistant/browser/user_data_util.h
+++ b/components/autofill_assistant/browser/user_data_util.h
@@ -16,13 +16,27 @@
 // vector of profile indices in sorted order. Full profiles will be ordered
 // before empty ones, and for equally complete profiles, this falls back to
 // sorting based on the profile names.
-std::vector<int> SortByCompleteness(
+std::vector<int> SortContactsByCompleteness(
     const CollectUserDataOptions& collect_user_data_options,
     const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles);
 
 // Get the default selection for the current list of profiles. Returns -1 if no
 // default selection is possible.
-int GetDefaultProfile(
+int GetDefaultContactProfile(
+    const CollectUserDataOptions& collect_user_data_options,
+    const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles);
+
+// Sorts the given autofill profiles based on completeness, and returns a
+// vector of profile indices in sorted order. Full profiles will be ordered
+// before empty ones, and for equally complete profiles, this falls back to
+// sorting based on the profile names.
+std::vector<int> SortAddressesByCompleteness(
+    const CollectUserDataOptions& collect_user_data_options,
+    const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles);
+
+// Get the default selection for the current list of profiles. Returns -1 if no
+// default selection is possible.
+int GetDefaultAddressProfile(
     const CollectUserDataOptions& collect_user_data_options,
     const std::vector<std::unique_ptr<autofill::AutofillProfile>>& profiles);
 
@@ -30,7 +44,7 @@
 // of payment instrument indices in sorted order. Full payment instruments will
 // be ordered before empty ones, and for equally complete payment instruments,
 // this falls back to sorting based on the full name on the credit card.
-std::vector<int> SortByCompleteness(
+std::vector<int> SortPaymentInstrumentsByCompleteness(
     const CollectUserDataOptions& collect_user_data_options,
     const std::vector<std::unique_ptr<PaymentInstrument>>& payment_instruments);
 
diff --git a/components/autofill_assistant/browser/user_data_util_unittest.cc b/components/autofill_assistant/browser/user_data_util_unittest.cc
index 6e08168c..ef4fb96 100644
--- a/components/autofill_assistant/browser/user_data_util_unittest.cc
+++ b/components/autofill_assistant/browser/user_data_util_unittest.cc
@@ -18,7 +18,7 @@
 using ::testing::Eq;
 using ::testing::SizeIs;
 
-TEST(UserDataUtilTest, SortsCompleteProfilesAlphabetically) {
+TEST(UserDataUtilTest, SortsCompleteContactsAlphabetically) {
   auto profile_a = std::make_unique<autofill::AutofillProfile>();
   autofill::test::SetProfileInfo(profile_a.get(), "Adam", "", "West",
                                  "adam.west@gmail.com", "", "", "", "", "", "",
@@ -47,12 +47,12 @@
   options.request_payer_email = true;
 
   std::vector<int> profile_indices =
-      autofill_assistant::SortByCompleteness(options, profiles);
+      autofill_assistant::SortContactsByCompleteness(options, profiles);
   EXPECT_THAT(profile_indices, SizeIs(profiles.size()));
   EXPECT_THAT(profile_indices, ElementsAre(2, 1, 0));
 }
 
-TEST(UserDataUtilTest, SortsProfilesByCompleteness) {
+TEST(UserDataUtilTest, SortsContactsByCompleteness) {
   auto profile_complete = std::make_unique<autofill::AutofillProfile>();
   autofill::test::SetProfileInfo(
       profile_complete.get(), "Charlie", "", "West", "charlie.west@gmail.com",
@@ -81,19 +81,19 @@
   options.request_shipping = true;
 
   std::vector<int> profile_indices =
-      autofill_assistant::SortByCompleteness(options, profiles);
+      autofill_assistant::SortContactsByCompleteness(options, profiles);
   EXPECT_THAT(profile_indices, SizeIs(profiles.size()));
   EXPECT_THAT(profile_indices, ElementsAre(2, 1, 0));
 }
 
-TEST(UserDataUtilTest, GetDefaultSelectionForEmptyProfiles) {
+TEST(UserDataUtilTest, GetDefaultContactSelectionForEmptyProfiles) {
   std::vector<std::unique_ptr<autofill::AutofillProfile>> profiles;
   CollectUserDataOptions options;
 
-  EXPECT_THAT(GetDefaultProfile(options, profiles), -1);
+  EXPECT_THAT(GetDefaultContactProfile(options, profiles), -1);
 }
 
-TEST(UserDataUtilTest, GetDefaultSelectionForCompleteProfiles) {
+TEST(UserDataUtilTest, GetDefaultContactSelectionForCompleteProfiles) {
   auto profile_b = std::make_unique<autofill::AutofillProfile>();
   autofill::test::SetProfileInfo(profile_b.get(), "Berta", "", "West",
                                  "berta.west@gmail.com", "", "", "", "", "", "",
@@ -113,7 +113,7 @@
   options.request_payer_name = true;
   options.request_payer_email = true;
 
-  EXPECT_THAT(GetDefaultProfile(options, profiles), 1);
+  EXPECT_THAT(GetDefaultContactProfile(options, profiles), 1);
 }
 
 TEST(UserDataUtilTest, GetDefaultSelectionForDefaultEmail) {
@@ -146,7 +146,89 @@
   options.request_payer_phone = true;
   options.default_email = "adam.west@gmail.com";
 
-  EXPECT_THAT(GetDefaultProfile(options, profiles), 2);
+  EXPECT_THAT(GetDefaultContactProfile(options, profiles), 2);
+}
+
+TEST(UserDataUtilTest, SortsCompleteAddressesAlphabetically) {
+  auto profile_b = std::make_unique<autofill::AutofillProfile>();
+  autofill::test::SetProfileInfo(profile_b.get(), "Berta", "", "West", "", "",
+                                 "Brandschenkestrasse 110", "", "Zurich", "",
+                                 "8002", "CH", "");
+
+  auto profile_a = std::make_unique<autofill::AutofillProfile>();
+  autofill::test::SetProfileInfo(profile_a.get(), "Adam", "", "West", "", "",
+                                 "Brandschenkestrasse 110", "", "Zurich", "",
+                                 "8002", "CH", "");
+
+  // Specify profiles in reverse order to force sorting.
+  std::vector<std::unique_ptr<autofill::AutofillProfile>> profiles;
+  profiles.emplace_back(std::move(profile_b));
+  profiles.emplace_back(std::move(profile_a));
+
+  CollectUserDataOptions options;
+
+  std::vector<int> profile_indices =
+      autofill_assistant::SortAddressesByCompleteness(options, profiles);
+  EXPECT_THAT(profile_indices, SizeIs(profiles.size()));
+  EXPECT_THAT(profile_indices, ElementsAre(1, 0));
+}
+
+TEST(UserDataUtilTest, SortsAddressesByCompleteness) {
+  // Adding email address and phone number to demonstrate that they are not
+  // checked for completeness.
+  auto profile_no_street = std::make_unique<autofill::AutofillProfile>();
+  autofill::test::SetProfileInfo(profile_no_street.get(), "Adam", "", "West",
+                                 "adam.west@gmail.com", "", "", "", "Zurich",
+                                 "", "8002", "CH", "+41");
+
+  auto profile_complete = std::make_unique<autofill::AutofillProfile>();
+  autofill::test::SetProfileInfo(profile_complete.get(), "Berta", "", "West",
+                                 "", "", "Brandschenkestrasse 110", "",
+                                 "Zurich", "", "8002", "UK", "");
+
+  // Specify profiles in reverse order to force sorting.
+  std::vector<std::unique_ptr<autofill::AutofillProfile>> profiles;
+  profiles.emplace_back(std::move(profile_no_street));
+  profiles.emplace_back(std::move(profile_complete));
+
+  CollectUserDataOptions options;
+
+  std::vector<int> profile_indices =
+      autofill_assistant::SortAddressesByCompleteness(options, profiles);
+  EXPECT_THAT(profile_indices, SizeIs(profiles.size()));
+  EXPECT_THAT(profile_indices, ElementsAre(1, 0));
+}
+
+TEST(UserDataUtilTest, GetDefaultAddressSelectionForEmptyProfiles) {
+  std::vector<std::unique_ptr<autofill::AutofillProfile>> profiles;
+  CollectUserDataOptions options;
+
+  EXPECT_THAT(GetDefaultAddressProfile(options, profiles), -1);
+}
+
+TEST(UserDataUtilTest, GetDefaultAddressSelectionForCompleteProfiles) {
+  // Adding email address and phone number to demonstrate that they are not
+  // checked for completeness.
+  auto profile_with_irrelevant_details =
+      std::make_unique<autofill::AutofillProfile>();
+  autofill::test::SetProfileInfo(profile_with_irrelevant_details.get(), "Berta",
+                                 "berta.west@gmail.com", "West", "", "",
+                                 "Brandschenkestrasse 110", "", "Zurich", "",
+                                 "8002", "CH", "+41");
+
+  auto profile_complete = std::make_unique<autofill::AutofillProfile>();
+  autofill::test::SetProfileInfo(profile_complete.get(), "Adam", "", "West", "",
+                                 "", "Brandschenkestrasse 110", "", "Zurich",
+                                 "", "8002", "CH", "");
+
+  // Specify profiles in reverse order to force sorting.
+  std::vector<std::unique_ptr<autofill::AutofillProfile>> profiles;
+  profiles.emplace_back(std::move(profile_with_irrelevant_details));
+  profiles.emplace_back(std::move(profile_complete));
+
+  CollectUserDataOptions options;
+
+  EXPECT_THAT(GetDefaultAddressProfile(options, profiles), 1);
 }
 
 TEST(UserDataUtilTest, SortsCreditCardsByCompleteness) {
@@ -172,7 +254,7 @@
   CollectUserDataOptions options;
 
   std::vector<int> sorted_indices =
-      SortByCompleteness(options, payment_instruments);
+      SortPaymentInstrumentsByCompleteness(options, payment_instruments);
   EXPECT_THAT(sorted_indices, SizeIs(payment_instruments.size()));
   EXPECT_THAT(sorted_indices, ElementsAre(1, 0));
 }
@@ -200,7 +282,7 @@
   CollectUserDataOptions options;
 
   std::vector<int> sorted_indices =
-      SortByCompleteness(options, payment_instruments);
+      SortPaymentInstrumentsByCompleteness(options, payment_instruments);
   EXPECT_THAT(sorted_indices, SizeIs(payment_instruments.size()));
   EXPECT_THAT(sorted_indices, ElementsAre(1, 0));
 }
@@ -253,7 +335,7 @@
   options.require_billing_postal_code = true;
 
   std::vector<int> sorted_indices =
-      SortByCompleteness(options, payment_instruments);
+      SortPaymentInstrumentsByCompleteness(options, payment_instruments);
   EXPECT_THAT(sorted_indices, SizeIs(payment_instruments.size()));
   EXPECT_THAT(sorted_indices, ElementsAre(2, 1, 0));
 }
diff --git a/components/browsing_data/core/history_notice_utils.cc b/components/browsing_data/core/history_notice_utils.cc
index 36b7937..7dcc540 100644
--- a/components/browsing_data/core/history_notice_utils.cc
+++ b/components/browsing_data/core/history_notice_utils.cc
@@ -57,16 +57,37 @@
     const syncer::SyncService* sync_service,
     history::WebHistoryService* history_service,
     base::OnceCallback<void(bool)> callback) {
+  IsHistoryRecordingEnabledAndCanBeUsed(
+      sync_service, history_service,
+      base::BindOnce(
+          [](base::OnceCallback<void(bool)> callback,
+             const base::Optional<bool>& history_recording_enabled) {
+            std::move(callback).Run(history_recording_enabled.value_or(false));
+          },
+          std::move(callback)));
+}
+
+void IsHistoryRecordingEnabledAndCanBeUsed(
+    const syncer::SyncService* sync_service,
+    history::WebHistoryService* history_service,
+    base::OnceCallback<void(const base::Optional<bool>&)> callback) {
   if (!sync_service || !sync_service->IsSyncFeatureActive() ||
       !sync_service->GetActiveDataTypes().Has(
           syncer::HISTORY_DELETE_DIRECTIVES) ||
-      sync_service->GetUserSettings()->IsUsingSecondaryPassphrase() ||
       !history_service) {
+    std::move(callback).Run(base::nullopt);
+    return;
+  }
+
+  if (sync_service->GetUserSettings()->IsUsingSecondaryPassphrase()) {
+    // The user has a custom passphrase. The data is encrypted and can not be
+    // used.
     std::move(callback).Run(false);
     return;
   }
+
   net::PartialNetworkTrafficAnnotationTag partial_traffic_annotation =
-      net::DefinePartialNetworkTrafficAnnotation("history_notice_utils_notice",
+      net::DefinePartialNetworkTrafficAnnotation("history_recording_enabled",
                                                  "web_history_service", R"(
       semantics {
         description:
@@ -75,12 +96,12 @@
           "use Google services' option enabled in the Activity controls of "
           "their Google account. This is done for users who sync their "
           "browsing history without a custom passphrase in order to show "
-          "information about history.google.com on the history page and in "
-          "the Clear Browsing Data dialog."
+          "information about history.google.com on the history page, "
+          "the settings sync setup page and in the Clear Browsing Data dialog."
         trigger:
           "This request is sent when user opens the history page or the "
-          "Clear Browsing Data dialog and history sync without a custom "
-          "passphrase is (re)enabled."
+          "settings sync setup page or the Clear Browsing Data dialog and "
+          "history sync without a custom passphrase is (re)enabled."
         data:
           "An OAuth2 token authenticating the user."
       }
@@ -114,6 +135,7 @@
   // after processing both callbacks.
   MergeBooleanCallbacks* merger =
       new MergeBooleanCallbacks(2, std::move(callback));
+
   net::PartialNetworkTrafficAnnotationTag partial_traffic_annotation =
       net::DefinePartialNetworkTrafficAnnotation("history_notice_utils_popup",
                                                  "web_history_service", R"(
@@ -138,8 +160,13 @@
             }
           })");
   history_service->QueryWebAndAppActivity(
-      base::BindOnce(&MergeBooleanCallbacks::RunCallback,
-                     base::Unretained(merger)),
+      base::BindOnce(
+          [](base::OnceCallback<void(bool)> callback,
+             const base::Optional<bool>& history_recording_enabled) {
+            std::move(callback).Run(history_recording_enabled.value_or(false));
+          },
+          base::BindOnce(&MergeBooleanCallbacks::RunCallback,
+                         base::Unretained(merger))),
       partial_traffic_annotation);
   history_service->QueryOtherFormsOfBrowsingHistory(
       channel,
diff --git a/components/browsing_data/core/history_notice_utils.h b/components/browsing_data/core/history_notice_utils.h
index ff51743..851393fd 100644
--- a/components/browsing_data/core/history_notice_utils.h
+++ b/components/browsing_data/core/history_notice_utils.h
@@ -8,6 +8,7 @@
 #include <string>
 
 #include "base/callback_forward.h"
+#include "base/optional.h"
 
 namespace history {
 class WebHistoryService;
@@ -23,6 +24,21 @@
 
 namespace browsing_data {
 
+// Whether history recording is enabled and can be used to provide personalized
+// experience. The prior is true if all the following is true:
+// - User is syncing and sync history is on.
+// - Data is not encrypted with custom passphrase.
+// - User has enabled 'Include Chrome browsing history and activity from
+//   websites and apps that use Google services' in the |Web and App Activity|
+//   of their Google Account.
+// The response is returned in |callback|. The response is base::nullopt if the
+// sWAA bit could not be retrieved (i.e. the history service has not been
+// created yet).
+void IsHistoryRecordingEnabledAndCanBeUsed(
+    const syncer::SyncService* sync_service,
+    history::WebHistoryService* history_service,
+    base::OnceCallback<void(const base::Optional<bool>&)> callback);
+
 // Whether the Clear Browsing Data UI should show a notice about the existence
 // of other forms of browsing history stored in user's account. The response
 // is returned in a |callback|.
diff --git a/components/history/core/browser/web_history_service.cc b/components/history/core/browser/web_history_service.cc
index e1f687a..109452c1 100644
--- a/components/history/core/browser/web_history_service.cc
+++ b/components/history/core/browser/web_history_service.cc
@@ -629,17 +629,17 @@
   pending_web_and_app_activity_requests_.erase(request);
 
   std::unique_ptr<base::DictionaryValue> response_value;
-  bool web_and_app_activity_enabled = false;
-
   if (success) {
     response_value = ReadResponse(request);
-    if (response_value) {
-      response_value->GetBoolean(
-          "history_recording_enabled", &web_and_app_activity_enabled);
+    bool web_and_app_activity_enabled = false;
+    if (response_value &&
+        response_value->GetBoolean("history_recording_enabled",
+                                   &web_and_app_activity_enabled)) {
+      std::move(callback).Run(web_and_app_activity_enabled);
+      return;
     }
   }
-
-  std::move(callback).Run(web_and_app_activity_enabled);
+  std::move(callback).Run(base::nullopt);
 }
 
 void WebHistoryService::QueryOtherFormsOfBrowsingHistoryCompletionCallback(
diff --git a/components/history/core/browser/web_history_service.h b/components/history/core/browser/web_history_service.h
index a7acd29..8660b9a1 100644
--- a/components/history/core/browser/web_history_service.h
+++ b/components/history/core/browser/web_history_service.h
@@ -89,7 +89,8 @@
   using AudioWebHistoryCallback =
       base::OnceCallback<void(bool success, bool new_enabled_value)>;
 
-  using QueryWebAndAppActivityCallback = base::OnceCallback<void(bool success)>;
+  using QueryWebAndAppActivityCallback = base::OnceCallback<void(
+      const base::Optional<bool>& history_recording_enabled)>;
 
   using QueryOtherFormsOfBrowsingHistoryCallback =
       base::OnceCallback<void(bool success)>;
@@ -211,7 +212,7 @@
   // completed. Unpacks the response and calls |callback|, which is the original
   // callback that was passed to QueryOtherFormsOfBrowsingHistory().
   void QueryOtherFormsOfBrowsingHistoryCompletionCallback(
-      WebHistoryService::QueryWebAndAppActivityCallback callback,
+      WebHistoryService::QueryOtherFormsOfBrowsingHistoryCallback callback,
       WebHistoryService::Request* request,
       bool success);
 
diff --git a/components/invalidation/impl/per_user_topic_subscription_manager.cc b/components/invalidation/impl/per_user_topic_subscription_manager.cc
index 051bc7db..05adbfc 100644
--- a/components/invalidation/impl/per_user_topic_subscription_manager.cc
+++ b/components/invalidation/impl/per_user_topic_subscription_manager.cc
@@ -409,8 +409,6 @@
   pending_subscriptions_[topic]->completion_callback = base::BindOnce(
       &PerUserTopicSubscriptionManager::SubscriptionFinishedForTopic,
       base::Unretained(this));
-  // TODO(crbug.com/1020117): We already called InformOfRequest(false) before in
-  // SubscriptionFinishedForTopic(), should probably not call it again here?
   pending_subscriptions_[topic]->request_backoff_.InformOfRequest(false);
   pending_subscriptions_[topic]->request_retry_timer_.Start(
       FROM_HERE,
@@ -429,7 +427,6 @@
     ActOnSuccessfulSubscription(topic, private_topic_name, type);
   } else {
     auto it = pending_subscriptions_.find(topic);
-    it->second->request_backoff_.InformOfRequest(false);
     if (code.IsAuthFailure()) {
       // Re-request access token and try subscription requests again.
       RequestAccessToken();
diff --git a/components/invalidation/impl/per_user_topic_subscription_manager_unittest.cc b/components/invalidation/impl/per_user_topic_subscription_manager_unittest.cc
index 8078012..a801481f 100644
--- a/components/invalidation/impl/per_user_topic_subscription_manager_unittest.cc
+++ b/components/invalidation/impl/per_user_topic_subscription_manager_unittest.cc
@@ -181,8 +181,13 @@
         CreateStatusForTest(net::OK, std::string() /* response_body */));
   }
 
+  void FastForwardTimeBy(base::TimeDelta delta) {
+    task_environment_.FastForwardBy(delta);
+  }
+
  private:
-  base::test::SingleThreadTaskEnvironment task_environment_;
+  base::test::SingleThreadTaskEnvironment task_environment_{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
   data_decoder::test::InProcessDataDecoder in_process_data_decoder_;
   network::TestURLLoaderFactory url_loader_factory_;
   TestingPrefServiceSimple pref_service_;
@@ -255,18 +260,40 @@
   ASSERT_TRUE(per_user_topic_subscription_manager->GetSubscribedTopicsForTest()
                   .empty());
 
+  // The first subscription attempt will fail.
   AddCorrectSubscriptionResponce(
-      /* private_topic */ std::string(), kFakeInstanceIdToken,
+      /*private_topic=*/std::string(), kFakeInstanceIdToken,
       net::HTTP_INTERNAL_SERVER_ERROR);
 
   per_user_topic_subscription_manager->UpdateSubscribedTopics(
       ids, kFakeInstanceIdToken);
   base::RunLoop().RunUntilIdle();
 
+  // Since the subscriptions failed, the requests should still be pending.
   EXPECT_TRUE(per_user_topic_subscription_manager->GetSubscribedTopicsForTest()
                   .empty());
   EXPECT_FALSE(
       per_user_topic_subscription_manager->HaveAllRequestsFinishedForTest());
+
+  // The second attempt will succeed.
+  AddCorrectSubscriptionResponce();
+
+  // Initial backoff is 2 seconds with 20% jitter, so the minimum possible delay
+  // is 1600ms. Advance time to just before that; nothing should have changed
+  // yet.
+  FastForwardTimeBy(base::TimeDelta::FromMilliseconds(1500));
+  EXPECT_TRUE(per_user_topic_subscription_manager->GetSubscribedTopicsForTest()
+                  .empty());
+  EXPECT_FALSE(
+      per_user_topic_subscription_manager->HaveAllRequestsFinishedForTest());
+
+  // The maximum backoff is 2 seconds; advance to just past that. Now all
+  // subscriptions should have finished.
+  FastForwardTimeBy(base::TimeDelta::FromMilliseconds(600));
+  EXPECT_FALSE(per_user_topic_subscription_manager->GetSubscribedTopicsForTest()
+                   .empty());
+  EXPECT_TRUE(
+      per_user_topic_subscription_manager->HaveAllRequestsFinishedForTest());
 }
 
 TEST_F(PerUserTopicSubscriptionManagerTest, ShouldRepeatRequestsOnForbidden) {
diff --git a/components/metrics/metrics_log.h b/components/metrics/metrics_log.h
index 821835a..fc3afba 100644
--- a/components/metrics/metrics_log.h
+++ b/components/metrics/metrics_log.h
@@ -166,9 +166,12 @@
 
   LogType log_type() const { return log_type_; }
 
+  // Exposed for the sake of mocking/accessing in test code.
+  ChromeUserMetricsExtension* UmaProtoForTest() { return &uma_proto_; }
+
  protected:
   // Exposed for the sake of mocking/accessing in test code.
-
+  // TODO(1034679): migrate to public UmaProtoForTest() method.
   ChromeUserMetricsExtension* uma_proto() { return &uma_proto_; }
 
   // Exposed to allow subclass to access to export the uma_proto. Can be used
diff --git a/components/metrics/metrics_service.h b/components/metrics/metrics_service.h
index 7270f83..fa29a338 100644
--- a/components/metrics/metrics_service.h
+++ b/components/metrics/metrics_service.h
@@ -175,8 +175,16 @@
     return &synthetic_trial_registry_;
   }
 
+  // Test hook to close out the current log after adding any last information.
+  void CloseCurrentLogForTest() { CloseCurrentLog(); }
+
+  MetricsLogStore* LogStoreForTest() {
+    return reporting_service_.metrics_log_store();
+  }
+
  protected:
   // Exposed for testing.
+  // TODO(1034679): migrate these to public FooForTest() methods.
   MetricsLogManager* log_manager() { return &log_manager_; }
   MetricsLogStore* log_store() {
     return reporting_service_.metrics_log_store();
diff --git a/components/module_installer/android/java/src/org/chromium/components/module_installer/builder/Module.java b/components/module_installer/android/java/src/org/chromium/components/module_installer/builder/Module.java
index f14fd56..256f06e 100644
--- a/components/module_installer/android/java/src/org/chromium/components/module_installer/builder/Module.java
+++ b/components/module_installer/android/java/src/org/chromium/components/module_installer/builder/Module.java
@@ -6,7 +6,7 @@
 
 import androidx.annotation.VisibleForTesting;
 
-import org.chromium.base.BuildConfig;
+import org.chromium.base.BundleUtils;
 import org.chromium.base.StrictModeContext;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.NativeMethods;
@@ -153,7 +153,7 @@
      * @return The module's {@link ModuleDescriptor}.
      */
     private static ModuleDescriptor loadModuleDescriptor(String name) {
-        if (!BuildConfig.IS_BUNDLE) {
+        if (!BundleUtils.isBundle()) {
             return new ModuleDescriptor() {
                 @Override
                 public String[] getLibraries() {
diff --git a/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/EngineFactory.java b/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/EngineFactory.java
index e72e19b07..6c9ea53 100644
--- a/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/EngineFactory.java
+++ b/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/EngineFactory.java
@@ -4,7 +4,7 @@
 
 package org.chromium.components.module_installer.engine;
 
-import org.chromium.base.BuildConfig;
+import org.chromium.base.BundleUtils;
 import org.chromium.base.CommandLine;
 
 /**
@@ -12,7 +12,7 @@
  */
 public class EngineFactory {
     public InstallEngine getEngine() {
-        if (!BuildConfig.IS_BUNDLE) {
+        if (!BundleUtils.isBundle()) {
             return new ApkEngine();
         }
         if (CommandLine.getInstance().hasSwitch("fake-feature-module-install")) {
diff --git a/components/module_installer/android/java/src/org/chromium/components/module_installer/util/ModuleUtil.java b/components/module_installer/android/java/src/org/chromium/components/module_installer/util/ModuleUtil.java
index 62023a0..682b149 100644
--- a/components/module_installer/android/java/src/org/chromium/components/module_installer/util/ModuleUtil.java
+++ b/components/module_installer/android/java/src/org/chromium/components/module_installer/util/ModuleUtil.java
@@ -4,7 +4,7 @@
 
 package org.chromium.components.module_installer.util;
 
-import org.chromium.base.BuildConfig;
+import org.chromium.base.BundleUtils;
 import org.chromium.base.annotations.MainDex;
 import org.chromium.components.module_installer.logger.SplitAvailabilityLogger;
 
@@ -20,7 +20,7 @@
      * unnecessary code (modules are not supported in APKs).
      */
     public static void recordStartupTime() {
-        if (!BuildConfig.IS_BUNDLE) return;
+        if (!BundleUtils.isBundle()) return;
 
         Timer.recordStartupTime();
     }
@@ -29,7 +29,7 @@
      * Records the start time in order to later report the install duration via UMA.
      */
     public static void recordModuleAvailability() {
-        if (!BuildConfig.IS_BUNDLE) return;
+        if (!BundleUtils.isBundle()) return;
 
         try (Timer timer = new Timer()) {
             initApplication();
@@ -41,7 +41,7 @@
      * Updates the CrashKey report containing modules currently present.
      */
     public static void updateCrashKeys() {
-        if (!BuildConfig.IS_BUNDLE) return;
+        if (!BundleUtils.isBundle()) return;
 
         try (Timer timer = new Timer()) {
             CrashKeyRecorder.updateCrashKeys();
@@ -52,7 +52,7 @@
      * Initializes the PlayCore SplitCompat framework.
      */
     public static void initApplication() {
-        if (!BuildConfig.IS_BUNDLE) return;
+        if (!BundleUtils.isBundle()) return;
 
         try (Timer timer = new Timer()) {
             SplitCompatInitializer.initApplication();
diff --git a/components/omnibox/browser/scored_history_match.cc b/components/omnibox/browser/scored_history_match.cc
index ff7997ca..c51c311fe 100644
--- a/components/omnibox/browser/scored_history_match.cc
+++ b/components/omnibox/browser/scored_history_match.cc
@@ -407,13 +407,15 @@
     while ((next_word_starts != end_word_starts) &&
            (*next_word_starts < (term_match.offset + term_offset)))
       ++next_word_starts;
-    // Add the match if it's before the position we start filtering at or
+    // Add the match if it's (1) before the position we start filtering at, (2)
     // after the position we stop filtering at (assuming we have a position
-    // to stop filtering at) or if it's at a word boundary.
+    // to stop filtering at), (3) at a word boundary, or (4) void of words (e.g.
+    // the term '-' contains no words).
     if ((term_match.offset < start_pos) ||
         ((end_pos != std::string::npos) && (term_match.offset >= end_pos)) ||
         ((next_word_starts != end_word_starts) &&
-         (*next_word_starts == term_match.offset + term_offset)))
+         (*next_word_starts == term_match.offset + term_offset)) ||
+        term_offset == term_match.length)
       filtered_matches.push_back(term_match);
   }
   return filtered_matches;
@@ -497,13 +499,16 @@
     }
     const bool at_word_boundary = (next_word_starts != end_word_starts) &&
                                   (*next_word_starts == term_word_offset);
+    // Terms such as '-' contain no words.
+    const bool term_has_no_words =
+        url_match.length == terms_to_word_starts_offsets[url_match.term_num];
     if (term_word_offset >= query_pos) {
       // The match is in the query or ref component.
-      DCHECK(at_word_boundary);
+      DCHECK(at_word_boundary || term_has_no_words);
       term_scores[url_match.term_num] += 5;
     } else if (term_word_offset >= path_pos) {
       // The match is in the path component.
-      DCHECK(at_word_boundary);
+      DCHECK(at_word_boundary || term_has_no_words);
       term_scores[url_match.term_num] += 8;
     } else if (term_word_offset >= host_pos) {
       if (term_word_offset < last_part_of_host_pos) {
@@ -519,7 +524,7 @@
     } else {
       // The match is in the protocol (a.k.a. scheme).
       // Matches not at a word boundary should have been filtered already.
-      DCHECK(at_word_boundary);
+      DCHECK(at_word_boundary || term_has_no_words);
       if (allow_scheme_matches_)
         term_scores[url_match.term_num] += 10;
     }
@@ -547,7 +552,10 @@
     if (word_num >= num_title_words_to_allow_)
       break;  // only count the first ten words
     DCHECK(next_word_starts != end_word_starts);
-    DCHECK_EQ(*next_word_starts, term_word_offset) << "not at word boundary";
+    DCHECK(*next_word_starts == term_word_offset ||
+           title_match.length ==
+               terms_to_word_starts_offsets[title_match.term_num])
+        << "not at word boundary";
     term_scores[title_match.term_num] += 8;
   }
   // TODO(mpearson): Restore logic for penalizing out-of-order matches.
diff --git a/components/omnibox/browser/scored_history_match_unittest.cc b/components/omnibox/browser/scored_history_match_unittest.cc
index 4a4112d..4b92625 100644
--- a/components/omnibox/browser/scored_history_match_unittest.cc
+++ b/components/omnibox/browser/scored_history_match_unittest.cc
@@ -628,7 +628,7 @@
 // once somewhere in the URL or title.
 TEST_F(ScoredHistoryMatchTest, GetTopicalityScore) {
   GURL url("http://abc.def.com/path1/path2?arg1=val1&arg2=val2#hash_fragment");
-  base::string16 title = ASCIIToUTF16("here is a title");
+  base::string16 title = ASCIIToUTF16("here is a - title");
   auto Score = [&](const char* term) {
     return GetTopicalityScoreOfTermAgainstURLAndTitle(ASCIIToUTF16(term), url,
                                                       title);
@@ -652,6 +652,7 @@
   const float protocol_mid_word_score = Score("tt");
   const float title_score = Score("her");
   const float title_mid_word_score = Score("er");
+  const float wordless_match_at_title_mid_word_score = Score("-");
   // Verify hostname and domain name > path > arg.
   EXPECT_GT(hostname_score, path_score);
   EXPECT_GT(domain_name_score, path_score);
@@ -673,6 +674,17 @@
   EXPECT_GT(arg_score, hostname_mid_word_score);
   EXPECT_GT(arg_score, domain_name_mid_word_score);
   EXPECT_GT(title_score, title_mid_word_score);
+  // Verify mid word scores are scored 0 unless 1) in the host or domain 2) or
+  // the match contains no words.
+  EXPECT_GT(hostname_mid_word_score, 0);
+  EXPECT_GT(domain_name_mid_word_score, 0);
+  EXPECT_EQ(tld_mid_word_score, 0);
+  EXPECT_EQ(path_mid_word_score, 0);
+  EXPECT_EQ(arg_mid_word_score, 0);
+  EXPECT_EQ(protocol_mid_word_score, 0);
+  EXPECT_EQ(title_mid_word_score, 0);
+  EXPECT_GT(wordless_match_at_title_mid_word_score, 0);
+  // Verify matches not at word starts score non 0 when they contain no words.
   // Check that title matches fit somewhere reasonable compared to the
   // various types of URL matches.
   EXPECT_GT(title_score, arg_score);
diff --git a/components/password_manager/core/browser/sync/password_sync_bridge.cc b/components/password_manager/core/browser/sync/password_sync_bridge.cc
index 9706506..6fd2369c 100644
--- a/components/password_manager/core/browser/sync/password_sync_bridge.cc
+++ b/components/password_manager/core/browser/sync/password_sync_bridge.cc
@@ -12,6 +12,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "build/build_config.h"
 #include "components/autofill/core/common/password_form.h"
 #include "components/password_manager/core/browser/password_manager_metrics_util.h"
 #include "components/password_manager/core/common/password_manager_features.h"
@@ -168,8 +169,20 @@
               .Serialize() == password_form.federation_origin.Serialize());
 }
 
+// Whether we should try to recover undecryptable local passwords by deleting
+// the local copy, to be replaced by the remote version coming from Sync during
+// merge.
 bool ShouldRecoverPasswordsDuringMerge() {
+  // Delete the local undecryptable copy under the following conditions:
+  // 1. This is MacOS only.
+  // 2. The more general feature kDeleteCorruptedPasswords is disabled.
+  //    kDeleteCorruptedPasswords takes cares of deleting undecryptable entities
+  //    for Sync and non-Sync users upon reading from the LoginDatabase.
+#if defined(OS_MACOSX) && !defined(OS_IOS)
   return !base::FeatureList::IsEnabled(features::kDeleteCorruptedPasswords);
+#else
+  return false;
+#endif
 }
 
 // A simple class for scoping a password store sync transaction. If the
diff --git a/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc b/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc
index bb38b88f..a2e48f1 100644
--- a/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc
+++ b/components/password_manager/core/browser/sync/password_sync_bridge_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/mock_callback.h"
+#include "build/build_config.h"
 #include "components/password_manager/core/browser/password_store_sync.h"
 #include "components/sync/base/client_tag_hash.h"
 #include "components/sync/model/data_batch.h"
@@ -789,6 +790,7 @@
                             mock_password_store_sync(), base::DoNothing());
 }
 
+#if defined(OS_MACOSX) && !defined(OS_IOS)
 // Tests that in case ReadAllLogins() during initial merge returns encryption
 // service failure, the bridge would try to do a DB clean up.
 TEST_F(PasswordSyncBridgeTest, ShouldDeleteUndecryptableLoginsDuringMerge) {
@@ -806,6 +808,7 @@
       bridge()->MergeSyncData(bridge()->CreateMetadataChangeList(), {});
   EXPECT_FALSE(error);
 }
+#endif
 
 TEST_F(PasswordSyncBridgeTest,
        ShouldDeleteSyncMetadataWhenApplyStopSyncChanges) {
diff --git a/components/password_manager/core/browser/sync/password_syncable_service.cc b/components/password_manager/core/browser/sync/password_syncable_service.cc
index 7906e09..bad5601 100644
--- a/components/password_manager/core/browser/sync/password_syncable_service.cc
+++ b/components/password_manager/core/browser/sync/password_syncable_service.cc
@@ -14,6 +14,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/utf_string_conversions.h"
+#include "build/build_config.h"
 #include "components/autofill/core/common/password_form.h"
 #include "components/password_manager/core/browser/password_manager_metrics_util.h"
 #include "components/password_manager/core/browser/password_store_sync.h"
@@ -450,8 +451,20 @@
   }
 }
 
+// Whether we should try to recover undecryptable local passwords by deleting
+// the local copy, to be replaced by the remote version coming from Sync during
+// merge.
 bool PasswordSyncableService::ShouldRecoverPasswordsDuringMerge() const {
+  // Delete the local undecryptable copy under the following conditions:
+  // 1. This is MacOS only.
+  // 2. The more general feature kDeleteCorruptedPasswords is disabled.
+  //    kDeleteCorruptedPasswords takes cares of deleting undecryptable entities
+  //    for Sync and non-Sync users upon reading from the LoginDatabase.
+#if defined(OS_MACOSX) && !defined(OS_IOS)
   return !base::FeatureList::IsEnabled(features::kDeleteCorruptedPasswords);
+#else
+  return false;
+#endif
 }
 
 syncer::SyncData SyncDataFromPassword(
diff --git a/components/password_manager/core/browser/sync/password_syncable_service_unittest.cc b/components/password_manager/core/browser/sync/password_syncable_service_unittest.cc
index 5b32031..fec1c9f 100644
--- a/components/password_manager/core/browser/sync/password_syncable_service_unittest.cc
+++ b/components/password_manager/core/browser/sync/password_syncable_service_unittest.cc
@@ -31,6 +31,7 @@
 using syncer::SyncData;
 using syncer::SyncDataList;
 using syncer::SyncError;
+using testing::_;
 using testing::AnyNumber;
 using testing::DoAll;
 using testing::ElementsAre;
@@ -41,7 +42,6 @@
 using testing::Return;
 using testing::SetArgPointee;
 using testing::UnorderedElementsAre;
-using testing::_;
 
 namespace password_manager {
 
@@ -515,8 +515,10 @@
                           syncer::PASSWORDS);
   EXPECT_CALL(*password_store(), FillAutofillableLogins(_))
       .WillOnce(Return(false));
+#if defined(OS_MACOSX) && !defined(OS_IOS)
   EXPECT_CALL(*password_store(), DeleteUndecryptableLogins())
       .WillOnce(Return(DatabaseCleanupResult::kDatabaseUnavailable));
+#endif
   EXPECT_CALL(*error_factory, CreateAndUploadError(_, _))
       .WillOnce(Return(error));
   // ActOnPasswordStoreChanges() below shouldn't generate any changes for Sync.
@@ -545,6 +547,7 @@
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
+#if defined(OS_MACOSX) && !defined(OS_IOS)
 // Test that passwords are recovered for Sync users using the older logic (i.e.
 // recover passwords only for Sync users) when the feature for deleting
 // corrupted passwords for all users is disabled.
@@ -563,6 +566,7 @@
       syncer::PASSWORDS, SyncDataList(), std::move(processor_), nullptr);
   EXPECT_FALSE(result.error().IsSet());
 }
+#endif
 
 class PasswordSyncableServiceTestWithDeleteCorruptedPasswords
     : public PasswordSyncableServiceTest {
@@ -597,6 +601,7 @@
   EXPECT_TRUE(result.error().IsSet());
 }
 
+#if defined(OS_MACOSX) && !defined(OS_IOS)
 // Database cleanup fails because encryption is unavailable.
 TEST_F(PasswordSyncableServiceTestWithoutDeleteCorruptedPasswords,
        FailedDeleteUndecryptableLogins) {
@@ -618,6 +623,7 @@
       std::move(error_factory));
   EXPECT_TRUE(result.error().IsSet());
 }
+#endif
 
 // Start syncing with an error in ProcessSyncChanges. Subsequent password store
 // updates shouldn't be propagated to Sync.
diff --git a/components/startup_metric_utils/browser/BUILD.gn b/components/startup_metric_utils/browser/BUILD.gn
index c975663..90cb4717 100644
--- a/components/startup_metric_utils/browser/BUILD.gn
+++ b/components/startup_metric_utils/browser/BUILD.gn
@@ -2,20 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-# We have 2 separate targets because //components/html_viewer requires :lib,
-# but has symbols that conflict with mojo symbols that :message_filter_lib
-# indirectly depends on.
-
-group("browser") {
-  testonly = true
-
-  deps = [
-    ":host",
-    ":lib",
-  ]
-}
-
-static_library("lib") {
+static_library("browser") {
   sources = [
     "startup_metric_utils.cc",
     "startup_metric_utils.h",
@@ -23,23 +10,6 @@
 
   deps = [
     "//base",
-    "//components/metrics:call_stack_profile_builder",
-    "//components/metrics:metrics",
-    "//components/prefs",
     "//components/version_info",
   ]
 }
-
-static_library("host") {
-  sources = [
-    "startup_metric_host_impl.cc",
-    "startup_metric_host_impl.h",
-  ]
-
-  deps = [
-    ":lib",
-    "//base",
-    "//components/startup_metric_utils/common:interfaces",
-    "//content/public/browser",
-  ]
-}
diff --git a/components/startup_metric_utils/browser/DEPS b/components/startup_metric_utils/browser/DEPS
index dba3d91d..857ff62 100644
--- a/components/startup_metric_utils/browser/DEPS
+++ b/components/startup_metric_utils/browser/DEPS
@@ -1,6 +1,3 @@
 include_rules = [
-  "+components/metrics",
   "+components/version_info",
-  "+content/public/browser",
-  "+mojo/public/cpp/bindings",
 ]
diff --git a/components/startup_metric_utils/browser/startup_metric_host_impl.cc b/components/startup_metric_utils/browser/startup_metric_host_impl.cc
deleted file mode 100644
index 6a09747e..0000000
--- a/components/startup_metric_utils/browser/startup_metric_host_impl.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/startup_metric_utils/browser/startup_metric_host_impl.h"
-
-#include <memory>
-
-#include "components/startup_metric_utils/browser/startup_metric_utils.h"
-#include "mojo/public/cpp/bindings/self_owned_receiver.h"
-
-namespace startup_metric_utils {
-
-StartupMetricHostImpl::StartupMetricHostImpl() = default;
-
-StartupMetricHostImpl::~StartupMetricHostImpl() = default;
-
-// static
-void StartupMetricHostImpl::Create(
-    mojo::PendingReceiver<mojom::StartupMetricHost> receiver) {
-  mojo::MakeSelfOwnedReceiver(std::make_unique<StartupMetricHostImpl>(),
-                              std::move(receiver));
-}
-
-void StartupMetricHostImpl::RecordRendererMainEntryTime(
-    base::TimeTicks renderer_main_entry_time) {
-  startup_metric_utils::RecordRendererMainEntryTime(renderer_main_entry_time);
-}
-
-}  // namespace startup_metric_utils
diff --git a/components/startup_metric_utils/browser/startup_metric_host_impl.h b/components/startup_metric_utils/browser/startup_metric_host_impl.h
deleted file mode 100644
index b1ebd35..0000000
--- a/components/startup_metric_utils/browser/startup_metric_host_impl.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef COMPONENTS_STARTUP_METRIC_UTILS_BROWSER_STARTUP_METRIC_HOST_IMPL_H_
-#define COMPONENTS_STARTUP_METRIC_UTILS_BROWSER_STARTUP_METRIC_HOST_IMPL_H_
-
-#include <stdint.h>
-
-#include "base/macros.h"
-#include "base/time/time.h"
-#include "components/startup_metric_utils/common/startup_metric.mojom.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
-
-namespace startup_metric_utils {
-
-class StartupMetricHostImpl : public mojom::StartupMetricHost {
- public:
-  StartupMetricHostImpl();
-  ~StartupMetricHostImpl() override;
-
-  static void Create(mojo::PendingReceiver<mojom::StartupMetricHost> receiver);
-
- private:
-  void RecordRendererMainEntryTime(
-      base::TimeTicks renderer_main_entry_time) override;
-
-  DISALLOW_COPY_AND_ASSIGN(StartupMetricHostImpl);
-};
-
-}  // namespace startup_metric_utils
-
-#endif  // COMPONENTS_STARTUP_METRIC_UTILS_BROWSER_STARTUP_METRIC_HOST_IMPL_H_
diff --git a/components/startup_metric_utils/browser/startup_metric_utils.cc b/components/startup_metric_utils/browser/startup_metric_utils.cc
index d470948..9cb3a69 100644
--- a/components/startup_metric_utils/browser/startup_metric_utils.cc
+++ b/components/startup_metric_utils/browser/startup_metric_utils.cc
@@ -44,8 +44,6 @@
 
 base::TimeTicks g_browser_main_entry_point_ticks;
 
-base::TimeTicks g_renderer_main_entry_point_ticks;
-
 base::TimeTicks g_browser_exe_main_entry_point_ticks;
 
 base::TimeTicks g_message_loop_start_ticks;
@@ -335,15 +333,6 @@
   return trace_ticks_base - delta_since_base;
 }
 
-void RecordRendererMainEntryHistogram() {
-  if (!g_browser_main_entry_point_ticks.is_null() &&
-      !g_renderer_main_entry_point_ticks.is_null()) {
-    UMA_HISTOGRAM_AND_TRACE_WITH_TEMPERATURE(
-        UMA_HISTOGRAM_LONG_TIMES_100, "Startup.BrowserMainToRendererMain",
-        g_browser_main_entry_point_ticks, g_renderer_main_entry_point_ticks);
-  }
-}
-
 void AddStartupEventsForTelemetry()
 {
   DCHECK(!g_browser_main_entry_point_ticks.is_null());
@@ -490,13 +479,6 @@
   g_browser_open_tabs_duration = delta;
 }
 
-void RecordRendererMainEntryTime(base::TimeTicks ticks) {
-  // Record the renderer main entry time, but don't log the UMA metric
-  // immediately because the startup temperature is not known yet.
-  if (g_renderer_main_entry_point_ticks.is_null())
-    g_renderer_main_entry_point_ticks = ticks;
-}
-
 void RecordFirstWebContentsNonEmptyPaint(
     base::TimeTicks now,
     base::TimeTicks render_process_host_init_time) {
@@ -505,10 +487,6 @@
     return;
   is_first_call = false;
 
-  // Log Startup.BrowserMainToRendererMain now that the first renderer main
-  // entry time and the startup temperature are known.
-  RecordRendererMainEntryHistogram();
-
   if (!ShouldLogStartupHistogram())
     return;
 
diff --git a/components/startup_metric_utils/browser/startup_metric_utils.h b/components/startup_metric_utils/browser/startup_metric_utils.h
index c59f7713..bdca6a8 100644
--- a/components/startup_metric_utils/browser/startup_metric_utils.h
+++ b/components/startup_metric_utils/browser/startup_metric_utils.h
@@ -55,12 +55,6 @@
 // Call this with the time delta that the browser spent opening its tabs.
 void RecordBrowserOpenTabsDelta(base::TimeDelta delta);
 
-// Call this with a renderer main entry time. The value provided for the first
-// call to this function is used to compute
-// Startup.LoadTime.BrowserMainToRendererMain. Further calls to this
-// function are ignored.
-void RecordRendererMainEntryTime(base::TimeTicks ticks);
-
 // Call this with the time when the first web contents had a non-empty paint,
 // only if the first web contents was unimpeded in its attempt to do so.
 void RecordFirstWebContentsNonEmptyPaint(
diff --git a/components/startup_metric_utils/common/BUILD.gn b/components/startup_metric_utils/common/BUILD.gn
deleted file mode 100644
index d19682d..0000000
--- a/components/startup_metric_utils/common/BUILD.gn
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright 2015 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("//mojo/public/tools/bindings/mojom.gni")
-
-mojom("interfaces") {
-  sources = [
-    "startup_metric.mojom",
-  ]
-  deps = [
-    "//mojo/public/mojom/base",
-  ]
-}
diff --git a/components/startup_metric_utils/common/OWNERS b/components/startup_metric_utils/common/OWNERS
deleted file mode 100644
index 08850f4..0000000
--- a/components/startup_metric_utils/common/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-per-file *.mojom=set noparent
-per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/components/startup_metric_utils/common/startup_metric.mojom b/components/startup_metric_utils/common/startup_metric.mojom
deleted file mode 100644
index 276bd3c..0000000
--- a/components/startup_metric_utils/common/startup_metric.mojom
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module startup_metric_utils.mojom;
-
-import "mojo/public/mojom/base/time.mojom";
-
-interface StartupMetricHost {
-  RecordRendererMainEntryTime(
-      mojo_base.mojom.TimeTicks renderer_main_entry_time);
-};
diff --git a/components/tracing/common/trace_startup_config.cc b/components/tracing/common/trace_startup_config.cc
index 152c51a..25412258 100644
--- a/components/tracing/common/trace_startup_config.cc
+++ b/components/tracing/common/trace_startup_config.cc
@@ -38,13 +38,13 @@
     FILE_PATH_LITERAL("/data/local/chrome-trace-config.json");
 
 const char kDefaultStartupCategories[] =
-    "startup,browser,toplevel,disabled-by-default-toplevel.flow,ipc,disabled-"
-    "by-default-ipc.flow,EarlyJava,cc,Java,navigation,loading,gpu,"
-    "disabled-by-default-cpu_profiler,download_service,-*";
+    "startup,browser,toplevel,disabled-by-default-toplevel.flow,ipc,EarlyJava,"
+    "cc,Java,navigation,loading,gpu,disabled-by-default-cpu_profiler,download_"
+    "service,-*";
 #else
 const char kDefaultStartupCategories[] =
     "benchmark,toplevel,startup,disabled-by-default-file,disabled-by-default-"
-    "toplevel.flow,disabled-by-default-ipc.flow,download_service,-*";
+    "toplevel.flow,download_service,-*";
 #endif
 
 // String parameters that can be used to parse the trace config file content.
diff --git a/content/browser/android/synchronous_compositor_host.cc b/content/browser/android/synchronous_compositor_host.cc
index 36c5f9e..5776f44 100644
--- a/content/browser/android/synchronous_compositor_host.cc
+++ b/content/browser/android/synchronous_compositor_host.cc
@@ -156,6 +156,7 @@
 }
 
 SynchronousCompositorHost::~SynchronousCompositorHost() {
+  SetBeginFrameSource(nullptr);
   client_->DidDestroyCompositor(this, frame_sink_id_);
   bridge_->HostDestroyedOnUIThread();
 }
@@ -435,7 +436,10 @@
 void SynchronousCompositorHost::DidPresentCompositorFrames(
     viz::FrameTimingDetailsMap timing_details,
     uint32_t frame_token) {
-  rwhva_->DidPresentCompositorFrames(timing_details);
+  timing_details_ = timing_details;
+  if (!timing_details_.empty())
+    AddBeginFrameRequest(BEGIN_FRAME);
+
   UpdatePresentedFrameToken(frame_token);
 }
 
@@ -509,25 +513,13 @@
                          over_scroll_params.current_fling_velocity);
 }
 
-void SynchronousCompositorHost::BeginFrame(
-    ui::WindowAndroid* window_android,
-    const viz::BeginFrameArgs& args,
-    const viz::FrameTimingDetailsMap& timing_details) {
-  if (!bridge_->WaitAfterVSyncOnUIThread(window_android))
-    return;
-  mojom::SynchronousCompositor* compositor = GetSynchronousCompositor();
-  DCHECK(compositor);
-  compositor->BeginFrame(args, timing_details);
-}
-
-void SynchronousCompositorHost::SetBeginFramePaused(bool paused) {
-  begin_frame_paused_ = paused;
-  if (mojom::SynchronousCompositor* compositor = GetSynchronousCompositor())
-    compositor->SetBeginFrameSourcePaused(paused);
-}
-
 void SynchronousCompositorHost::SetNeedsBeginFrames(bool needs_begin_frames) {
-  rwhva_->host()->SetNeedsBeginFrame(needs_begin_frames);
+  TRACE_EVENT1("cc", "SynchronousCompositorHost::SetNeedsBeginFrames",
+               "needs_begin_frames", needs_begin_frames);
+  if (needs_begin_frames)
+    AddBeginFrameRequest(PERSISTENT_BEGIN_FRAME);
+  else
+    ClearBeginFrameRequest(PERSISTENT_BEGIN_FRAME);
 }
 
 void SynchronousCompositorHost::LayerTreeFrameSinkCreated() {
@@ -539,8 +531,7 @@
   DCHECK(compositor);
   compositor->SetMemoryPolicy(bytes_limit_);
 
-  if (begin_frame_paused_)
-    compositor->SetBeginFrameSourcePaused(begin_frame_paused_);
+  SendBeginFramePaused();
 }
 
 void SynchronousCompositorHost::UpdateState(
@@ -604,4 +595,135 @@
   return sync_compositor_.get();
 }
 
+void SynchronousCompositorHost::OnBeginFrame(const viz::BeginFrameArgs& args) {
+  TRACE_EVENT0("cc,benchmark", "SynchronousCompositorHost::OnBeginFrame");
+
+  // In sync mode, we disregard missed frame args to ensure that
+  // SynchronousCompositorBrowserFilter::SyncStateAfterVSync will be called
+  // during WindowAndroid::WindowBeginFrameSource::OnVSync() observer iteration.
+  if (args.type == viz::BeginFrameArgs::MISSED)
+    return;
+
+  // We need to check this before |outstanding_begin_frame_requests_| will be
+  // changed by ClearBeginFrameRequest below.
+  bool needs_begin_frame =
+      (outstanding_begin_frame_requests_ & BEGIN_FRAME) ||
+      (outstanding_begin_frame_requests_ & PERSISTENT_BEGIN_FRAME);
+
+  // Update |last_begin_frame_args_| before handling
+  // |outstanding_begin_frame_requests_| to prevent the BeginFrameSource from
+  // sending the same MISSED args in infinite recursion.
+  last_begin_frame_args_ = args;
+
+  ClearBeginFrameRequest(BEGIN_FRAME);
+
+  if (on_compute_scroll_called_ || !rwhva_->is_currently_scrolling_viewport()) {
+    rwhva_->host()->ProgressFlingIfNeeded(args.frame_time);
+  }
+
+  if (needs_begin_frame) {
+    SendBeginFrame(args);
+  }
+}
+
+const viz::BeginFrameArgs& SynchronousCompositorHost::LastUsedBeginFrameArgs()
+    const {
+  return last_begin_frame_args_;
+}
+
+void SynchronousCompositorHost::OnBeginFrameSourcePausedChanged(bool paused) {
+  if (paused != begin_frame_paused_) {
+    begin_frame_paused_ = paused;
+    SendBeginFramePaused();
+  }
+}
+
+bool SynchronousCompositorHost::WantsAnimateOnlyBeginFrames() const {
+  return false;
+}
+
+void SynchronousCompositorHost::SendBeginFramePaused() {
+  bool paused = begin_frame_paused_ || !observed_root_window_;
+
+  if (mojom::SynchronousCompositor* compositor = GetSynchronousCompositor())
+    compositor->SetBeginFrameSourcePaused(paused);
+}
+
+void SynchronousCompositorHost::SendBeginFrame(viz::BeginFrameArgs args) {
+  TRACE_EVENT2("cc", "SynchronousCompositorHost::SendBeginFrame",
+               "frame_number", args.frame_id.sequence_number, "frame_time_us",
+               args.frame_time);
+
+  DCHECK(observed_root_window_);
+  if (!bridge_->WaitAfterVSyncOnUIThread(observed_root_window_))
+    return;
+  mojom::SynchronousCompositor* compositor = GetSynchronousCompositor();
+  DCHECK(compositor);
+  compositor->BeginFrame(args, timing_details_);
+  timing_details_.clear();
+}
+
+void SynchronousCompositorHost::StartObservingRootWindow(
+    ui::WindowAndroid* window) {
+  DCHECK(window);
+  if (observed_root_window_) {
+    DCHECK(observed_root_window_ == window);
+    return;
+  }
+
+  observed_root_window_ = window;
+  SendBeginFramePaused();
+  SetBeginFrameSource(window->GetBeginFrameSource());
+}
+
+void SynchronousCompositorHost::StopObservingRootWindow() {
+  if (!observed_root_window_)
+    return;
+
+  // Reset window state variables to their defaults.
+  observed_root_window_ = nullptr;
+  SendBeginFramePaused();
+  SetBeginFrameSource(nullptr);
+  DCHECK(!begin_frame_source_);
+}
+
+void SynchronousCompositorHost::SetBeginFrameSource(
+    viz::BeginFrameSource* begin_frame_source) {
+  if (begin_frame_source_ == begin_frame_source)
+    return;
+
+  if (begin_frame_source_ && outstanding_begin_frame_requests_)
+    begin_frame_source_->RemoveObserver(this);
+  begin_frame_source_ = begin_frame_source;
+  if (begin_frame_source_ && outstanding_begin_frame_requests_)
+    begin_frame_source_->AddObserver(this);
+}
+
+void SynchronousCompositorHost::AddBeginFrameRequest(
+    BeginFrameRequestType request) {
+  uint32_t prior_requests = outstanding_begin_frame_requests_;
+  outstanding_begin_frame_requests_ = prior_requests | request;
+
+  // Note that if we don't currently have a BeginFrameSource, outstanding begin
+  // frame requests will be pushed if/when we get one during
+  // |StartObservingRootWindow()| or when the DelegatedFrameHostAndroid sets it.
+  viz::BeginFrameSource* source = begin_frame_source_;
+  if (source && outstanding_begin_frame_requests_ && !prior_requests)
+    source->AddObserver(this);
+}
+
+void SynchronousCompositorHost::ClearBeginFrameRequest(
+    BeginFrameRequestType request) {
+  uint32_t prior_requests = outstanding_begin_frame_requests_;
+  outstanding_begin_frame_requests_ = prior_requests & ~request;
+
+  viz::BeginFrameSource* source = begin_frame_source_;
+  if (source && !outstanding_begin_frame_requests_ && prior_requests)
+    source->RemoveObserver(this);
+}
+
+void SynchronousCompositorHost::RequestOneBeginFrame() {
+  AddBeginFrameRequest(BEGIN_FRAME);
+}
+
 }  // namespace content
diff --git a/content/browser/android/synchronous_compositor_host.h b/content/browser/android/synchronous_compositor_host.h
index 3f4f57c..1264d19 100644
--- a/content/browser/android/synchronous_compositor_host.h
+++ b/content/browser/android/synchronous_compositor_host.h
@@ -14,6 +14,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/single_thread_task_runner.h"
+#include "components/viz/common/frame_sinks/begin_frame_source.h"
 #include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/surfaces/frame_sink_id.h"
 #include "content/common/input/synchronous_compositor.mojom.h"
@@ -39,7 +40,8 @@
 struct SyncCompositorCommonRendererParams;
 
 class SynchronousCompositorHost : public SynchronousCompositor,
-                                  public mojom::SynchronousCompositorHost {
+                                  public mojom::SynchronousCompositorHost,
+                                  public viz::BeginFrameObserver {
  public:
   static std::unique_ptr<SynchronousCompositorHost> Create(
       RenderWidgetHostViewAndroid* rwhva,
@@ -68,10 +70,6 @@
 
   ui::ViewAndroid::CopyViewCallback GetCopyViewCallback();
   void DidOverscroll(const ui::DidOverscrollParams& over_scroll_params);
-  void BeginFrame(ui::WindowAndroid* window_android,
-                  const viz::BeginFrameArgs& args,
-                  const viz::FrameTimingDetailsMap& timing_details);
-  void SetBeginFramePaused(bool paused);
 
   // Called by SynchronousCompositorSyncCallBridge.
   void UpdateFrameMetaData(uint32_t version,
@@ -84,14 +82,27 @@
 
   RenderProcessHost* GetRenderProcessHost();
 
+  void StartObservingRootWindow(ui::WindowAndroid* window);
+  void StopObservingRootWindow();
+  void RequestOneBeginFrame();
+
   // mojom::SynchronousCompositorHost overrides.
   void LayerTreeFrameSinkCreated() override;
   void UpdateState(const SyncCompositorCommonRendererParams& params) override;
   void SetNeedsBeginFrames(bool needs_begin_frames) override;
 
-  bool on_compute_scroll_called() { return on_compute_scroll_called_; }
+  // viz::BeginFrameObserver implementation.
+  void OnBeginFrame(const viz::BeginFrameArgs& args) override;
+  const viz::BeginFrameArgs& LastUsedBeginFrameArgs() const override;
+  void OnBeginFrameSourcePausedChanged(bool paused) override;
+  bool WantsAnimateOnlyBeginFrames() const override;
 
  private:
+  enum BeginFrameRequestType {
+    BEGIN_FRAME = 1 << 0,
+    PERSISTENT_BEGIN_FRAME = 1 << 1
+  };
+
   class ScopedSendZeroMemory;
   struct SharedMemoryWithSize;
   friend class ScopedSetZeroMemory;
@@ -114,6 +125,12 @@
   void UpdateRootLayerStateOnClient();
   void UpdatePresentedFrameToken(uint32_t frame_token);
 
+  void SendBeginFramePaused();
+  void SendBeginFrame(viz::BeginFrameArgs args);
+  void SetBeginFrameSource(viz::BeginFrameSource* begin_frame_source);
+  void AddBeginFrameRequest(BeginFrameRequestType request);
+  void ClearBeginFrameRequest(BeginFrameRequestType request);
+
   RenderWidgetHostViewAndroid* const rwhva_;
   SynchronousCompositorClient* const client_;
   const viz::FrameSinkId frame_sink_id_;
@@ -164,6 +181,16 @@
 
   scoped_refptr<SynchronousCompositorSyncCallBridge> bridge_;
 
+  // Indicates whether and for what reason a request for begin frames has been
+  // issued. Used to control action dispatch at the next |OnBeginFrame()| call.
+  uint32_t outstanding_begin_frame_requests_ = 0;
+
+  // The begin frame source being observed.  Null if none.
+  viz::BeginFrameSource* begin_frame_source_ = nullptr;
+  viz::BeginFrameArgs last_begin_frame_args_;
+  ui::WindowAndroid* observed_root_window_ = nullptr;
+  viz::FrameTimingDetailsMap timing_details_;
+
   DISALLOW_COPY_AND_ASSIGN(SynchronousCompositorHost);
 };
 
diff --git a/content/browser/appcache/appcache_update_job.cc b/content/browser/appcache/appcache_update_job.cc
index 76b9e85..6bb456f 100644
--- a/content/browser/appcache/appcache_update_job.cc
+++ b/content/browser/appcache/appcache_update_job.cc
@@ -207,7 +207,7 @@
 }  // namespace
 
 const base::Feature kAppCacheManifestScopeChecksFeature{
-    "AppCacheManifestScopeChecks", base::FEATURE_DISABLED_BY_DEFAULT};
+    "AppCacheManifestScopeChecks", base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Helper class for collecting hosts per frontend when sending notifications
 // so that only one notification is sent for all hosts using the same frontend.
diff --git a/content/browser/browsing_data/browsing_data_remover_impl.cc b/content/browser/browsing_data/browsing_data_remover_impl.cc
index 503ba73..7905bdb 100644
--- a/content/browser/browsing_data/browsing_data_remover_impl.cc
+++ b/content/browser/browsing_data/browsing_data_remover_impl.cc
@@ -423,8 +423,12 @@
     BrowsingDataRemoverDelegate::EmbedderOriginTypeMatcher embedder_matcher;
     if (embedder_delegate_)
       embedder_matcher = embedder_delegate_->GetOriginTypeMatcher();
+    // Rewrite leveldb instances to clean up data from disk if almost all data
+    // is deleted. Do not perform the cleanup for partial deletions or when only
+    // hosted app data is removed as this would be very slow.
     bool perform_storage_cleanup =
         delete_begin_.is_null() && delete_end_.is_max() &&
+        origin_type_mask_ & ORIGIN_TYPE_UNPROTECTED_WEB &&
         filter_builder->GetMode() == BrowsingDataFilterBuilder::BLACKLIST;
 
     storage_partition->ClearData(
diff --git a/content/browser/browsing_data/browsing_data_remover_impl_browsertest.cc b/content/browser/browsing_data/browsing_data_remover_impl_browsertest.cc
index c39d302..fd2eec9 100644
--- a/content/browser/browsing_data/browsing_data_remover_impl_browsertest.cc
+++ b/content/browser/browsing_data/browsing_data_remover_impl_browsertest.cc
@@ -10,6 +10,7 @@
 #include "base/files/file_path.h"
 #include "base/test/bind_test_util.h"
 #include "content/public/browser/browser_context.h"
+#include "content/public/browser/browsing_data_filter_builder.h"
 #include "content/public/browser/browsing_data_remover.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/storage_partition.h"
@@ -104,6 +105,20 @@
     completion_observer.BlockUntilCompletion();
   }
 
+  void RemoveWithFilterAndWait(
+      int remove_mask,
+      std::unique_ptr<BrowsingDataFilterBuilder> filter) {
+    content::BrowsingDataRemover* remover =
+        content::BrowserContext::GetBrowsingDataRemover(
+            shell()->web_contents()->GetBrowserContext());
+    content::BrowsingDataRemoverCompletionObserver completion_observer(remover);
+    remover->RemoveWithFilterAndReply(
+        base::Time(), base::Time::Max(), remove_mask,
+        content::BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB,
+        std::move(filter), &completion_observer);
+    completion_observer.BlockUntilCompletion();
+  }
+
   // Issues a request for kHstsPath on localhost, and expects it to enable HSTS
   // for the domain.
   void IssueRequestThatSetsHsts() {
@@ -214,13 +229,21 @@
 }
 
 // Verify that TransportSecurityState data is not cleared if REMOVE_CACHE is not
-// set.
+// set or there is a WHITELIST filter.
+// TODO(crbug.com/1040065): Add support for filtered deletions and update test.
 IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverImplBrowserTest,
                        PreserveTransportSecurityState) {
   IssueRequestThatSetsHsts();
 
   RemoveAndWait(BrowsingDataRemover::DATA_TYPE_DOWNLOADS);
   EXPECT_TRUE(IsHstsSet());
+
+  auto filter =
+      BrowsingDataFilterBuilder::Create(BrowsingDataFilterBuilder::WHITELIST);
+  filter->AddRegisterableDomain("foobar.com");
+  RemoveWithFilterAndWait(BrowsingDataRemover::DATA_TYPE_CACHE,
+                          std::move(filter));
+  EXPECT_TRUE(IsHstsSet());
 }
 
 IN_PROC_BROWSER_TEST_F(BrowsingDataRemoverImplBrowserTest, ClearHttpAuthCache) {
diff --git a/content/browser/download/save_item.cc b/content/browser/download/save_item.cc
index 2e3b4ca..cb2a418 100644
--- a/content/browser/download/save_item.cc
+++ b/content/browser/download/save_item.cc
@@ -16,9 +16,9 @@
 namespace {
 
 SaveItemId GetNextSaveItemId() {
-  static int g_next_save_item_id = 1;
+  static SaveItemId::Generator g_save_item_id_generator;
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  return SaveItemId::FromUnsafeValue(g_next_save_item_id++);
+  return g_save_item_id_generator.GenerateNextId();
 }
 
 }  // namespace
diff --git a/content/browser/download/save_package.cc b/content/browser/download/save_package.cc
index 769d840..42ed0e5 100644
--- a/content/browser/download/save_package.cc
+++ b/content/browser/download/save_package.cc
@@ -68,8 +68,8 @@
 
 // Generates unique ids for SavePackage::unique_id_ field.
 SavePackageId GetNextSavePackageId() {
-  static int g_save_package_id = 0;
-  return SavePackageId::FromUnsafeValue(g_save_package_id++);
+  static SavePackageId::Generator g_save_package_id_generator;
+  return g_save_package_id_generator.GenerateNextId();
 }
 
 // Default name which will be used when we can not get proper name from
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index ce96260..bc110d4 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -130,7 +130,6 @@
 #include "content/common/navigation_params_utils.h"
 #include "content/common/render_message_filter.mojom.h"
 #include "content/common/renderer.mojom.h"
-#include "content/common/swapped_out_messages.h"
 #include "content/common/unfreezable_frame_messages.h"
 #include "content/common/widget.mojom.h"
 #include "content/public/browser/ax_event_notification_details.h"
@@ -3044,13 +3043,6 @@
 
   ClearWebUI();
 
-  // If this is a main frame RFH that's about to be deleted, update its RVH's
-  // swapped-out state here. https://crbug.com/505887.  This should only be
-  // done if the RVH hasn't been already reused and marked as active by another
-  // navigation. See https://crbug.com/823567.
-  if (frame_tree_node_->IsMainFrame() && !render_view_host_->is_active())
-    render_view_host_->set_is_swapped_out(true);
-
   bool deleted =
       frame_tree_node_->render_manager()->DeleteFromPendingList(this);
   CHECK(deleted);
@@ -6481,10 +6473,12 @@
 
 void RenderFrameHostImpl::CreateDedicatedWorkerHostFactory(
     mojo::PendingReceiver<blink::mojom::DedicatedWorkerHostFactory> receiver) {
+  // When a dedicated worker is created from the frame script, the frame is both
+  // the creator and the ancestor.
   content::CreateDedicatedWorkerHostFactory(
-      process_->GetID(), /*ancestor_render_frame_id=*/routing_id_,
-      /*creator_render_frame_id=*/routing_id_, last_committed_origin_,
-      std::move(receiver));
+      /* creator_frame_routing_id = */ GetGlobalFrameRoutingId(),
+      /* ancestor_frame_routing_id = */ GetGlobalFrameRoutingId(),
+      last_committed_origin_, std::move(receiver));
 }
 
 void RenderFrameHostImpl::OnMediaInterfaceFactoryConnectionError() {
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
index 827f687..dd75a2f6 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -578,14 +578,12 @@
 
   // Doing this is important in the case where the replacement proxy is created
   // above, as the RenderViewHost will continue to exist and should be
-  // considered swapped out if it is ever reused.  When there's no replacement
-  // proxy, this doesn't really matter, as the RenderViewHost will be destroyed
-  // shortly, since |render_frame_host| is its last active frame and will be
-  // deleted below.  See https://crbug.com/627400.
-  if (frame_tree_node_->IsMainFrame()) {
+  // considered inactive.  When there's no replacement proxy, this doesn't
+  // really matter, as the RenderViewHost will be destroyed shortly, since
+  // |render_frame_host| is its last active frame and will be deleted below.
+  // See https://crbug.com/627400.
+  if (frame_tree_node_->IsMainFrame())
     rvh->SetMainFrameRoutingId(MSG_ROUTING_NONE);
-    rvh->set_is_swapped_out(true);
-  }
 
   render_frame_host.reset();
 
@@ -949,7 +947,7 @@
 
   // There will be no proxy to represent the pending or speculative RFHs in the
   // parent's SiteInstance until the navigation is committed, but the old RFH is
-  // not swapped out before that happens either, so we can talk to the
+  // not unloaded before that happens either, so we can talk to the
   // FrameOwner in the parent via the child's current RenderFrame at any time.
   DCHECK(current_frame_host());
   if (current_frame_host()->GetSiteInstance() == parent_site_instance) {
@@ -1852,7 +1850,7 @@
   // Start from opener's parent.  There's no need to create a proxy in the
   // opener's SiteInstance, since new windows are always first opened in the
   // same SiteInstance as their opener, and if the new window navigates
-  // cross-site, that proxy would be created as part of swapping out.
+  // cross-site, that proxy would be created as part of unloading.
   for (FrameTreeNode* ancestor = opener->parent(); ancestor;
        ancestor = ancestor->parent()) {
     RenderFrameHostImpl* ancestor_rfh = ancestor->current_frame_host();
@@ -2454,7 +2452,7 @@
   // routing id in the RenderViewHost associated with the old RenderFrameHost
   // to MSG_ROUTING_NONE.
   if (is_main_frame) {
-    // If the RenderViewHost is transitioning from swapped out to active state,
+    // If the RenderViewHost is transitioning from an inactive to active state,
     // it was reused, so dispatch a RenderViewReady event. For example, this is
     // necessary to hide the sad tab if one is currently displayed. See
     // https://crbug.com/591984.
@@ -2467,7 +2465,6 @@
     if (!new_rvh->is_active())
       new_rvh->PostRenderViewReady();
 
-    new_rvh->set_is_swapped_out(false);
     new_rvh->SetMainFrameRoutingId(render_frame_host_->routing_id());
     old_rvh->SetMainFrameRoutingId(MSG_ROUTING_NONE);
   }
@@ -2476,8 +2473,8 @@
   // to initialize the child RWHV.
   base::Optional<gfx::Size> old_size = old_render_frame_host->frame_size();
 
-  // Swap out the old frame now that the new one is visible.
-  // This will swap it out and schedule it for deletion when the swap out ack
+  // Unload the old frame now that the new one is visible.
+  // This will unload it and schedule it for deletion when the unload ack
   // arrives (or immediately if the process isn't live).
   UnloadOldFrame(std::move(old_render_frame_host));
 
@@ -2490,7 +2487,7 @@
   // belongs to the parent frame's SiteInstance. If this navigation causes
   // an out-of-process frame to return to the same process as its parent, the
   // proxy would have been removed from proxy_hosts_ above.
-  // Note: We do this after swapping out the old RFH because that may create
+  // Note: We do this after unloading the old RFH because that may create
   // the proxy we're looking for.
   RenderFrameProxyHost* proxy_to_parent = GetProxyToParent();
   if (proxy_to_parent)
diff --git a/content/browser/frame_host/render_frame_host_manager_unittest.cc b/content/browser/frame_host/render_frame_host_manager_unittest.cc
index 44c6a68..54ddf71 100644
--- a/content/browser/frame_host/render_frame_host_manager_unittest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc
@@ -1409,7 +1409,6 @@
   RenderViewHostImpl* swapped_out_rvh =
       opener1_manager->GetSwappedOutRenderViewHost(rfh1->GetSiteInstance());
   EXPECT_TRUE(swapped_out_rvh);
-  EXPECT_TRUE(swapped_out_rvh->is_swapped_out_);
   EXPECT_FALSE(swapped_out_rvh->is_active());
 
   // Fake a process crash.
diff --git a/content/browser/permissions/permission_service_impl.cc b/content/browser/permissions/permission_service_impl.cc
index c4d217db..9a653bd 100644
--- a/content/browser/permissions/permission_service_impl.cc
+++ b/content/browser/permissions/permission_service_impl.cc
@@ -12,7 +12,6 @@
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
-#include "build/build_config.h"
 #include "content/browser/bad_message.h"
 #include "content/browser/permissions/permission_controller_impl.h"
 #include "content/public/browser/browser_context.h"
@@ -28,100 +27,6 @@
 
 namespace {
 
-bool PermissionDescriptorToPermissionType(
-    const PermissionDescriptorPtr& descriptor,
-    PermissionType* permission_type) {
-  switch (descriptor->name) {
-    case PermissionName::GEOLOCATION:
-      *permission_type = PermissionType::GEOLOCATION;
-      return true;
-    case PermissionName::NOTIFICATIONS:
-      *permission_type = PermissionType::NOTIFICATIONS;
-      return true;
-    case PermissionName::MIDI: {
-      if (descriptor->extension && descriptor->extension->is_midi() &&
-          descriptor->extension->get_midi()->sysex) {
-        *permission_type = PermissionType::MIDI_SYSEX;
-        return true;
-      }
-      *permission_type = PermissionType::MIDI;
-      return true;
-    }
-    case PermissionName::PROTECTED_MEDIA_IDENTIFIER:
-#if defined(ENABLE_PROTECTED_MEDIA_IDENTIFIER_PERMISSION)
-      *permission_type = PermissionType::PROTECTED_MEDIA_IDENTIFIER;
-      return true;
-#else
-      NOTIMPLEMENTED();
-      return false;
-#endif  // defined(ENABLE_PROTECTED_MEDIA_IDENTIFIER_PERMISSION)
-    case PermissionName::DURABLE_STORAGE:
-      *permission_type = PermissionType::DURABLE_STORAGE;
-      return true;
-    case PermissionName::AUDIO_CAPTURE:
-      *permission_type = PermissionType::AUDIO_CAPTURE;
-      return true;
-    case PermissionName::VIDEO_CAPTURE:
-      *permission_type = PermissionType::VIDEO_CAPTURE;
-      return true;
-    case PermissionName::BACKGROUND_SYNC:
-      *permission_type = PermissionType::BACKGROUND_SYNC;
-      return true;
-    case PermissionName::SENSORS:
-      *permission_type = PermissionType::SENSORS;
-      return true;
-    case PermissionName::ACCESSIBILITY_EVENTS:
-      *permission_type = PermissionType::ACCESSIBILITY_EVENTS;
-      return true;
-    case PermissionName::CLIPBOARD_READ:
-      *permission_type = PermissionType::CLIPBOARD_READ_WRITE;
-      return true;
-    case PermissionName::CLIPBOARD_WRITE: {
-      if (descriptor->extension && descriptor->extension->is_clipboard() &&
-          descriptor->extension->get_clipboard()->allowWithoutSanitization) {
-        *permission_type = PermissionType::CLIPBOARD_READ_WRITE;
-      } else {
-        *permission_type = PermissionType::CLIPBOARD_SANITIZED_WRITE;
-      }
-      return true;
-    }
-    case PermissionName::PAYMENT_HANDLER:
-      *permission_type = PermissionType::PAYMENT_HANDLER;
-      return true;
-    case PermissionName::BACKGROUND_FETCH:
-      *permission_type = PermissionType::BACKGROUND_FETCH;
-      return true;
-    case PermissionName::IDLE_DETECTION:
-      *permission_type = PermissionType::IDLE_DETECTION;
-      return true;
-    case PermissionName::PERIODIC_BACKGROUND_SYNC:
-      *permission_type = PermissionType::PERIODIC_BACKGROUND_SYNC;
-      return true;
-    case PermissionName::WAKE_LOCK:
-      if (descriptor->extension && descriptor->extension->is_wake_lock()) {
-        switch (descriptor->extension->get_wake_lock()->type) {
-          case blink::mojom::WakeLockType::kScreen:
-            *permission_type = PermissionType::WAKE_LOCK_SCREEN;
-            break;
-          case blink::mojom::WakeLockType::kSystem:
-            *permission_type = PermissionType::WAKE_LOCK_SYSTEM;
-            break;
-          default:
-            NOTREACHED();
-            return false;
-        }
-        return true;
-      }
-      break;
-    case PermissionName::NFC:
-      *permission_type = PermissionType::NFC;
-      return true;
-  }
-
-  NOTREACHED();
-  return false;
-}
-
 // This function allows the usage of the the multiple request map with single
 // requests.
 void PermissionRequestResponseCallbackWrapper(
@@ -204,10 +109,14 @@
   std::vector<PermissionType> types(permissions.size());
   std::set<PermissionType> duplicates_check;
   for (size_t i = 0; i < types.size(); ++i) {
-    if (!PermissionDescriptorToPermissionType(permissions[i], &types[i])) {
+    auto type = PermissionDescriptorToPermissionType(permissions[i]);
+    if (!type) {
       ReceivedBadMessage();
       return;
     }
+
+    types[i] = *type;
+
     // Each permission should appear at most once in the message.
     bool inserted = duplicates_check.insert(types[i]).second;
     if (!inserted) {
@@ -253,12 +162,12 @@
 void PermissionServiceImpl::RevokePermission(
     PermissionDescriptorPtr permission,
     PermissionStatusCallback callback) {
-  PermissionType permission_type;
-  if (!PermissionDescriptorToPermissionType(permission, &permission_type)) {
+  auto permission_type = PermissionDescriptorToPermissionType(permission);
+  if (!permission_type) {
     ReceivedBadMessage();
     return;
   }
-  PermissionStatus status = GetPermissionStatusFromType(permission_type);
+  PermissionStatus status = GetPermissionStatusFromType(*permission_type);
 
   // Resetting the permission should only be possible if the permission is
   // already granted.
@@ -267,33 +176,33 @@
     return;
   }
 
-  ResetPermissionStatus(permission_type);
+  ResetPermissionStatus(*permission_type);
 
-  std::move(callback).Run(GetPermissionStatusFromType(permission_type));
+  std::move(callback).Run(GetPermissionStatusFromType(*permission_type));
 }
 
 void PermissionServiceImpl::AddPermissionObserver(
     PermissionDescriptorPtr permission,
     PermissionStatus last_known_status,
     mojo::PendingRemote<blink::mojom::PermissionObserver> observer) {
-  PermissionType type;
-  if (!PermissionDescriptorToPermissionType(permission, &type)) {
+  auto type = PermissionDescriptorToPermissionType(permission);
+  if (!type) {
     ReceivedBadMessage();
     return;
   }
 
-  context_->CreateSubscription(type, origin_, GetPermissionStatus(permission),
+  context_->CreateSubscription(*type, origin_, GetPermissionStatus(permission),
                                last_known_status, std::move(observer));
 }
 
 PermissionStatus PermissionServiceImpl::GetPermissionStatus(
     const PermissionDescriptorPtr& permission) {
-  PermissionType type;
-  if (!PermissionDescriptorToPermissionType(permission, &type)) {
+  auto type = PermissionDescriptorToPermissionType(permission);
+  if (!type) {
     ReceivedBadMessage();
     return PermissionStatus::DENIED;
   }
-  return GetPermissionStatusFromType(type);
+  return GetPermissionStatusFromType(*type);
 }
 
 PermissionStatus PermissionServiceImpl::GetPermissionStatusFromType(
diff --git a/content/browser/renderer_host/input/fling_scheduler.cc b/content/browser/renderer_host/input/fling_scheduler.cc
index cf220cb..c7a4f1f 100644
--- a/content/browser/renderer_host/input/fling_scheduler.cc
+++ b/content/browser/renderer_host/input/fling_scheduler.cc
@@ -33,13 +33,10 @@
     return;
 
   ui::Compositor* compositor = GetCompositor();
-  // If a ui::Compositor can't be obtained, ask the host for BeginFrames.
-  if (!compositor) {
-    host_->SetNeedsBeginFrameForFlingProgress();
-    return;
+  if (compositor) {
+    compositor->AddAnimationObserver(this);
+    observed_compositor_ = compositor;
   }
-  compositor->AddAnimationObserver(this);
-  observed_compositor_ = compositor;
 }
 
 void FlingScheduler::DidStopFlingingOnBrowser(
diff --git a/content/browser/renderer_host/input/fling_scheduler_android.cc b/content/browser/renderer_host/input/fling_scheduler_android.cc
index db119df9..c801c9a3c 100644
--- a/content/browser/renderer_host/input/fling_scheduler_android.cc
+++ b/content/browser/renderer_host/input/fling_scheduler_android.cc
@@ -6,6 +6,7 @@
 
 #include "build/build_config.h"
 #include "content/browser/renderer_host/render_widget_host_impl.h"
+#include "content/browser/renderer_host/render_widget_host_view_android.h"
 #include "ui/compositor/compositor.h"
 
 namespace content {
@@ -30,7 +31,11 @@
     // WebView), we'll never receive an OnAnimate call. In this case fall back
     // to BeginFrames coming from the host.
     if (!window || !window->GetCompositor()) {
-      host_->SetNeedsBeginFrameForFlingProgress();
+      auto* view = host_->GetView();
+      if (view && !view->IsRenderWidgetHostViewChildFrame()) {
+        static_cast<RenderWidgetHostViewAndroid*>(view)
+            ->SetNeedsBeginFrameForFlingProgress();
+      }
       return;
     }
     window->AddObserver(this);
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index bae3acad..e90f36a 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -193,6 +193,7 @@
 #include "ipc/ipc_channel.h"
 #include "ipc/ipc_channel_mojo.h"
 #include "ipc/ipc_logging.h"
+#include "ipc/trace_ipc_message.h"
 #include "media/audio/audio_manager.h"
 #include "media/base/media_switches.h"
 #include "media/capture/capture_switches.h"
@@ -1297,8 +1298,6 @@
       return;
 
     receiver = mojo::GenericPendingReceiver(interface_name, std::move(pipe));
-    GetContentClient()->browser()->BindHostReceiverForRendererOnIOThread(
-        render_process_id_, &receiver);
     if (!receiver)
       return;
 
@@ -3370,9 +3369,7 @@
 }
 
 bool RenderProcessHostImpl::Send(IPC::Message* msg) {
-  TRACE_EVENT2("renderer_host", "RenderProcessHostImpl::Send", "class",
-               IPC_MESSAGE_ID_CLASS(msg->type()), "line",
-               IPC_MESSAGE_ID_LINE(msg->type()));
+  TRACE_IPC_MESSAGE_SEND("renderer_host", "RenderProcessHostImpl::Send", msg);
 
   std::unique_ptr<IPC::Message> message(msg);
 
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index de66a89e..25fb8b4e 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -53,7 +53,6 @@
 #include "content/common/page_messages.h"
 #include "content/common/render_message_filter.mojom.h"
 #include "content/common/renderer.mojom.h"
-#include "content/common/swapped_out_messages.h"
 #include "content/common/view_messages.h"
 #include "content/common/widget_messages.h"
 #include "content/public/browser/ax_event_notification_details.h"
@@ -224,7 +223,6 @@
     : render_widget_host_(std::move(widget)),
       delegate_(delegate),
       instance_(static_cast<SiteInstanceImpl*>(instance)),
-      is_swapped_out_(swapped_out),
       routing_id_(routing_id),
       main_frame_routing_id_(main_frame_routing_id) {
   DCHECK(instance_.get());
@@ -801,23 +799,6 @@
 // RenderViewHostImpl, IPC message handlers:
 
 bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) {
-  // Filter out most IPC messages if this renderer is swapped out.
-  // We still want to handle certain ACKs to keep our state consistent.
-  if (is_swapped_out_) {
-    if (!SwappedOutMessages::CanHandleWhileSwappedOut(msg)) {
-      // If this is a synchronous message and we decided not to handle it,
-      // we must send an error reply, or else the renderer will be stuck
-      // and won't respond to future requests.
-      if (msg.is_sync()) {
-        IPC::Message* reply = IPC::SyncMessage::GenerateReply(&msg);
-        reply->set_reply_error();
-        Send(reply);
-      }
-      // Don't continue looking for someone to handle it.
-      return true;
-    }
-  }
-
   // Crash reports trigerred by the IPC messages below should be associated
   // with URL of the main frame.
   ScopedActiveURL scoped_active_url(this);
diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h
index 70ea8a0..4311c340 100644
--- a/content/browser/renderer_host/render_view_host_impl.h
+++ b/content/browser/renderer_host/render_view_host_impl.h
@@ -125,7 +125,7 @@
   // (MSG_ROUTING_NONE if none).
   // |window_was_created_with_opener| is true if this top-level frame was
   // created with an opener. (The opener may have been closed since.)
-  // The |proxy_route_id| is only used when creating a RenderView in swapped out
+  // The |proxy_route_id| is only used when creating a RenderView in an inactive
   // state.
   // |devtools_frame_token| contains the devtools token for tagging requests and
   // attributing them to the context frame.
@@ -139,16 +139,10 @@
       bool window_was_created_with_opener);
 
   // Tracks whether this RenderViewHost is in an active state (rather than
-  // pending swap out or swapped out), according to its main frame
+  // pending unload or unloaded), according to its main frame
   // RenderFrameHost.
   bool is_active() const { return main_frame_routing_id_ != MSG_ROUTING_NONE; }
 
-  // Tracks whether this RenderViewHost is swapped out, according to its main
-  // frame RenderFrameHost.
-  void set_is_swapped_out(bool is_swapped_out) {
-    is_swapped_out_ = is_swapped_out;
-  }
-
   // TODO(creis): Remove as part of http://crbug.com/418265.
   bool is_waiting_for_close_ack() const { return is_waiting_for_close_ack_; }
 
@@ -307,11 +301,7 @@
   FRIEND_TEST_ALL_PREFIXES(RenderViewHostTest, BasicRenderFrameHost);
   FRIEND_TEST_ALL_PREFIXES(RenderViewHostTest, RoutingIdSane);
   FRIEND_TEST_ALL_PREFIXES(RenderFrameHostManagerTest,
-                           CleanUpSwappedOutRVHOnProcessCrash);
-  FRIEND_TEST_ALL_PREFIXES(RenderFrameHostManagerTest,
                            CloseWithPendingWhileUnresponsive);
-  FRIEND_TEST_ALL_PREFIXES(SitePerProcessBrowserTest,
-                           NavigateMainFrameToChildSite);
 
   // IPC::Listener implementation.
   bool OnMessageReceived(const IPC::Message& msg) override;
@@ -352,12 +342,6 @@
   // over time.
   scoped_refptr<SiteInstanceImpl> instance_;
 
-  // Tracks whether the main frame RenderFrameHost is swapped out.  Unlike
-  // is_active(), this is false when the frame is pending swap out or deletion.
-  // TODO(creis): Remove this when we no longer filter IPCs after swap out.
-  // See https://crbug.com/745091.
-  bool is_swapped_out_;
-
   // Routing ID for this RenderViewHost.
   const int routing_id_;
 
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 53a1ae45..c6df5dee 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -442,12 +442,6 @@
     view_ = view->GetWeakPtr();
     if (!create_frame_sink_callback_.is_null())
       std::move(create_frame_sink_callback_).Run(view_->GetFrameSinkId());
-
-    // Views start out not needing begin frames, so only update its state if the
-    // value has changed. |needs_begin_frames_| should only ever be true for
-    // Android WebView since begin frames are handled by viz everywhere else.
-    if (needs_begin_frames_)
-      view_->SetNeedsBeginFrames(needs_begin_frames_);
   } else {
     view_.reset();
   }
@@ -2611,10 +2605,6 @@
   if (view_)
     view_->set_is_currently_scrolling_viewport(true);
 }
-void RenderWidgetHostImpl::SetNeedsBeginFrameForFlingProgress() {
-  browser_fling_needs_begin_frame_ = true;
-  SetNeedsBeginFrame(true);
-}
 
 void RenderWidgetHostImpl::AddPendingUserActivation(
     const WebInputEvent& event) {
@@ -2921,15 +2911,6 @@
   return true;
 }
 
-void RenderWidgetHostImpl::SetNeedsBeginFrame(bool needs_begin_frames) {
-  if (needs_begin_frames_ == needs_begin_frames)
-    return;
-
-  needs_begin_frames_ = needs_begin_frames || browser_fling_needs_begin_frame_;
-  if (view_)
-    view_->SetNeedsBeginFrames(needs_begin_frames_);
-}
-
 void RenderWidgetHostImpl::DidProcessFrame(uint32_t frame_token) {
   // In this case the RenderWidgetHostImpl is still here because it's the top
   // level RenderWidgetHostImpl, but the renderer's RenderWidget no longer
@@ -3008,7 +2989,6 @@
 }
 
 void RenderWidgetHostImpl::ProgressFlingIfNeeded(TimeTicks current_time) {
-  browser_fling_needs_begin_frame_ = false;
   fling_scheduler_->ProgressFlingOnBeginFrameIfneeded(current_time);
 }
 
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index 80cdc18..f6cda3a 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -637,8 +637,6 @@
 
   bool renderer_initialized() const { return renderer_initialized_; }
 
-  bool needs_begin_frames() const { return needs_begin_frames_; }
-
   base::WeakPtr<RenderWidgetHostImpl> GetWeakPtr() {
     return weak_factory_.GetWeakPtr();
   }
@@ -672,9 +670,6 @@
 
   bool HasGestureStopped() override;
 
-  // Begin frames related functionality is only used by Android WebView.
-  void SetNeedsBeginFrame(bool needs_begin_frame);
-
   // Signals that a frame with token |frame_token| was finished processing. If
   // there are any queued messages belonging to it, they will be processed.
   void DidProcessFrame(uint32_t frame_token);
@@ -713,7 +708,6 @@
 
   void ProgressFlingIfNeeded(base::TimeTicks current_time);
   void StopFling();
-  void SetNeedsBeginFrameForFlingProgress();
 
   // The RenderWidgetHostImpl will keep showing the old page (for a while) after
   // navigation until the first frame of the new page arrives. This reduces
@@ -875,7 +869,6 @@
   void OnUnlockMouse();
   void OnSelectionBoundsChanged(
       const WidgetHostMsg_SelectionBounds_Params& params);
-  void OnSetNeedsBeginFrames(bool needs_begin_frames);
   void OnStartDragging(const DropData& drop_data,
                        blink::WebDragOperationsMask operations_allowed,
                        const SkBitmap& bitmap,
@@ -1200,15 +1193,6 @@
   // causing HasFocus to return false when is_focused_ is true.
   bool is_focused_ = false;
 
-  // Whether the view should send begin frame messages to its render widget.
-  // This is state that may arrive before the view has been set and that must be
-  // consistent with the state in the renderer, so this host handles it.
-  bool needs_begin_frames_ = false;
-
-  // This is used to make sure that when the fling controller sets
-  // needs_begin_frames_ it doesn't get overriden by the renderer.
-  bool browser_fling_needs_begin_frame_ = false;
-
   // This value indicates how long to wait before we consider a renderer hung.
   base::TimeDelta hung_renderer_delay_;
 
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 0c9b436..82920c5 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -212,8 +212,6 @@
     RenderWidgetHostImpl* widget_host,
     gfx::NativeView parent_native_view)
     : RenderWidgetHostViewBase(widget_host),
-      begin_frame_source_(nullptr),
-      outstanding_begin_frame_requests_(0),
       is_showing_(!widget_host->is_hidden()),
       is_window_visible_(true),
       is_window_activity_started_(true),
@@ -757,15 +755,6 @@
       base::UTF16ToUTF8(selection.selected_text()));
 }
 
-void RenderWidgetHostViewAndroid::SetNeedsBeginFrames(bool needs_begin_frames) {
-  TRACE_EVENT1("cc", "RenderWidgetHostViewAndroid::SetNeedsBeginFrames",
-               "needs_begin_frames", needs_begin_frames);
-  if (needs_begin_frames)
-    AddBeginFrameRequest(PERSISTENT_BEGIN_FRAME);
-  else
-    ClearBeginFrameRequest(PERSISTENT_BEGIN_FRAME);
-}
-
 viz::FrameSinkId RenderWidgetHostViewAndroid::GetRootFrameSinkId() {
   if (view_.GetWindowAndroid() && view_.GetWindowAndroid()->GetCompositor())
     return view_.GetWindowAndroid()->GetCompositor()->GetFrameSinkId();
@@ -884,9 +873,10 @@
   // scroll-inducing touch events. Note that Android's Choreographer ensures
   // that BeginFrame requests made during Action::MOVE dispatch will be honored
   // in the same vsync phase.
-  if (observing_root_window_ && result.moved_beyond_slop_region)
-    AddBeginFrameRequest(BEGIN_FRAME);
-
+  if (observing_root_window_ && result.moved_beyond_slop_region) {
+    if (sync_compositor_)
+      sync_compositor_->RequestOneBeginFrame();
+  }
   return true;
 }
 
@@ -1051,13 +1041,6 @@
          host()->delegate()->GetInputEventRouter();
 }
 
-void RenderWidgetHostViewAndroid::DidPresentCompositorFrames(
-    const viz::FrameTimingDetailsMap& timing_details) {
-  timing_details_ = timing_details;
-  if (!timing_details_.empty())
-    AddBeginFrameRequest(BEGIN_FRAME);
-}
-
 void RenderWidgetHostViewAndroid::EvictFrameIfNecessary() {
   if (!host()->delegate()->IsFullscreenForCurrentTab() ||
       current_surface_size_ == view_.GetPhysicalBackingSize()) {
@@ -1407,7 +1390,8 @@
 
   if (view_.parent() && view_.GetWindowAndroid()) {
     StartObservingRootWindow();
-    AddBeginFrameRequest(BEGIN_FRAME);
+    if (sync_compositor_)
+      sync_compositor_->RequestOneBeginFrame();
   }
 }
 
@@ -1447,41 +1431,6 @@
   host()->WasHidden();
 }
 
-void RenderWidgetHostViewAndroid::SetBeginFrameSource(
-    viz::BeginFrameSource* begin_frame_source) {
-  if (begin_frame_source_ == begin_frame_source)
-    return;
-
-  if (begin_frame_source_ && outstanding_begin_frame_requests_)
-    begin_frame_source_->RemoveObserver(this);
-  begin_frame_source_ = begin_frame_source;
-  if (begin_frame_source_ && outstanding_begin_frame_requests_)
-    begin_frame_source_->AddObserver(this);
-}
-
-void RenderWidgetHostViewAndroid::AddBeginFrameRequest(
-    BeginFrameRequestType request) {
-  uint32_t prior_requests = outstanding_begin_frame_requests_;
-  outstanding_begin_frame_requests_ = prior_requests | request;
-
-  // Note that if we don't currently have a BeginFrameSource, outstanding begin
-  // frame requests will be pushed if/when we get one during
-  // |StartObservingRootWindow()| or when the DelegatedFrameHostAndroid sets it.
-  viz::BeginFrameSource* source = begin_frame_source_;
-  if (source && outstanding_begin_frame_requests_ && !prior_requests)
-    source->AddObserver(this);
-}
-
-void RenderWidgetHostViewAndroid::ClearBeginFrameRequest(
-    BeginFrameRequestType request) {
-  uint32_t prior_requests = outstanding_begin_frame_requests_;
-  outstanding_begin_frame_requests_ = prior_requests & ~request;
-
-  viz::BeginFrameSource* source = begin_frame_source_;
-  if (source && !outstanding_begin_frame_requests_ && prior_requests)
-    source->RemoveObserver(this);
-}
-
 void RenderWidgetHostViewAndroid::StartObservingRootWindow() {
   DCHECK(view_.parent());
   DCHECK(view_.GetWindowAndroid());
@@ -1490,11 +1439,10 @@
     return;
 
   observing_root_window_ = true;
-  SendBeginFramePaused();
   view_.GetWindowAndroid()->AddObserver(this);
   // When using browser compositor, DelegatedFrameHostAndroid provides the BFS.
-  if (!using_browser_compositor_ && !using_viz_for_webview_)
-    SetBeginFrameSource(view_.GetWindowAndroid()->GetBeginFrameSource());
+  if (!using_browser_compositor_ && sync_compositor_ && !using_viz_for_webview_)
+    sync_compositor_->StartObservingRootWindow(view_.GetWindowAndroid());
 
   ui::WindowAndroidCompositor* compositor =
       view_.GetWindowAndroid()->GetCompositor();
@@ -1519,32 +1467,13 @@
   is_window_visible_ = true;
   observing_root_window_ = false;
   OnUpdateScopedSelectionHandles();
-  SendBeginFramePaused();
   view_.GetWindowAndroid()->RemoveObserver(this);
-  if (!using_browser_compositor_)
-    SetBeginFrameSource(nullptr);
+  if (!using_browser_compositor_ && sync_compositor_ && !using_viz_for_webview_)
+    sync_compositor_->StopObservingRootWindow();
   // If the DFH has already been destroyed, it will have cleaned itself up.
   // This happens in some WebView cases.
   if (delegated_frame_host_)
     delegated_frame_host_->DetachFromCompositor();
-  DCHECK(!begin_frame_source_);
-}
-
-void RenderWidgetHostViewAndroid::SendBeginFrame(viz::BeginFrameArgs args) {
-  TRACE_EVENT2("cc", "RenderWidgetHostViewAndroid::SendBeginFrame",
-               "frame_number", args.frame_id.sequence_number, "frame_time_us",
-               args.frame_time.ToInternalValue());
-
-  // Synchronous compositor does not use deadline-based scheduling.
-  // TODO(brianderson): Replace this hardcoded deadline after Android
-  // switches to Surfaces and the Browser's commit isn't in the critical path.
-  args.deadline = sync_compositor_ ? base::TimeTicks()
-  : args.frame_time + (args.interval * 0.6);
-  if (sync_compositor_) {
-    sync_compositor_->BeginFrame(view_.GetWindowAndroid(), args,
-                                 timing_details_);
-  }
-  timing_details_.clear();
 }
 
 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) {
@@ -2131,65 +2060,6 @@
     delegated_frame_host_->DetachFromCompositor();
 }
 
-void RenderWidgetHostViewAndroid::OnBeginFrame(
-    const viz::BeginFrameArgs& args) {
-  TRACE_EVENT0("cc,benchmark", "RenderWidgetHostViewAndroid::OnBeginFrame");
-  if (!host())
-    return;
-
-  // In sync mode, we disregard missed frame args to ensure that
-  // SynchronousCompositorBrowserFilter::SyncStateAfterVSync will be called
-  // during WindowAndroid::WindowBeginFrameSource::OnVSync() observer iteration.
-  if (sync_compositor_ && args.type == viz::BeginFrameArgs::MISSED)
-    return;
-
-  bool webview_fling = sync_compositor_ && is_currently_scrolling_viewport_;
-  if (!webview_fling) {
-    host_->ProgressFlingIfNeeded(args.frame_time);
-  } else if (sync_compositor_->on_compute_scroll_called()) {
-    // On Android webview progress the fling only when |OnComputeScroll| is
-    // called since in some cases Apps override |OnComputeScroll| to cancel
-    // fling animation.
-    host_->ProgressFlingIfNeeded(args.frame_time);
-  }
-
-  // Update |last_begin_frame_args_| before handling
-  // |outstanding_begin_frame_requests_| to prevent the BeginFrameSource from
-  // sending the same MISSED args in infinite recursion.
-  last_begin_frame_args_ = args;
-
-  if ((outstanding_begin_frame_requests_ & BEGIN_FRAME) ||
-      (outstanding_begin_frame_requests_ & PERSISTENT_BEGIN_FRAME)) {
-    ClearBeginFrameRequest(BEGIN_FRAME);
-    SendBeginFrame(args);
-  }
-}
-
-const viz::BeginFrameArgs& RenderWidgetHostViewAndroid::LastUsedBeginFrameArgs()
-    const {
-  return last_begin_frame_args_;
-}
-
-bool RenderWidgetHostViewAndroid::WantsAnimateOnlyBeginFrames() const {
-  return false;
-}
-
-void RenderWidgetHostViewAndroid::SendBeginFramePaused() {
-  bool paused = begin_frame_paused_ || !observing_root_window_;
-
-  if (!using_browser_compositor_ && !using_viz_for_webview_) {
-    if (sync_compositor_)
-      sync_compositor_->SetBeginFramePaused(paused);
-  }
-}
-
-void RenderWidgetHostViewAndroid::OnBeginFrameSourcePausedChanged(bool paused) {
-  if (paused != begin_frame_paused_) {
-    begin_frame_paused_ = paused;
-    SendBeginFramePaused();
-  }
-}
-
 void RenderWidgetHostViewAndroid::OnAnimate(base::TimeTicks begin_frame_time) {
   if (Animate(begin_frame_time))
     SetNeedsAnimate();
@@ -2478,4 +2348,9 @@
   }
 }
 
+void RenderWidgetHostViewAndroid::SetNeedsBeginFrameForFlingProgress() {
+  if (sync_compositor_)
+    sync_compositor_->RequestOneBeginFrame();
+}
+
 }  // namespace content
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h
index 8588a114..77f8215 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.h
+++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -21,9 +21,6 @@
 #include "base/process/process.h"
 #include "base/time/time.h"
 #include "cc/trees/render_frame_metadata.h"
-#include "components/viz/common/frame_sinks/begin_frame_args.h"
-#include "components/viz/common/frame_sinks/begin_frame_source.h"
-#include "components/viz/common/frame_timing_details_map.h"
 #include "components/viz/common/quads/selection.h"
 #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h"
 #include "content/browser/renderer_host/input/mouse_wheel_phase_handler.h"
@@ -31,7 +28,6 @@
 #include "content/browser/renderer_host/render_widget_host_view_base.h"
 #include "content/browser/renderer_host/text_input_manager.h"
 #include "content/common/content_export.h"
-#include "gpu/command_buffer/common/mailbox.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/android/delegated_frame_host_android.h"
 #include "ui/android/view_android.h"
@@ -75,8 +71,7 @@
       public ui::GestureProviderClient,
       public ui::TouchSelectionControllerClient,
       public ui::ViewAndroidObserver,
-      public ui::WindowAndroidObserver,
-      public viz::BeginFrameObserver {
+      public ui::WindowAndroidObserver {
  public:
   RenderWidgetHostViewAndroid(RenderWidgetHostImpl* widget,
                               gfx::NativeView parent_native_view);
@@ -163,7 +158,6 @@
   std::unique_ptr<SyntheticGestureTarget> CreateSyntheticGestureTarget()
       override;
   void OnDidNavigateMainFrameToNewPage() override;
-  void SetNeedsBeginFrames(bool needs_begin_frames) override;
   const viz::FrameSinkId& GetFrameSinkId() const override;
   viz::FrameSinkId GetRootFrameSinkId() override;
   viz::SurfaceId GetCurrentSurfaceId() const override;
@@ -232,17 +226,6 @@
   std::unique_ptr<ui::TouchHandleDrawable> CreateDrawable() override;
   void DidScroll() override;
 
-  // Used by DelegatedFrameHostClientAndroid.
-  void SetBeginFrameSource(viz::BeginFrameSource* begin_frame_source);
-  void DidPresentCompositorFrames(
-      const viz::FrameTimingDetailsMap& timing_details);
-
-  // viz::BeginFrameObserver implementation.
-  void OnBeginFrame(const viz::BeginFrameArgs& args) override;
-  const viz::BeginFrameArgs& LastUsedBeginFrameArgs() const override;
-  void OnBeginFrameSourcePausedChanged(bool paused) override;
-  bool WantsAnimateOnlyBeginFrames() const override;
-
   // Non-virtual methods
   void UpdateNativeViewTree(gfx::NativeView parent_native_view);
 
@@ -378,6 +361,8 @@
     return delegated_frame_host_.get();
   }
 
+  void SetNeedsBeginFrameForFlingProgress();
+
  protected:
   // RenderWidgetHostViewBase:
   void UpdateBackgroundColor() override;
@@ -431,16 +416,8 @@
   void EvictDelegatedContent();
   void OnLostResources();
 
-  enum BeginFrameRequestType {
-    BEGIN_FRAME = 1 << 0,
-    PERSISTENT_BEGIN_FRAME = 1 << 1
-  };
-  void AddBeginFrameRequest(BeginFrameRequestType request);
-  void ClearBeginFrameRequest(BeginFrameRequestType request);
   void StartObservingRootWindow();
   void StopObservingRootWindow();
-  void SendBeginFramePaused();
-  void SendBeginFrame(viz::BeginFrameArgs args);
   bool Animate(base::TimeTicks frame_time);
   void RequestDisallowInterceptTouchEvent();
 
@@ -462,15 +439,6 @@
 
   void OnUpdateScopedSelectionHandles();
 
-  // The begin frame source being observed.  Null if none.
-  viz::BeginFrameSource* begin_frame_source_;
-  viz::BeginFrameArgs last_begin_frame_args_;
-  bool begin_frame_paused_ = false;
-
-  // Indicates whether and for what reason a request for begin frames has been
-  // issued. Used to control action dispatch at the next |OnBeginFrame()| call.
-  uint32_t outstanding_begin_frame_requests_;
-
   bool is_showing_;
 
   // Window-specific bits that affect widget visibility.
@@ -563,8 +531,6 @@
   // If true, then the next allocated surface should be embedded.
   bool navigation_while_hidden_ = false;
 
-  viz::FrameTimingDetailsMap timing_details_;
-
   // Tracks whether we are in SynchronousCopyContents to avoid repeated calls
   // into DevTools capture logic.
   // TODO(ericrk): Make this more robust.
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h
index 45c91f8..8d7acf87 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.h
+++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -107,7 +107,6 @@
   bool IsMouseLocked() override;
   gfx::Size GetVisibleViewportSize() override;
   void SetInsets(const gfx::Insets& insets) override;
-  void SetNeedsBeginFrames(bool needs_begin_frames) override {}
   TouchSelectionControllerClientManager*
   GetTouchSelectionControllerClientManager() override;
 
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.h b/content/browser/renderer_host/render_widget_host_view_child_frame.h
index 103ddb8..4f5adb0 100644
--- a/content/browser/renderer_host/render_widget_host_view_child_frame.h
+++ b/content/browser/renderer_host/render_widget_host_view_child_frame.h
@@ -84,7 +84,6 @@
   gfx::NativeView GetNativeView() override;
   gfx::NativeViewAccessible GetNativeViewAccessible() override;
   bool IsMouseLocked() override;
-  void SetNeedsBeginFrames(bool needs_begin_frames) override {}
   void TakeFallbackContentFrom(RenderWidgetHostView* view) override;
 
   // RenderWidgetHostViewBase implementation.
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h
index b3cf7ca..1b1847c 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.h
+++ b/content/browser/renderer_host/render_widget_host_view_mac.h
@@ -115,7 +115,6 @@
   void ShowDefinitionForSelection() override;
   void SpeakSelection() override;
   void GetScreenInfo(ScreenInfo* screen_info) override;
-  void SetNeedsBeginFrames(bool needs_begin_frames) override {}
   void TakeFallbackContentFrom(RenderWidgetHostView* view) override;
 
   // Implementation of RenderWidgetHostViewBase.
diff --git a/content/browser/service_process_host_impl.cc b/content/browser/service_process_host_impl.cc
index 7275d26..4fc39a8 100644
--- a/content/browser/service_process_host_impl.cc
+++ b/content/browser/service_process_host_impl.cc
@@ -112,13 +112,11 @@
 
   ServiceProcessId GenerateNextId() {
     DCHECK_CURRENTLY_ON(BrowserThread::IO);
-    auto id = next_id_;
-    next_id_ = ServiceProcessId::FromUnsafeValue(next_id_.GetUnsafeValue() + 1);
-    return id;
+    return service_process_id_generator_.GenerateNextId();
   }
 
   const scoped_refptr<base::TaskRunner> ui_task_runner_;
-  ServiceProcessId next_id_{1};
+  ServiceProcessId::Generator service_process_id_generator_;
 
   base::Lock processes_lock_;
   std::map<ServiceProcessId, ServiceProcessInfo> processes_;
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
index a3cf15c..7696405 100644
--- a/content/browser/site_per_process_browsertest.cc
+++ b/content/browser/site_per_process_browsertest.cc
@@ -7410,9 +7410,8 @@
   }
 }
 
-// Tests that the swapped out state on RenderViewHost is properly reset when
-// the main frame is navigated to the same SiteInstance as one of its child
-// frames.
+// Tests that the state of the RenderViewHost is properly reset when the main
+// frame is navigated to the same SiteInstance as one of its child frames.
 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
                        NavigateMainFrameToChildSite) {
   GURL main_url(embedded_test_server()->GetURL(
@@ -7432,13 +7431,13 @@
   }
 
   // Ensure the RenderViewHost for the SiteInstance of the child is considered
-  // in swapped out state.
+  // inactive.
   RenderViewHostImpl* rvh =
       contents->GetFrameTree()
           ->GetRenderViewHost(
               root->child_at(0)->current_frame_host()->GetSiteInstance())
           .get();
-  EXPECT_TRUE(rvh->is_swapped_out_);
+  EXPECT_FALSE(rvh->is_active());
 
   // Have the child frame navigate its parent to its SiteInstance.
   GURL b_url(embedded_test_server()->GetURL("b.com", "/title1.html"));
@@ -7453,11 +7452,10 @@
   frame_observer.Wait();
   EXPECT_EQ(b_url, root->current_url());
 
-  // Verify that the same RenderViewHost is preserved and that it is no longer
-  // in swapped out state.
+  // Verify that the same RenderViewHost is preserved and that it is now active.
   EXPECT_EQ(rvh, contents->GetFrameTree()->GetRenderViewHost(
                      root->current_frame_host()->GetSiteInstance()));
-  EXPECT_FALSE(rvh->is_swapped_out_);
+  EXPECT_TRUE(rvh->is_active());
 }
 
 // Test for https://crbug.com/568836.  From an A-embed-B page, navigate the
diff --git a/content/browser/web_package/prefetched_signed_exchange_cache.cc b/content/browser/web_package/prefetched_signed_exchange_cache.cc
index 3b96456..51837344 100644
--- a/content/browser/web_package/prefetched_signed_exchange_cache.cc
+++ b/content/browser/web_package/prefetched_signed_exchange_cache.cc
@@ -162,7 +162,7 @@
     if (network::cors::ShouldCheckCors(request.url, request.request_initiator,
                                        request.mode)) {
       const auto error_status = network::cors::CheckAccess(
-          request.url, response_->headers->response_code(),
+          request.url,
           GetHeaderString(
               *response_,
               network::cors::header_names::kAccessControlAllowOrigin),
diff --git a/content/browser/worker_host/dedicated_worker_host.cc b/content/browser/worker_host/dedicated_worker_host.cc
index 0b0e64b..a78ba75 100644
--- a/content/browser/worker_host/dedicated_worker_host.cc
+++ b/content/browser/worker_host/dedicated_worker_host.cc
@@ -40,14 +40,14 @@
 
 DedicatedWorkerHost::DedicatedWorkerHost(
     RenderProcessHost* worker_process_host,
-    int ancestor_render_frame_id,
-    int creator_render_frame_id,
+    GlobalFrameRoutingId creator_render_frame_host_id,
+    GlobalFrameRoutingId ancestor_render_frame_host_id,
     const url::Origin& origin,
     mojo::PendingReceiver<blink::mojom::DedicatedWorkerHost> host)
     : worker_process_host_(worker_process_host),
       scoped_process_host_observer_(this),
-      ancestor_render_frame_id_(ancestor_render_frame_id),
-      creator_render_frame_id_(creator_render_frame_id),
+      creator_render_frame_host_id_(creator_render_frame_host_id),
+      ancestor_render_frame_host_id_(ancestor_render_frame_host_id),
       origin_(origin),
       host_receiver_(this, std::move(host)) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
@@ -117,7 +117,7 @@
   // Get nearest ancestor render frame host in order to determine the
   // top-frame origin to use for the network isolation key.
   RenderFrameHostImpl* nearest_ancestor_render_frame_host =
-      GetAncestorRenderFrameHost();
+      RenderFrameHostImpl::FromID(ancestor_render_frame_host_id_);
   if (!nearest_ancestor_render_frame_host) {
     client_->OnScriptLoadStartFailed();
     return;
@@ -157,11 +157,9 @@
 
   // If this is a nested worker, there is no creator frame.
   RenderFrameHostImpl* creator_render_frame_host = nullptr;
-  if (creator_render_frame_id_ != MSG_ROUTING_NONE) {
-    // Use |worker_process_host_->GetID()| as the creator render frame's process
-    // ID as the frame surely lives in the same process for dedicated workers.
-    creator_render_frame_host = RenderFrameHostImpl::FromID(
-        worker_process_host_->GetID(), creator_render_frame_id_);
+  if (creator_render_frame_host_id_.frame_routing_id != MSG_ROUTING_NONE) {
+    creator_render_frame_host =
+        RenderFrameHostImpl::FromID(creator_render_frame_host_id_);
     if (!creator_render_frame_host) {
       client_->OnScriptLoadStartFailed();
       return;
@@ -223,7 +221,7 @@
   // TODO(cammie): Change this approach when we support shared workers
   // creating dedicated workers, as there might be no ancestor frame.
   RenderFrameHostImpl* ancestor_render_frame_host =
-      GetAncestorRenderFrameHost();
+      RenderFrameHostImpl::FromID(ancestor_render_frame_host_id_);
   if (!ancestor_render_frame_host) {
     client_->OnScriptLoadStartFailed();
     return;
@@ -312,7 +310,7 @@
     mojo::PendingReceiver<blink::mojom::WebUsbService> receiver) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   RenderFrameHostImpl* ancestor_render_frame_host =
-      GetAncestorRenderFrameHost();
+      RenderFrameHostImpl::FromID(ancestor_render_frame_host_id_);
   // The ancestor frame may have already been closed. In that case, the worker
   // will soon be terminated too, so abort the connection.
   if (!ancestor_render_frame_host)
@@ -325,7 +323,7 @@
     mojo::PendingReceiver<blink::mojom::WebSocketConnector> receiver) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   RenderFrameHostImpl* ancestor_render_frame_host =
-      GetAncestorRenderFrameHost();
+      RenderFrameHostImpl::FromID(ancestor_render_frame_host_id_);
   if (!ancestor_render_frame_host) {
     // The ancestor frame may have already been closed. In that case, the worker
     // will soon be terminated too, so abort the connection.
@@ -334,9 +332,10 @@
     return;
   }
   mojo::MakeSelfOwnedReceiver(
-      std::make_unique<WebSocketConnectorImpl>(worker_process_host_->GetID(),
-                                               ancestor_render_frame_id_,
-                                               origin_, network_isolation_key_),
+      std::make_unique<WebSocketConnectorImpl>(
+          ancestor_render_frame_host_id_.child_id,
+          ancestor_render_frame_host_id_.frame_routing_id, origin_,
+          network_isolation_key_),
       std::move(receiver));
 }
 
@@ -344,7 +343,7 @@
     mojo::PendingReceiver<blink::mojom::QuicTransportConnector> receiver) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   RenderFrameHostImpl* ancestor_render_frame_host =
-      GetAncestorRenderFrameHost();
+      RenderFrameHostImpl::FromID(ancestor_render_frame_host_id_);
   if (!ancestor_render_frame_host) {
     // The ancestor frame may have already been closed. In that case, the worker
     // will soon be terminated too, so abort the connection.
@@ -359,17 +358,18 @@
 void DedicatedWorkerHost::CreateNestedDedicatedWorker(
     mojo::PendingReceiver<blink::mojom::DedicatedWorkerHostFactory> receiver) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  CreateDedicatedWorkerHostFactory(worker_process_host_->GetID(),
-                                   ancestor_render_frame_id_,
-                                   /*creator_render_frame_id=*/MSG_ROUTING_NONE,
-                                   origin_, std::move(receiver));
+  GlobalFrameRoutingId new_creator_render_frame_host_id(
+      worker_process_host_->GetID(), MSG_ROUTING_NONE);
+  CreateDedicatedWorkerHostFactory(new_creator_render_frame_host_id,
+                                   ancestor_render_frame_host_id_, origin_,
+                                   std::move(receiver));
 }
 
 void DedicatedWorkerHost::CreateIdleManager(
     mojo::PendingReceiver<blink::mojom::IdleManager> receiver) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   RenderFrameHostImpl* ancestor_render_frame_host =
-      GetAncestorRenderFrameHost();
+      RenderFrameHostImpl::FromID(ancestor_render_frame_host_id_);
   if (!ancestor_render_frame_host) {
     // The ancestor frame may have already been closed. In that case, the worker
     // will soon be terminated too, so abort the connection.
@@ -389,7 +389,7 @@
 void DedicatedWorkerHost::BindSmsReceiverReceiver(
     mojo::PendingReceiver<blink::mojom::SmsReceiver> receiver) {
   RenderFrameHostImpl* ancestor_render_frame_host =
-      GetAncestorRenderFrameHost();
+      RenderFrameHostImpl::FromID(ancestor_render_frame_host_id_);
   if (!ancestor_render_frame_host) {
     // The ancestor frame may have already been closed. In that case, the worker
     // will soon be terminated too, so abort the connection.
@@ -404,7 +404,7 @@
     mojo::PendingReceiver<blink::mojom::SerialService> receiver) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   RenderFrameHostImpl* ancestor_render_frame_host =
-      GetAncestorRenderFrameHost();
+      RenderFrameHostImpl::FromID(ancestor_render_frame_host_id_);
   if (!ancestor_render_frame_host) {
     // The ancestor frame may have already been closed. In that case, the worker
     // will soon be terminated too, so abort the connection.
@@ -439,15 +439,20 @@
       worker_process_host_->GetStoragePartition());
 
   // Get a storage domain.
-  if (!GetAncestorRenderFrameHost() ||
-      !GetAncestorRenderFrameHost()->GetSiteInstance())
+  RenderFrameHostImpl* ancestor_render_frame_host =
+      RenderFrameHostImpl::FromID(ancestor_render_frame_host_id_);
+  if (!ancestor_render_frame_host)
     return;
+
+  SiteInstance* site_instance = ancestor_render_frame_host->GetSiteInstance();
+  if (!site_instance)
+    return;
+
   std::string storage_domain;
   std::string partition_name;
   bool in_memory;
   GetContentClient()->browser()->GetStoragePartitionConfigForSite(
-      storage_partition_impl->browser_context(),
-      GetAncestorRenderFrameHost()->GetSiteInstance()->GetSiteURL(),
+      storage_partition_impl->browser_context(), site_instance->GetSiteURL(),
       /*can_be_default=*/true, &storage_domain, &partition_name, &in_memory);
 
   // Start observing Network Service crash again.
@@ -465,7 +470,7 @@
 
   bool bypass_redirect_checks = false;
   subresource_loader_factories->pending_default_factory() =
-      CreateNetworkFactoryForSubresources(GetAncestorRenderFrameHost(),
+      CreateNetworkFactoryForSubresources(ancestor_render_frame_host,
                                           &bypass_redirect_checks);
   subresource_loader_factories->set_bypass_redirect_checks(
       bypass_redirect_checks);
@@ -474,28 +479,18 @@
       std::move(subresource_loader_factories));
 }
 
-// May return a nullptr.
-RenderFrameHostImpl* DedicatedWorkerHost::GetAncestorRenderFrameHost() {
-  // Use |worker_process_host_->GetID()| as the ancestor render frame's process
-  // ID as the frame surely lives in the same process for dedicated workers.
-  const int ancestor_render_frame_process_id = worker_process_host_->GetID();
-  return RenderFrameHostImpl::FromID(ancestor_render_frame_process_id,
-                                     ancestor_render_frame_id_);
-}
-
 namespace {
 // A factory for creating DedicatedWorkerHosts. Its lifetime is managed by the
 // renderer over mojo via SelfOwnedReceiver. It lives on the UI thread.
 class DedicatedWorkerHostFactoryImpl final
     : public blink::mojom::DedicatedWorkerHostFactory {
  public:
-  DedicatedWorkerHostFactoryImpl(int creator_process_id,
-                                 int ancestor_render_frame_id,
-                                 int creator_render_frame_id,
-                                 const url::Origin& parent_context_origin)
-      : creator_process_id_(creator_process_id),
-        ancestor_render_frame_id_(ancestor_render_frame_id),
-        creator_render_frame_id_(creator_render_frame_id),
+  DedicatedWorkerHostFactoryImpl(
+      GlobalFrameRoutingId creator_render_frame_host_id,
+      GlobalFrameRoutingId ancestor_render_frame_host_id,
+      const url::Origin& parent_context_origin)
+      : creator_render_frame_host_id_(creator_render_frame_host_id),
+        ancestor_render_frame_host_id_(ancestor_render_frame_host_id),
         parent_context_origin_(parent_context_origin) {
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
   }
@@ -514,7 +509,8 @@
     }
 
     // Allocate the worker in the same process as the creator.
-    auto* worker_process_host = RenderProcessHost::FromID(creator_process_id_);
+    auto* worker_process_host =
+        RenderProcessHost::FromID(creator_render_frame_host_id_.child_id);
     if (!worker_process_host) {
       // Abort if the worker's process host is gone. This means that the calling
       // frame or worker is also either destroyed or in the process of being
@@ -528,8 +524,8 @@
     // (Document or DedicatedWorkerGlobalScope), or is unique.
     // Deletes itself on Mojo disconnection.
     auto* host = new DedicatedWorkerHost(
-        worker_process_host, ancestor_render_frame_id_,
-        creator_render_frame_id_, origin, std::move(host_receiver));
+        worker_process_host, creator_render_frame_host_id_,
+        ancestor_render_frame_host_id_, origin, std::move(host_receiver));
     host->BindBrowserInterfaceBrokerReceiver(std::move(broker_receiver));
   }
 
@@ -552,7 +548,8 @@
     }
 
     // Allocate the worker in the same process as the creator.
-    auto* worker_process_host = RenderProcessHost::FromID(creator_process_id_);
+    auto* worker_process_host =
+        RenderProcessHost::FromID(creator_render_frame_host_id_.child_id);
     if (!worker_process_host) {
       // Abort if the worker's process host is gone. This means that the calling
       // frame or worker is also either destroyed or in the process of being
@@ -566,8 +563,8 @@
     // (Document or DedicatedWorkerGlobalScope), or is unique.
     // Deletes itself on Mojo disconnection.
     auto* host = new DedicatedWorkerHost(
-        worker_process_host, ancestor_render_frame_id_,
-        creator_render_frame_id_, request_initiator_origin,
+        worker_process_host, creator_render_frame_host_id_,
+        ancestor_render_frame_host_id_, request_initiator_origin,
         std::move(host_receiver));
     mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker> broker;
     host->BindBrowserInterfaceBrokerReceiver(
@@ -583,9 +580,8 @@
 
  private:
   // See comments on the corresponding members of DedicatedWorkerHost.
-  const int creator_process_id_;
-  const int ancestor_render_frame_id_;
-  const int creator_render_frame_id_;
+  const GlobalFrameRoutingId creator_render_frame_host_id_;
+  const GlobalFrameRoutingId ancestor_render_frame_host_id_;
 
   const url::Origin parent_context_origin_;
 
@@ -595,16 +591,15 @@
 }  // namespace
 
 void CreateDedicatedWorkerHostFactory(
-    int creator_process_id,
-    int ancestor_render_frame_id,
-    int creator_render_frame_id,
+    GlobalFrameRoutingId creator_render_frame_host_id,
+    GlobalFrameRoutingId ancestor_render_frame_host_id,
     const url::Origin& origin,
     mojo::PendingReceiver<blink::mojom::DedicatedWorkerHostFactory> receiver) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  mojo::MakeSelfOwnedReceiver(std::make_unique<DedicatedWorkerHostFactoryImpl>(
-                                  creator_process_id, ancestor_render_frame_id,
-                                  creator_render_frame_id, origin),
-                              std::move(receiver));
+  mojo::MakeSelfOwnedReceiver(
+      std::make_unique<DedicatedWorkerHostFactoryImpl>(
+          creator_render_frame_host_id, ancestor_render_frame_host_id, origin),
+      std::move(receiver));
 }
 
 }  // namespace content
diff --git a/content/browser/worker_host/dedicated_worker_host.h b/content/browser/worker_host/dedicated_worker_host.h
index 2d9a5e7..7d85c36 100644
--- a/content/browser/worker_host/dedicated_worker_host.h
+++ b/content/browser/worker_host/dedicated_worker_host.h
@@ -8,6 +8,7 @@
 #include "base/scoped_observer.h"
 #include "build/build_config.h"
 #include "content/browser/browser_interface_broker_impl.h"
+#include "content/public/browser/global_routing_id.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_process_host_observer.h"
 #include "media/mojo/mojom/video_decode_perf_history.mojom.h"
@@ -43,9 +44,8 @@
 // Creates a host factory for a dedicated worker. This must be called on the UI
 // thread.
 void CreateDedicatedWorkerHostFactory(
-    int creator_process_id,
-    int ancestor_render_frame_id,
-    int creator_render_frame_id,
+    GlobalFrameRoutingId creator_render_frame_host_id,
+    GlobalFrameRoutingId ancestor_render_frame_host_id,
     const url::Origin& origin,
     mojo::PendingReceiver<blink::mojom::DedicatedWorkerHostFactory> receiver);
 
@@ -57,8 +57,8 @@
  public:
   DedicatedWorkerHost(
       RenderProcessHost* worker_process_host,
-      int ancestor_render_frame_id,
-      int creator_render_frame_id,
+      GlobalFrameRoutingId creator_render_frame_host_id,
+      GlobalFrameRoutingId ancestor_render_frame_host_id,
       const url::Origin& origin,
       mojo::PendingReceiver<blink::mojom::DedicatedWorkerHost> host);
   ~DedicatedWorkerHost() final;
@@ -139,16 +139,14 @@
   // Creates a network factory for subresource requests from this worker. The
   // network factory is meant to be passed to the renderer.
   mojo::PendingRemote<network::mojom::URLLoaderFactory>
-  CreateNetworkFactoryForSubresources(RenderFrameHostImpl* render_frame_host,
-                                      bool* bypass_redirect_checks);
+  CreateNetworkFactoryForSubresources(
+      RenderFrameHostImpl* ancestor_render_frame_host,
+      bool* bypass_redirect_checks);
 
   // Updates subresource loader factories. This is supposed to be called when
   // out-of-process Network Service crashes.
   void UpdateSubresourceLoaderFactories();
 
-  // May return a nullptr.
-  RenderFrameHostImpl* GetAncestorRenderFrameHost();
-
   void OnMojoDisconnect();
 
   // The RenderProcessHost that hosts this worker.
@@ -157,13 +155,14 @@
   ScopedObserver<RenderProcessHost, RenderProcessHostObserver>
       scoped_process_host_observer_;
 
+  // The ID of the frame that directly starts this worker. This is
+  // {creator_render_process_host_id, MSG_ROUTING_NONE} when this worker is
+  // nested.
+  const GlobalFrameRoutingId creator_render_frame_host_id_;
+
   // The ID of the frame that owns this worker, either directly, or (in the case
   // of nested workers) indirectly via a tree of dedicated workers.
-  const int ancestor_render_frame_id_;
-
-  // The ID of the frame that directly starts this worker. This is
-  // MSG_ROUTING_NONE when this worker is nested.
-  const int creator_render_frame_id_;
+  const GlobalFrameRoutingId ancestor_render_frame_host_id_;
 
   const url::Origin origin_;
 
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn
index 7b3a449..9b2fb0a 100644
--- a/content/common/BUILD.gn
+++ b/content/common/BUILD.gn
@@ -213,8 +213,6 @@
     "service_worker/service_worker_utils.h",
     "skia_utils.cc",
     "skia_utils.h",
-    "swapped_out_messages.cc",
-    "swapped_out_messages.h",
     "tab_switch_time_recorder.cc",
     "tab_switch_time_recorder.h",
     "text_input_client_messages.h",
diff --git a/content/common/swapped_out_messages.cc b/content/common/swapped_out_messages.cc
deleted file mode 100644
index 46d4da87..0000000
--- a/content/common/swapped_out_messages.cc
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/common/swapped_out_messages.h"
-
-#include "content/common/accessibility_messages.h"
-#include "content/common/view_messages.h"
-#include "content/public/common/content_client.h"
-
-namespace content {
-
-bool SwappedOutMessages::CanSendWhileSwappedOut(const IPC::Message* msg) {
-  // We filter out most IPC messages when swapped out.  However, some are
-  // important (e.g., ACKs) for keeping the browser and renderer state
-  // consistent in case we later return to the same renderer.
-  switch (msg->type()) {
-    // Handled by RenderViewHost.
-    case ViewHostMsg_ClosePage_ACK::ID:
-    case ViewHostMsg_Focus::ID:
-    case ViewHostMsg_ShowFullscreenWidget::ID:
-    case ViewHostMsg_ShowWidget::ID:
-    case ViewHostMsg_UpdateTargetURL::ID:
-    case ViewHostMsg_RouteCloseEvent::ID:
-    // Send page scale factor reset notification upon cross-process navigations.
-    case ViewHostMsg_PageScaleFactorChanged::ID:
-      return true;
-    default:
-      break;
-  }
-
-  // Check with the embedder as well.
-  ContentClient* client = GetContentClient();
-  return client->CanSendWhileSwappedOut(msg);
-}
-
-bool SwappedOutMessages::CanHandleWhileSwappedOut(
-    const IPC::Message& msg) {
-  // Any message the renderer is allowed to send while swapped out should
-  // be handled by the browser.
-  if (CanSendWhileSwappedOut(&msg))
-    return true;
-
-  // We drop most other messages that arrive from a swapped out renderer.
-  // However, some are important (e.g., ACKs) for keeping the browser and
-  // renderer state consistent in case we later return to the renderer.
-  // Note that synchronous messages that are not handled will receive an
-  // error reply instead, to avoid leaving the renderer in a stuck state.
-  switch (msg.type()) {
-    // Sends an ACK.
-    case AccessibilityHostMsg_EventBundle::ID:
-      return true;
-    default:
-      break;
-  }
-
-  return false;
-}
-
-}  // namespace content
diff --git a/content/common/swapped_out_messages.h b/content/common/swapped_out_messages.h
deleted file mode 100644
index c4b0649..0000000
--- a/content/common/swapped_out_messages.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_COMMON_SWAPPED_OUT_MESSAGES_H_
-#define CONTENT_COMMON_SWAPPED_OUT_MESSAGES_H_
-
-#include "ipc/ipc_message.h"
-
-namespace content {
-
-// Functions for filtering IPC messages sent from and received from a swapped
-// out renderer.
-class SwappedOutMessages {
- public:
-  static bool CanSendWhileSwappedOut(const IPC::Message* msg);
-  static bool CanHandleWhileSwappedOut(const IPC::Message& msg);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_COMMON_SWAPPED_OUT_MESSAGES_H_
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index cbe040b6..5369a07 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -1013,12 +1013,6 @@
       RenderProcessHost* render_process_host,
       mojo::GenericPendingReceiver receiver) {}
 
-  // Called on the IO thread to handle an unhandled interface receiver binding
-  // request from a render process. See |RenderThread::BindHostReceiver()|.
-  virtual void BindHostReceiverForRendererOnIOThread(
-      int render_process_id,
-      mojo::GenericPendingReceiver* receiver) {}
-
   // Called just before the Service Manager is initialized.
   virtual void WillStartServiceManager() {}
 
diff --git a/content/public/browser/permission_type.cc b/content/public/browser/permission_type.cc
index 77902ac3..05632368 100644
--- a/content/public/browser/permission_type.cc
+++ b/content/public/browser/permission_type.cc
@@ -6,6 +6,12 @@
 
 #include "base/no_destructor.h"
 #include "base/stl_util.h"
+#include "build/build_config.h"
+#include "third_party/blink/public/mojom/permissions/permission.mojom.h"
+
+using blink::mojom::PermissionDescriptorPtr;
+using blink::mojom::PermissionName;
+using blink::mojom::PermissionStatus;
 
 namespace content {
 
@@ -25,4 +31,78 @@
   return *kAllPermissionTypes;
 }
 
+base::Optional<PermissionType> PermissionDescriptorToPermissionType(
+    const PermissionDescriptorPtr& descriptor) {
+  switch (descriptor->name) {
+    case PermissionName::GEOLOCATION:
+      return PermissionType::GEOLOCATION;
+    case PermissionName::NOTIFICATIONS:
+      return PermissionType::NOTIFICATIONS;
+    case PermissionName::MIDI: {
+      if (descriptor->extension && descriptor->extension->is_midi() &&
+          descriptor->extension->get_midi()->sysex) {
+        return PermissionType::MIDI_SYSEX;
+      }
+      return PermissionType::MIDI;
+    }
+    case PermissionName::PROTECTED_MEDIA_IDENTIFIER:
+#if defined(ENABLE_PROTECTED_MEDIA_IDENTIFIER_PERMISSION)
+      return PermissionType::PROTECTED_MEDIA_IDENTIFIER;
+#else
+      NOTIMPLEMENTED();
+      return base::nullopt;
+#endif  // defined(ENABLE_PROTECTED_MEDIA_IDENTIFIER_PERMISSION)
+    case PermissionName::DURABLE_STORAGE:
+      return PermissionType::DURABLE_STORAGE;
+    case PermissionName::AUDIO_CAPTURE:
+      return PermissionType::AUDIO_CAPTURE;
+    case PermissionName::VIDEO_CAPTURE:
+      return PermissionType::VIDEO_CAPTURE;
+    case PermissionName::BACKGROUND_SYNC:
+      return PermissionType::BACKGROUND_SYNC;
+    case PermissionName::SENSORS:
+      return PermissionType::SENSORS;
+    case PermissionName::ACCESSIBILITY_EVENTS:
+      return PermissionType::ACCESSIBILITY_EVENTS;
+    case PermissionName::CLIPBOARD_READ:
+      return PermissionType::CLIPBOARD_READ_WRITE;
+    case PermissionName::CLIPBOARD_WRITE: {
+      if (descriptor->extension && descriptor->extension->is_clipboard() &&
+          descriptor->extension->get_clipboard()->allowWithoutSanitization) {
+        return PermissionType::CLIPBOARD_READ_WRITE;
+      } else {
+        return PermissionType::CLIPBOARD_SANITIZED_WRITE;
+      }
+    }
+    case PermissionName::PAYMENT_HANDLER:
+      return PermissionType::PAYMENT_HANDLER;
+    case PermissionName::BACKGROUND_FETCH:
+      return PermissionType::BACKGROUND_FETCH;
+    case PermissionName::IDLE_DETECTION:
+      return PermissionType::IDLE_DETECTION;
+    case PermissionName::PERIODIC_BACKGROUND_SYNC:
+      return PermissionType::PERIODIC_BACKGROUND_SYNC;
+    case PermissionName::WAKE_LOCK:
+      if (descriptor->extension && descriptor->extension->is_wake_lock()) {
+        switch (descriptor->extension->get_wake_lock()->type) {
+          case blink::mojom::WakeLockType::kScreen:
+            return PermissionType::WAKE_LOCK_SCREEN;
+            break;
+          case blink::mojom::WakeLockType::kSystem:
+            return PermissionType::WAKE_LOCK_SYSTEM;
+            break;
+          default:
+            NOTREACHED();
+            return base::nullopt;
+        }
+      }
+      break;
+    case PermissionName::NFC:
+      return PermissionType::NFC;
+  }
+
+  NOTREACHED();
+  return base::nullopt;
+}
+
 }  // namespace content
diff --git a/content/public/browser/permission_type.h b/content/public/browser/permission_type.h
index fb79c710..187712c 100644
--- a/content/public/browser/permission_type.h
+++ b/content/public/browser/permission_type.h
@@ -7,7 +7,9 @@
 
 #include <vector>
 
+#include "base/optional.h"
 #include "content/common/content_export.h"
+#include "third_party/blink/public/mojom/permissions/permission.mojom-forward.h"
 
 namespace content {
 
@@ -51,6 +53,11 @@
 
 CONTENT_EXPORT const std::vector<PermissionType>& GetAllPermissionTypes();
 
+// Given |descriptor|, set |permission_type| to a corresponding PermissionType.
+CONTENT_EXPORT base::Optional<PermissionType>
+PermissionDescriptorToPermissionType(
+    const blink::mojom::PermissionDescriptorPtr& descriptor);
+
 }  // namespace content
 
 #endif  // CONTENT_PUBLIC_BROWSER_PERMISSION_TYPE_H_
diff --git a/content/public/browser/render_widget_host_view.h b/content/public/browser/render_widget_host_view.h
index 8fe90d1..2064476 100644
--- a/content/public/browser/render_widget_host_view.h
+++ b/content/public/browser/render_widget_host_view.h
@@ -228,10 +228,6 @@
   virtual std::unique_ptr<viz::ClientFrameSinkVideoCapturer>
   CreateVideoCapturer() = 0;
 
-  // Informs the view that its associated render widget has frames to draw and
-  // wants to have BeginFrame messages sent to it.  This should only be called
-  // when the value has changed.  Views must initially default to false.
-  virtual void SetNeedsBeginFrames(bool needs_begin_frames) = 0;
   // This method returns the ScreenInfo used by the view to render. If the
   // information is not knowable (e.g, because the view is not attached to a
   // screen yet), then a default best-guess will be used.
diff --git a/content/public/child/child_thread.h b/content/public/child/child_thread.h
index 5317889..12df17c 100644
--- a/content/public/child/child_thread.h
+++ b/content/public/child/child_thread.h
@@ -63,10 +63,8 @@
   //
   //   For renderers:
   //       1. IO thread, IOThreadHostImpl::BindHostReceiver.
-  //       2. IO thread,
-  //          ContentBrowserClient::BindHostReceiverForRendererOnIOThread.
-  //       3. Main thread, RenderProcessHostImpl::BindHostReceiver.
-  //       4. Main thread, ContentBrowserClient::BindHostReceiverForRenderer.
+  //       2. Main thread, RenderProcessHostImpl::BindHostReceiver.
+  //       3. Main thread, ContentBrowserClient::BindHostReceiverForRenderer.
   //
   // TODO(crbug.com/977637): Document behavior for other process types when
   // their support is added.
diff --git a/content/public/common/content_client.cc b/content/public/common/content_client.cc
index f11035d..494f4ff3 100644
--- a/content/public/common/content_client.cc
+++ b/content/public/common/content_client.cc
@@ -67,10 +67,6 @@
 ContentClient::~ContentClient() {
 }
 
-bool ContentClient::CanSendWhileSwappedOut(const IPC::Message* message) {
-  return false;
-}
-
 base::string16 ContentClient::GetLocalizedString(int message_id) {
   return base::string16();
 }
diff --git a/content/public/common/content_client.h b/content/public/common/content_client.h
index 1b9729c..2b2ef66 100644
--- a/content/public/common/content_client.h
+++ b/content/public/common/content_client.h
@@ -30,10 +30,6 @@
 class OriginTrialPolicy;
 }
 
-namespace IPC {
-class Message;
-}
-
 namespace gfx {
 class Image;
 }
@@ -153,9 +149,6 @@
 
   virtual void AddAdditionalSchemes(Schemes* schemes) {}
 
-  // Returns whether the given message should be sent in a swapped out renderer.
-  virtual bool CanSendWhileSwappedOut(const IPC::Message* message);
-
   // Returns a string resource given its id.
   virtual base::string16 GetLocalizedString(int message_id);
 
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index 9dd22cf5..4a64adb 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -613,11 +613,15 @@
 const base::Feature kWebAssemblyCodeGC{"WebAssemblyCodeGC",
                                        base::FEATURE_ENABLED_BY_DEFAULT};
 
-// Enable WebAssembly SIMD
+// Enable WebAssembly SIMD.
 // https://github.com/WebAssembly/Simd
 const base::Feature kWebAssemblySimd{"WebAssemblySimd",
                                      base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enable WebAssembly tiering (Liftoff -> TurboFan).
+const base::Feature kWebAssemblyTiering{"WebAssemblyTiering",
+                                        base::FEATURE_ENABLED_BY_DEFAULT};
+
 // Enable WebAssembly threads.
 // https://github.com/WebAssembly/threads
 const base::Feature kWebAssemblyThreads {
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index a37ad87..ab3a00f 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -135,6 +135,7 @@
 CONTENT_EXPORT extern const base::Feature kWebAssemblyCodeGC;
 CONTENT_EXPORT extern const base::Feature kWebAssemblySimd;
 CONTENT_EXPORT extern const base::Feature kWebAssemblyThreads;
+CONTENT_EXPORT extern const base::Feature kWebAssemblyTiering;
 CONTENT_EXPORT extern const base::Feature kWebAssemblyTrapHandler;
 CONTENT_EXPORT extern const base::Feature kWebAuth;
 CONTENT_EXPORT extern const base::Feature kWebAuthBle;
diff --git a/content/public/utility/content_utility_client.h b/content/public/utility/content_utility_client.h
index 793d821..e521fbd 100644
--- a/content/public/utility/content_utility_client.h
+++ b/content/public/utility/content_utility_client.h
@@ -16,6 +16,10 @@
 #include "services/service_manager/public/cpp/service.h"
 #include "services/service_manager/public/mojom/service.mojom.h"
 
+namespace IPC {
+class Message;
+}
+
 namespace mojo {
 class BinderMap;
 class ServiceFactory;
diff --git a/content/renderer/loader/web_url_loader_impl.cc b/content/renderer/loader/web_url_loader_impl.cc
index 24701d10..e3dd14a 100644
--- a/content/renderer/loader/web_url_loader_impl.cc
+++ b/content/renderer/loader/web_url_loader_impl.cc
@@ -1021,6 +1021,7 @@
       net::IsCertStatusError(head.cert_status));
   response->SetCTPolicyCompliance(head.ct_policy_compliance);
   response->SetIsLegacyTLSVersion(head.is_legacy_tls_version);
+  response->SetTimingAllowPassed(head.timing_allow_passed);
   response->SetAppCacheID(head.appcache_id);
   response->SetAppCacheManifestURL(head.appcache_manifest_url);
   response->SetWasCached(!head.load_timing.request_start_time.is_null() &&
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index bde0bdb..3f27c51 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -65,7 +65,6 @@
 #include "content/common/page_messages.h"
 #include "content/common/renderer_host.mojom.h"
 #include "content/common/savable_subframe.h"
-#include "content/common/swapped_out_messages.h"
 #include "content/common/unfreezable_frame_messages.h"
 #include "content/common/view_messages.h"
 #include "content/common/web_package/signed_exchange_utils.h"
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc
index 186dd71..2c5bbe6 100644
--- a/content/renderer/render_frame_proxy.cc
+++ b/content/renderer/render_frame_proxy.cc
@@ -18,7 +18,6 @@
 #include "content/common/frame_replication_state.h"
 #include "content/common/input_messages.h"
 #include "content/common/page_messages.h"
-#include "content/common/swapped_out_messages.h"
 #include "content/common/unfreezable_frame_messages.h"
 #include "content/common/view_messages.h"
 #include "content/public/common/content_client.h"
diff --git a/content/renderer/render_process_impl.cc b/content/renderer/render_process_impl.cc
index a8fa1d5..81d5b96 100644
--- a/content/renderer/render_process_impl.cc
+++ b/content/renderer/render_process_impl.cc
@@ -128,10 +128,8 @@
   SetV8FlagIfFeature(features::kV8VmFuture, "--future");
   SetV8FlagIfNotFeature(features::kV8VmFuture, "--no-future");
 
-  SetV8FlagIfFeature(features::kWebAssemblyBaseline,
-                     "--liftoff --wasm-tier-up");
-  SetV8FlagIfNotFeature(features::kWebAssemblyBaseline,
-                        "--no-liftoff --no-wasm-tier-up");
+  SetV8FlagIfFeature(features::kWebAssemblyBaseline, "--liftoff");
+  SetV8FlagIfNotFeature(features::kWebAssemblyBaseline, "--no-liftoff");
 
   SetV8FlagIfFeature(features::kWebAssemblyCodeGC, "--wasm-code-gc");
   SetV8FlagIfNotFeature(features::kWebAssemblyCodeGC, "--no-wasm-code-gc");
@@ -156,6 +154,9 @@
                           "--no-harmony-sharedarraybuffer");
   }
 
+  SetV8FlagIfFeature(features::kWebAssemblyTiering, "--wasm-tier-up");
+  SetV8FlagIfNotFeature(features::kWebAssemblyTiering, "--no-wasm-tier-up");
+
   SetV8FlagIfNotFeature(features::kWebAssemblyTrapHandler,
                         "--no-wasm-trap-handler");
 #if defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index af8dfe8..9f9dc72 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -148,6 +148,7 @@
 #include "third_party/icu/source/common/unicode/uchar.h"
 #include "third_party/icu/source/common/unicode/uscript.h"
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/base/ui_base_features.h"
 #include "ui/base/ui_base_switches_util.h"
 #include "ui/gfx/geometry/point.h"
 #include "ui/gfx/geometry/rect.h"
@@ -1922,6 +1923,11 @@
   }
 #endif
 
+  if (features::IsFormControlsRefreshEnabled() &&
+      renderer_prefs.use_custom_colors) {
+    blink::SetFocusRingColor(renderer_prefs.focus_ring_color);
+  }
+
   if (webview() &&
       old_accept_languages != renderer_preferences_.accept_languages) {
     webview()->AcceptLanguagesChanged();
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index b1c61a3..d05abec 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -43,7 +43,6 @@
 #include "content/common/drag_messages.h"
 #include "content/common/render_frame_metadata.mojom.h"
 #include "content/common/render_message_filter.mojom.h"
-#include "content/common/swapped_out_messages.h"
 #include "content/common/text_input_state.h"
 #include "content/common/widget_messages.h"
 #include "content/public/common/content_client.h"
diff --git a/content/shell/browser/web_test/web_test_content_browser_client.cc b/content/shell/browser/web_test/web_test_content_browser_client.cc
index 700996b..3f2d303 100644
--- a/content/shell/browser/web_test/web_test_content_browser_client.cc
+++ b/content/shell/browser/web_test/web_test_content_browser_client.cc
@@ -34,6 +34,7 @@
 #include "content/shell/browser/web_test/web_test_browser_context.h"
 #include "content/shell/browser/web_test/web_test_browser_main_parts.h"
 #include "content/shell/browser/web_test/web_test_message_filter.h"
+#include "content/shell/browser/web_test/web_test_permission_manager.h"
 #include "content/shell/browser/web_test/web_test_tts_controller_delegate.h"
 #include "content/shell/browser/web_test/web_test_tts_platform.h"
 #include "content/shell/common/web_test/web_test_switches.h"
@@ -178,6 +179,12 @@
           &WebTestContentBrowserClient::BindClientHintsControllerDelegate,
           base::Unretained(this)),
       ui_task_runner);
+
+  registry->AddInterface(
+      base::BindRepeating(
+          &WebTestContentBrowserClient::BindPermissionAutomation,
+          base::Unretained(this)),
+      ui_task_runner);
 }
 
 void WebTestContentBrowserClient::BindClipboardHostForRequest(
@@ -202,6 +209,12 @@
   delegate->Bind(std::move(receiver));
 }
 
+void WebTestContentBrowserClient::BindPermissionAutomation(
+    mojo::PendingReceiver<blink::test::mojom::PermissionAutomation> receiver) {
+  GetWebTestBrowserContext()->GetWebTestPermissionManager()->Bind(
+      std::move(receiver));
+}
+
 void WebTestContentBrowserClient::OverrideWebkitPrefs(
     RenderViewHost* render_view_host,
     WebPreferences* prefs) {
diff --git a/content/shell/browser/web_test/web_test_content_browser_client.h b/content/shell/browser/web_test/web_test_content_browser_client.h
index c5dd687..0c9e573 100644
--- a/content/shell/browser/web_test/web_test_content_browser_client.h
+++ b/content/shell/browser/web_test/web_test_content_browser_client.h
@@ -14,6 +14,7 @@
 #include "services/service_manager/public/cpp/binder_map.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
 #include "third_party/blink/public/mojom/clipboard/clipboard.mojom.h"
+#include "third_party/blink/public/mojom/permissions/permission_automation.mojom-forward.h"
 
 namespace content {
 
@@ -102,6 +103,9 @@
   void BindClientHintsControllerDelegate(
       mojo::PendingReceiver<client_hints::mojom::ClientHints> receiver);
 
+  void BindPermissionAutomation(
+      mojo::PendingReceiver<blink::test::mojom::PermissionAutomation> receiver);
+
   std::unique_ptr<MockPlatformNotificationService>
       mock_platform_notification_service_;
   bool block_popups_ = false;
diff --git a/content/shell/browser/web_test/web_test_permission_manager.cc b/content/shell/browser/web_test/web_test_permission_manager.cc
index 1a00c6a..67f34de 100644
--- a/content/shell/browser/web_test/web_test_permission_manager.cc
+++ b/content/shell/browser/web_test/web_test_permission_manager.cc
@@ -207,6 +207,22 @@
   OnPermissionChanged(description, status);
 }
 
+void WebTestPermissionManager::SetPermission(
+    blink::mojom::PermissionDescriptorPtr descriptor,
+    blink::mojom::PermissionStatus status,
+    const GURL& url,
+    const GURL& embedding_url,
+    blink::test::mojom::PermissionAutomation::SetPermissionCallback callback) {
+  auto type = PermissionDescriptorToPermissionType(descriptor);
+  if (!type) {
+    std::move(callback).Run(false);
+    return;
+  }
+
+  SetPermission(*type, status, url, embedding_url);
+  std::move(callback).Run(true);
+}
+
 void WebTestPermissionManager::ResetPermissions() {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
@@ -214,6 +230,11 @@
   permissions_.clear();
 }
 
+void WebTestPermissionManager::Bind(
+    mojo::PendingReceiver<blink::test::mojom::PermissionAutomation> receiver) {
+  receivers_.Add(this, std::move(receiver));
+}
+
 void WebTestPermissionManager::OnPermissionChanged(
     const PermissionDescription& permission,
     blink::mojom::PermissionStatus status) {
diff --git a/content/shell/browser/web_test/web_test_permission_manager.h b/content/shell/browser/web_test/web_test_permission_manager.h
index dfff29f9..1d15dbb 100644
--- a/content/shell/browser/web_test/web_test_permission_manager.h
+++ b/content/shell/browser/web_test/web_test_permission_manager.h
@@ -12,11 +12,16 @@
 #include "base/macros.h"
 #include "base/synchronization/lock.h"
 #include "content/public/browser/permission_controller_delegate.h"
+#include "mojo/public/cpp/bindings/receiver_set.h"
+#include "third_party/blink/public/mojom/permissions/permission.mojom.h"
+#include "third_party/blink/public/mojom/permissions/permission_automation.mojom.h"
 #include "url/gurl.h"
 
 namespace content {
 
-class WebTestPermissionManager : public PermissionControllerDelegate {
+class WebTestPermissionManager
+    : public PermissionControllerDelegate,
+      public blink::test::mojom::PermissionAutomation {
  public:
   WebTestPermissionManager();
   ~WebTestPermissionManager() override;
@@ -61,6 +66,17 @@
                      const GURL& embedding_url);
   void ResetPermissions();
 
+  // blink::test::mojom::PermissionAutomation
+  void SetPermission(
+      blink::mojom::PermissionDescriptorPtr descriptor,
+      blink::mojom::PermissionStatus status,
+      const GURL& url,
+      const GURL& embedding_url,
+      blink::test::mojom::PermissionAutomation::SetPermissionCallback) override;
+
+  void Bind(
+      mojo::PendingReceiver<blink::test::mojom::PermissionAutomation> receiver);
+
  private:
   // Representation of a permission for the WebTestPermissionManager.
   struct PermissionDescription {
@@ -101,6 +117,8 @@
   // List of subscribers currently listening to permission changes.
   SubscriptionsMap subscriptions_;
 
+  mojo::ReceiverSet<blink::test::mojom::PermissionAutomation> receivers_;
+
   DISALLOW_COPY_AND_ASSIGN(WebTestPermissionManager);
 };
 
diff --git a/content/shell/common/shell_content_client.cc b/content/shell/common/shell_content_client.cc
index febd34bf..91958b2 100644
--- a/content/shell/common/shell_content_client.cc
+++ b/content/shell/common/shell_content_client.cc
@@ -79,19 +79,6 @@
   return &origin_trial_policy_;
 }
 
-bool ShellContentClient::CanSendWhileSwappedOut(const IPC::Message* message) {
-  if (!in_web_test_)
-    return ContentClient::CanSendWhileSwappedOut(message);
-  switch (message->type()) {
-    // Used in web tests; handled in BlinkTestController.
-    case BlinkTestHostMsg_PrintMessage::ID:
-      return true;
-
-    default:
-      return false;
-  }
-}
-
 void ShellContentClient::SetInWebTest(bool in_web_test) {
   in_web_test_ = in_web_test;
 }
diff --git a/content/shell/common/shell_content_client.h b/content/shell/common/shell_content_client.h
index b6fcb118..bf8b686 100644
--- a/content/shell/common/shell_content_client.h
+++ b/content/shell/common/shell_content_client.h
@@ -26,7 +26,6 @@
   gfx::Image& GetNativeImageNamed(int resource_id) override;
   base::DictionaryValue GetNetLogConstants() override;
   blink::OriginTrialPolicy* GetOriginTrialPolicy() override;
-  bool CanSendWhileSwappedOut(const IPC::Message* message) override;
 
   void SetInWebTest(bool in_web_test);
 
diff --git a/content/shell/renderer/web_test/blink_test_runner.cc b/content/shell/renderer/web_test/blink_test_runner.cc
index 7d64ac10..215f3e8e6 100644
--- a/content/shell/renderer/web_test/blink_test_runner.cc
+++ b/content/shell/renderer/web_test/blink_test_runner.cc
@@ -61,6 +61,7 @@
 #include "services/service_manager/public/cpp/binder_registry.h"
 #include "skia/ext/platform_canvas.h"
 #include "third_party/blink/public/common/input/web_input_event.h"
+#include "third_party/blink/public/common/permissions/permission_utils.h"
 #include "third_party/blink/public/mojom/app_banner/app_banner.mojom.h"
 #include "third_party/blink/public/platform/file_path_conversion.h"
 #include "third_party/blink/public/platform/platform.h"
@@ -618,20 +619,9 @@
                                     const std::string& value,
                                     const GURL& origin,
                                     const GURL& embedding_origin) {
-  blink::mojom::PermissionStatus status;
-  if (value == "granted") {
-    status = blink::mojom::PermissionStatus::GRANTED;
-  } else if (value == "prompt") {
-    status = blink::mojom::PermissionStatus::ASK;
-  } else if (value == "denied") {
-    status = blink::mojom::PermissionStatus::DENIED;
-  } else {
-    NOTREACHED();
-    status = blink::mojom::PermissionStatus::DENIED;
-  }
-
-  Send(new WebTestHostMsg_SetPermission(routing_id(), name, status, origin,
-                                        embedding_origin));
+  Send(new WebTestHostMsg_SetPermission(routing_id(), name,
+                                        blink::ToPermissionStatus(value),
+                                        origin, embedding_origin));
 }
 
 void BlinkTestRunner::ResetPermissions() {
diff --git a/content/test/test_render_view_host.h b/content/test/test_render_view_host.h
index 8e6f815..6d73528 100644
--- a/content/test/test_render_view_host.h
+++ b/content/test/test_render_view_host.h
@@ -92,7 +92,6 @@
   // period of time.
   void ResetFallbackToFirstNavigationSurface() override {}
 
-  void SetNeedsBeginFrames(bool needs_begin_frames) override {}
   void TakeFallbackContentFrom(RenderWidgetHostView* view) override;
   void EnsureSurfaceSynchronizedForWebTest() override {}
 
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index ad9e69b4..45ad566 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -1492,6 +1492,8 @@
   AUTOTESTPRIVATE_ISARCPACKAGELISTINITIALREFRESHED = 1429,
   AUTOTESTPRIVATE_STARTTRACING = 1430,
   AUTOTESTPRIVATE_STOPTRACING = 1431,
+  LOGIN_LOCKMANAGEDGUESTSESSION = 1432,
+  LOGIN_UNLOCKMANAGEDGUESTSESSION = 1433,
   // Last entry: Add new entries above, then run:
   // python tools/metrics/histograms/update_extension_histograms.py
   ENUM_BOUNDARY
diff --git a/gpu/command_buffer/service/command_buffer_direct.cc b/gpu/command_buffer/service/command_buffer_direct.cc
index 5b9e2a7c..b5a604d9 100644
--- a/gpu/command_buffer/service/command_buffer_direct.cc
+++ b/gpu/command_buffer/service/command_buffer_direct.cc
@@ -10,16 +10,7 @@
 
 namespace gpu {
 
-namespace {
-
-uint64_t g_next_command_buffer_id = 1;
-
-}  // anonymous namespace
-
-CommandBufferDirect::CommandBufferDirect()
-    : service_(this, nullptr),
-      command_buffer_id_(
-          CommandBufferId::FromUnsafeValue(g_next_command_buffer_id++)) {}
+CommandBufferDirect::CommandBufferDirect() : service_(this, nullptr) {}
 
 CommandBufferDirect::~CommandBufferDirect() = default;
 
diff --git a/gpu/command_buffer/service/command_buffer_direct.h b/gpu/command_buffer/service/command_buffer_direct.h
index 52333650..44842ba 100644
--- a/gpu/command_buffer/service/command_buffer_direct.h
+++ b/gpu/command_buffer/service/command_buffer_direct.h
@@ -6,7 +6,6 @@
 #define GPU_COMMAND_BUFFER_SERVICE_COMMAND_BUFFER_DIRECT_H_
 
 #include "base/callback.h"
-#include "gpu/command_buffer/common/command_buffer_id.h"
 #include "gpu/command_buffer/common/constants.h"
 #include "gpu/command_buffer/service/command_buffer_service.h"
 #include "gpu/command_buffer/service/decoder_client.h"
@@ -62,7 +61,6 @@
  private:
   CommandBufferService service_;
   AsyncAPIInterface* handler_ = nullptr;
-  const CommandBufferId command_buffer_id_;
 };
 
 }  // namespace gpu
diff --git a/gpu/command_buffer/service/shared_context_state.cc b/gpu/command_buffer/service/shared_context_state.cc
index de4702f2..be28922 100644
--- a/gpu/command_buffer/service/shared_context_state.cc
+++ b/gpu/command_buffer/service/shared_context_state.cc
@@ -435,8 +435,8 @@
 
 void SharedContextState::UpdateSkiaOwnedMemorySize() {
   if (!gr_context_) {
-    memory_tracker_.OnMemoryAllocatedChange(
-        CommandBufferId::FromUnsafeValue(0u), skia_gr_cache_size_, 0u);
+    memory_tracker_.OnMemoryAllocatedChange(CommandBufferId(),
+                                            skia_gr_cache_size_, 0u);
     skia_gr_cache_size_ = 0u;
     return;
   }
@@ -445,9 +445,8 @@
   // Skia does not have a CommandBufferId. PeakMemoryMonitor currently does not
   // use CommandBufferId to identify source, so use zero here to separate
   // prevent confusion.
-  memory_tracker_.OnMemoryAllocatedChange(CommandBufferId::FromUnsafeValue(0u),
-                                          skia_gr_cache_size_,
-                                          static_cast<uint64_t>(new_size));
+  memory_tracker_.OnMemoryAllocatedChange(
+      CommandBufferId(), skia_gr_cache_size_, static_cast<uint64_t>(new_size));
   skia_gr_cache_size_ = static_cast<uint64_t>(new_size);
 }
 
diff --git a/gpu/command_buffer/service/sync_point_manager.cc b/gpu/command_buffer/service/sync_point_manager.cc
index 69856b5..cede4071 100644
--- a/gpu/command_buffer/service/sync_point_manager.cc
+++ b/gpu/command_buffer/service/sync_point_manager.cc
@@ -342,7 +342,7 @@
 
 scoped_refptr<SyncPointOrderData> SyncPointManager::CreateSyncPointOrderData() {
   base::AutoLock auto_lock(lock_);
-  SequenceId sequence_id = SequenceId::FromUnsafeValue(next_sequence_id_++);
+  SequenceId sequence_id = sequence_id_generator_.GenerateNextId();
   scoped_refptr<SyncPointOrderData> order_data =
       new SyncPointOrderData(this, sequence_id);
   DCHECK(!order_data_map_.count(sequence_id));
diff --git a/gpu/command_buffer/service/sync_point_manager.h b/gpu/command_buffer/service/sync_point_manager.h
index 8a44c18..c6fe88dc 100644
--- a/gpu/command_buffer/service/sync_point_manager.h
+++ b/gpu/command_buffer/service/sync_point_manager.h
@@ -338,7 +338,7 @@
   // Map of sequence id to order data.
   OrderDataMap order_data_map_;
 
-  uint32_t next_sequence_id_ = 1;
+  SequenceId::Generator sequence_id_generator_;
 
   mutable base::Lock lock_;
 
diff --git a/gpu/ipc/client/gpu_channel_host.cc b/gpu/ipc/client/gpu_channel_host.cc
index f269259..5f844cc 100644
--- a/gpu/ipc/client/gpu_channel_host.cc
+++ b/gpu/ipc/client/gpu_channel_host.cc
@@ -13,7 +13,6 @@
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "gpu/ipc/common/command_buffer_id.h"
 #include "gpu/ipc/common/gpu_messages.h"
@@ -21,6 +20,7 @@
 #include "gpu/ipc/common/gpu_watchdog_timeout.h"
 #include "ipc/ipc_channel_mojo.h"
 #include "ipc/ipc_sync_message.h"
+#include "ipc/trace_ipc_message.h"
 #include "mojo/public/cpp/bindings/lib/message_quota_checker.h"
 #include "url/gurl.h"
 
@@ -53,9 +53,7 @@
 }
 
 bool GpuChannelHost::Send(IPC::Message* msg) {
-  TRACE_EVENT2("ipc", "GpuChannelHost::Send", "class",
-               IPC_MESSAGE_ID_CLASS(msg->type()), "line",
-               IPC_MESSAGE_ID_LINE(msg->type()));
+  TRACE_IPC_MESSAGE_SEND("ipc", "GpuChannelHost::Send", msg);
 
   auto message = base::WrapUnique(msg);
 
diff --git a/infra/config/consoles/chromium.fyi.star b/infra/config/consoles/chromium.fyi.star
index 5b29e4f..35242128 100644
--- a/infra/config/consoles/chromium.fyi.star
+++ b/infra/config/consoles/chromium.fyi.star
@@ -156,6 +156,13 @@
             builder = 'ci/linux-wpt-fyi-rel',
             category = 'linux',
         ),
+        # Moved to the FYI console for being habitually flaky.
+        # https://crbug.com/1014673
+        luci.console_view_entry(
+            builder = 'ci/Leak Detection Linux',
+            category = 'linux',
+            short_name = 'lk',
+        ),
         luci.console_view_entry(
             builder = 'ci/Mojo Android',
             category = 'mojo',
diff --git a/infra/config/consoles/chromium.linux.star b/infra/config/consoles/chromium.linux.star
index cf5c2c0..fc4579b4 100644
--- a/infra/config/consoles/chromium.linux.star
+++ b/infra/config/consoles/chromium.linux.star
@@ -24,11 +24,6 @@
             short_name = 'det',
         ),
         luci.console_view_entry(
-            builder = 'ci/Leak Detection Linux',
-            category = 'release',
-            short_name = 'lk',
-        ),
-        luci.console_view_entry(
             builder = 'ci/linux-ozone-rel',
             category = 'release',
             short_name = 'ozo',
diff --git a/infra/config/consoles/main.star b/infra/config/consoles/main.star
index be89261..ce0123c 100644
--- a/infra/config/consoles/main.star
+++ b/infra/config/consoles/main.star
@@ -205,11 +205,6 @@
             short_name = 'det',
         ),
         luci.console_view_entry(
-            builder = 'ci/Leak Detection Linux',
-            category = 'chromium.linux|release',
-            short_name = 'lk',
-        ),
-        luci.console_view_entry(
             builder = 'ci/linux-ozone-rel',
             category = 'chromium.linux|release',
             short_name = 'ozo',
diff --git a/infra/config/generated/luci-milo.cfg b/infra/config/generated/luci-milo.cfg
index 7bfaab8..c62ab84 100644
--- a/infra/config/generated/luci-milo.cfg
+++ b/infra/config/generated/luci-milo.cfg
@@ -3050,6 +3050,11 @@
     category: "linux"
   >
   builders: <
+    name: "buildbucket/luci.chromium.ci/Leak Detection Linux"
+    category: "linux"
+    short_name: "lk"
+  >
+  builders: <
     name: "buildbucket/luci.chromium.ci/Mojo Android"
     category: "mojo"
     short_name: "and"
@@ -6833,11 +6838,6 @@
     short_name: "det"
   >
   builders: <
-    name: "buildbucket/luci.chromium.ci/Leak Detection Linux"
-    category: "release"
-    short_name: "lk"
-  >
-  builders: <
     name: "buildbucket/luci.chromium.ci/linux-ozone-rel"
     category: "release"
     short_name: "ozo"
@@ -10543,11 +10543,6 @@
     short_name: "det"
   >
   builders: <
-    name: "buildbucket/luci.chromium.ci/Leak Detection Linux"
-    category: "chromium.linux|release"
-    short_name: "lk"
-  >
-  builders: <
     name: "buildbucket/luci.chromium.ci/linux-ozone-rel"
     category: "chromium.linux|release"
     short_name: "ozo"
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
index 24b74bb..fd48c2a 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
@@ -220,7 +220,8 @@
   std::unique_ptr<net::HttpCache::BackendFactory> main_backend(
       new net::HttpCache::DefaultBackend(
           net::DISK_CACHE, net::CACHE_BACKEND_BLOCKFILE,
-          lazy_params_->cache_path, lazy_params_->cache_max_size));
+          lazy_params_->cache_path, lazy_params_->cache_max_size,
+          /*hard_reset=*/false));
   http_network_session_ = CreateHttpNetworkSession(*profile_params);
   main_http_factory_ = CreateMainHttpFactory(http_network_session_.get(),
                                              std::move(main_backend));
diff --git a/ios/chrome/browser/ui/activity_services/activity_service_controller_unittest.mm b/ios/chrome/browser/ui/activity_services/activity_service_controller_unittest.mm
index 1bf8000d..b24fbe0 100644
--- a/ios/chrome/browser/ui/activity_services/activity_service_controller_unittest.mm
+++ b/ios/chrome/browser/ui/activity_services/activity_service_controller_unittest.mm
@@ -6,6 +6,7 @@
 
 #import <MobileCoreServices/MobileCoreServices.h>
 
+#include "base/files/scoped_temp_dir.h"
 #include "base/strings/sys_string_conversions.h"
 #import "base/test/ios/wait_util.h"
 #include "base/test/scoped_feature_list.h"
@@ -181,6 +182,10 @@
   void SetUp() override {
     PlatformTest::SetUp();
     TestChromeBrowserState::Builder test_cbs_builder;
+
+    ASSERT_TRUE(state_dir_.CreateUniqueTempDir());
+    test_cbs_builder.SetPath(state_dir_.GetPath());
+
     chrome_browser_state_ = test_cbs_builder.Build();
     chrome_browser_state_->CreateBookmarkModel(false);
     bookmark_model_ = ios::BookmarkModelFactory::GetForBrowserState(
@@ -315,6 +320,11 @@
     EXPECT_FALSE(provider.fakePasswordFormFiller.methodCalled);
   }
 
+  // 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_;
   UIViewController* parentController_;
   ShareToData* shareData_;
diff --git a/ios/chrome/browser/ui/authentication/BUILD.gn b/ios/chrome/browser/ui/authentication/BUILD.gn
index dc2ae14..bf1e2c3 100644
--- a/ios/chrome/browser/ui/authentication/BUILD.gn
+++ b/ios/chrome/browser/ui/authentication/BUILD.gn
@@ -22,8 +22,6 @@
     "resized_avatar_cache.mm",
     "signed_in_accounts_view_controller.h",
     "signed_in_accounts_view_controller.mm",
-    "signin_account_selector_view_controller.h",
-    "signin_account_selector_view_controller.mm",
     "signin_promo_view_mediator.h",
     "signin_promo_view_mediator.mm",
   ]
@@ -33,7 +31,6 @@
     "unified_consent",
     "//base",
     "//components/consent_auditor",
-    "//components/google/core/common",
     "//components/infobars/core",
     "//components/prefs",
     "//components/signin/public/base",
@@ -46,17 +43,15 @@
     "//ios/chrome/browser",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/infobars",
-    "//ios/chrome/browser/main",
+    "//ios/chrome/browser/main:public",
     "//ios/chrome/browser/metrics",
     "//ios/chrome/browser/signin",
     "//ios/chrome/browser/sync",
-    "//ios/chrome/browser/tabs",
     "//ios/chrome/browser/ui/alert_coordinator",
     "//ios/chrome/browser/ui/authentication/cells",
     "//ios/chrome/browser/ui/collection_view/cells",
     "//ios/chrome/browser/ui/colors",
     "//ios/chrome/browser/ui/commands",
-    "//ios/chrome/browser/ui/material_components",
     "//ios/chrome/browser/ui/settings:settings_root",
     "//ios/chrome/browser/ui/signin_interaction/public",
     "//ios/chrome/browser/ui/util",
@@ -66,11 +61,9 @@
     "//ios/chrome/common/colors",
     "//ios/chrome/common/ui_util",
     "//ios/public/provider/chrome/browser",
-    "//ios/public/provider/chrome/browser/images",
     "//ios/public/provider/chrome/browser/signin",
     "//ui/base",
     "//ui/gfx",
-    "//url",
   ]
   public_deps = [
     "//ios/chrome/browser/ui/collection_view",
@@ -119,8 +112,7 @@
     "//components/sync_preferences",
     "//components/sync_preferences:test_support",
     "//components/version_info",
-    "//ios/chrome/app/strings:ios_chromium_strings_grit",
-    "//ios/chrome/app/strings:ios_strings_grit",
+    "//ios/chrome/app/strings",
     "//ios/chrome/browser",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/infobars",
@@ -166,7 +158,7 @@
     "//base/test:test_support",
     "//components/bookmarks/browser",
     "//components/signin/public/identity_manager",
-    "//ios/chrome/app/strings:ios_strings_grit",
+    "//ios/chrome/app/strings",
     "//ios/chrome/browser/bookmarks",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/signin",
@@ -202,7 +194,7 @@
     "unified_consent",
     "//components/bookmarks/browser",
     "//components/signin/public/identity_manager",
-    "//ios/chrome/app/strings:ios_strings_grit",
+    "//ios/chrome/app/strings",
     "//ios/chrome/browser/bookmarks",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/signin",
@@ -237,7 +229,7 @@
   deps = [
     "//base",
     "//base/test:test_support",
-    "//ios/chrome/app/strings:ios_strings_grit",
+    "//ios/chrome/app/strings",
     "//ios/chrome/browser/ui/authentication/cells:constants",
     "//ios/chrome/browser/ui/authentication/unified_consent:constants",
     "//ios/chrome/browser/ui/signin_interaction:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/authentication/cells/BUILD.gn b/ios/chrome/browser/ui/authentication/cells/BUILD.gn
index a2c6b02..a6871c8 100644
--- a/ios/chrome/browser/ui/authentication/cells/BUILD.gn
+++ b/ios/chrome/browser/ui/authentication/cells/BUILD.gn
@@ -74,7 +74,6 @@
     "//ios/chrome/browser/ui/signin_interaction/public",
     "//ios/chrome/browser/ui/table_view:styler",
     "//ios/chrome/browser/ui/table_view/cells",
-    "//ios/chrome/browser/unified_consent",
     "//ios/chrome/common/colors",
     "//ios/chrome/test:test_support",
     "//ios/public/provider/chrome/browser/signin:test_support",
diff --git a/ios/chrome/browser/ui/authentication/chrome_signin_view_controller.mm b/ios/chrome/browser/ui/authentication/chrome_signin_view_controller.mm
index 982ff21..884b244 100644
--- a/ios/chrome/browser/ui/authentication/chrome_signin_view_controller.mm
+++ b/ios/chrome/browser/ui/authentication/chrome_signin_view_controller.mm
@@ -35,7 +35,6 @@
 #import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h"
 #import "ios/chrome/browser/ui/authentication/authentication_flow.h"
 #import "ios/chrome/browser/ui/authentication/authentication_ui_util.h"
-#include "ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.h"
 #include "ios/chrome/browser/ui/authentication/unified_consent/unified_consent_coordinator.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/util/label_link_controller.h"
@@ -113,12 +112,9 @@
 enum AuthenticationState {
   // Initial state.
   NULL_STATE,
-  // Unified consent:
-  //   Shows UnifiedConsentUserController
-  // Non unified consent:
-  //   Shows SigninAccountSelectorViewController
   // Lets the user add an account and choose an identity. Once the dialog is
   // validated, the state transitions to SIGNIN_PENDING_STATE to sign in.
+  // The selection is done with UnifiedConsentUserController.
   IDENTITY_PICKER_STATE,
   // Signs in using AuthenticationFlow. If it fails, the state transitions back
   // to IDENTITY_PICKER_STATE.
@@ -133,7 +129,6 @@
     ChromeIdentityInteractionManagerDelegate,
     ChromeIdentityServiceObserver,
     MDCActivityIndicatorDelegate,
-    SigninAccountSelectorViewControllerDelegate,
     UIAdaptivePresentationControllerDelegate,
     UnifiedConsentCoordinatorDelegate>
 @property(nonatomic, strong) ChromeIdentity* selectedIdentity;
@@ -159,7 +154,6 @@
 
   // Basic state.
   AuthenticationState _currentState;
-  BOOL _ongoingStateChange;
   MDCActivityIndicator* _activityIndicator;
   MDCButton* _primaryButton;
   MDCButton* _secondaryButton;
@@ -168,7 +162,6 @@
   UIView* _embeddedView;
 
   // Identity picker state.
-  SigninAccountSelectorViewController* _accountSelectorVC;
   UnifiedConsentCoordinator* _unifiedConsentCoordinator;
 
   // Signin pending state.
@@ -286,7 +279,7 @@
 
 // Starts the sync engine only if the user tapped on "YES, I'm in", and closes
 // the sign-in view.
-- (void)signinCompletedWithUnity {
+- (void)signinCompleted {
   DCHECK(_didSignIn);
   // The consent has to be given as soon as the user is signed in. Even when
   // they open the settings through the link.
@@ -602,7 +595,7 @@
     DCHECK(!_didSignIn);
     _didSignIn = YES;
     [_delegate didSignIn:self];
-    [self signinCompletedWithUnity];
+    [self signinCompleted];
   } else {
     [self changeToState:IDENTITY_PICKER_STATE];
     [_unifiedConsentCoordinator resetSettingLinkTapped];
@@ -630,7 +623,6 @@
 #pragma mark - State machine
 
 - (void)enterState:(AuthenticationState)state {
-  _ongoingStateChange = NO;
   if (_didFinishSignIn) {
     // Stop the state machine when the sign-in is done.
     _currentState = DONE_STATE;
@@ -655,7 +647,6 @@
 - (void)changeToState:(AuthenticationState)nextState {
   if (_currentState == nextState)
     return;
-  _ongoingStateChange = YES;
   switch (_currentState) {
     case NULL_STATE:
       [self enterState:nextState];
@@ -1091,17 +1082,6 @@
   [self dismissViewControllerAnimated:animated completion:completion];
 }
 
-#pragma mark - SigninAccountSelectorViewControllerDelegate
-
-- (void)accountSelectorControllerDidSelectAddAccount:
-    (SigninAccountSelectorViewController*)accountSelectorController {
-  DCHECK_EQ(_accountSelectorVC, accountSelectorController);
-  if (_ongoingStateChange) {
-    return;
-  }
-  [self openAuthenticationDialogAddIdentity];
-}
-
 #pragma mark - UnifiedConsentCoordinatorDelegate
 
 - (void)unifiedConsentCoordinatorDidTapSettingsLink:
diff --git a/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.h b/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.h
deleted file mode 100644
index 5da4f4e..0000000
--- a/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ACCOUNT_SELECTOR_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ACCOUNT_SELECTOR_VIEW_CONTROLLER_H_
-
-#import <UIKit/UIKit.h>
-
-#import "ios/chrome/browser/ui/collection_view/collection_view_controller.h"
-
-@class ChromeIdentity;
-@class SigninAccountSelectorViewController;
-
-@protocol SigninAccountSelectorViewControllerDelegate
-
-// Informs the delegate that the user has tapped on the add account button.
-- (void)accountSelectorControllerDidSelectAddAccount:
-    (SigninAccountSelectorViewController*)accountSelectorController;
-
-@end
-
-// A collection view controller that allows the user to select the account to be
-// signed in.
-@interface SigninAccountSelectorViewController : CollectionViewController
-
-- (instancetype)init NS_DESIGNATED_INITIALIZER;
-
-- (instancetype)initWithLayout:(UICollectionViewLayout*)layout
-                         style:(CollectionViewControllerStyle)style
-    NS_UNAVAILABLE;
-
-@property(nonatomic, weak) id<SigninAccountSelectorViewControllerDelegate>
-    delegate;
-
-// Returns the identity that is selected or nil.
-- (ChromeIdentity*)selectedIdentity;
-
-@end
-
-#endif  // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ACCOUNT_SELECTOR_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.mm b/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.mm
deleted file mode 100644
index 760bf629..0000000
--- a/ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.mm
+++ /dev/null
@@ -1,329 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ios/chrome/browser/ui/authentication/signin_account_selector_view_controller.h"
-
-#include <memory>
-
-#import "base/mac/foundation_util.h"
-#import "ios/chrome/browser/signin/chrome_identity_service_observer_bridge.h"
-#import "ios/chrome/browser/ui/authentication/resized_avatar_cache.h"
-#import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h"
-#import "ios/chrome/browser/ui/collection_view/cells/collection_view_account_item.h"
-#import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item.h"
-#import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
-#import "ios/chrome/browser/ui/material_components/chrome_app_bar_view_controller.h"
-#import "ios/chrome/common/ui_util/constraints_ui_util.h"
-#include "ios/chrome/grit/ios_chromium_strings.h"
-#include "ios/chrome/grit/ios_strings.h"
-#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
-#import "ios/public/provider/chrome/browser/signin/chrome_identity.h"
-#include "ios/public/provider/chrome/browser/signin/chrome_identity_service.h"
-#import "ios/third_party/material_components_ios/src/components/Palettes/src/MaterialPalettes.h"
-#import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h"
-#import "ui/base/l10n/l10n_util.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-namespace {
-const CGFloat kHeaderViewMinHeight = 100.;
-const CGFloat kHeaderViewHeightMultiplier = 0.33;
-const CGFloat kContentViewBottomInset = 40.;
-
-typedef NS_ENUM(NSInteger, SectionIdentifier) {
-  SectionIdentifierTitle = kSectionIdentifierEnumZero,
-  SectionIdentifierAccounts,
-  SectionIdentifierAddAccount,
-};
-
-typedef NS_ENUM(NSInteger, ItemType) {
-  ItemTypeTitle = kItemTypeEnumZero,
-  ItemTypeAccount,
-  ItemTypeAddAccount,
-};
-}  // namespace
-
-@interface SigninAccountSelectorViewController ()<
-    ChromeIdentityServiceObserver> {
-  std::unique_ptr<ChromeIdentityServiceObserverBridge> _identityServiceObserver;
-  // Cache for account avatar images.
-  ResizedAvatarCache* _avatarCache;
-}
-@end
-
-@implementation SigninAccountSelectorViewController
-
-@synthesize delegate = _delegate;
-
-- (instancetype)init {
-  UICollectionViewLayout* layout = [[MDCCollectionViewFlowLayout alloc] init];
-  self =
-      [super initWithLayout:layout style:CollectionViewControllerStyleAppBar];
-  if (self) {
-    _identityServiceObserver.reset(
-        new ChromeIdentityServiceObserverBridge(self));
-    _avatarCache = [[ResizedAvatarCache alloc] init];
-  }
-  return self;
-}
-
-#pragma mark - UIViewController
-
-- (void)viewDidLoad {
-  [super viewDidLoad];
-
-  // Configure the header.
-  MDCFlexibleHeaderView* headerView = self.appBarViewController.headerView;
-  headerView.canOverExtend = YES;
-  headerView.maximumHeight = 200;
-  headerView.backgroundColor = [UIColor whiteColor];
-  headerView.shiftBehavior = MDCFlexibleHeaderShiftBehaviorEnabled;
-  [headerView addSubview:[self contentViewWithFrame:headerView.bounds]];
-  self.appBarViewController.navigationBar.hidesBackButton = YES;
-  self.collectionView.backgroundColor = [UIColor clearColor];
-  [headerView changeContentInsets:^{
-    UIEdgeInsets contentInset = self.collectionView.contentInset;
-    contentInset.bottom += kContentViewBottomInset;
-    self.collectionView.contentInset = contentInset;
-  }];
-
-  // Load the contents of the collection view.
-  [self loadModel];
-}
-
-- (UIView*)contentViewWithFrame:(CGRect)frame {
-  UIView* contentView = [[UIView alloc] initWithFrame:frame];
-  contentView.autoresizingMask =
-      (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
-  contentView.clipsToBounds = YES;
-
-  UILabel* titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
-  titleLabel.text =
-      l10n_util::GetNSString(IDS_IOS_ACCOUNT_CONSISTENCY_SETUP_TITLE);
-  titleLabel.textColor = [[MDCPalette greyPalette] tint900];
-  titleLabel.font = [MDCTypography headlineFont];
-  titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
-
-  UIView* divider = [[UIView alloc] initWithFrame:CGRectZero];
-  divider.backgroundColor = [[MDCPalette greyPalette] tint300];
-  divider.translatesAutoresizingMaskIntoConstraints = NO;
-
-  UILayoutGuide* layoutGuide1 = [[UILayoutGuide alloc] init];
-  UILayoutGuide* layoutGuide2 = [[UILayoutGuide alloc] init];
-
-  [contentView addSubview:titleLabel];
-  [contentView addSubview:divider];
-  [contentView addLayoutGuide:layoutGuide1];
-  [contentView addLayoutGuide:layoutGuide2];
-
-  NSDictionary* views = @{
-    @"title" : titleLabel,
-    @"divider" : divider,
-    @"v1" : layoutGuide1,
-    @"v2" : layoutGuide2
-  };
-  NSArray* constraints = @[
-    @"V:[title]-(16)-[divider(==1)]|",
-    @"H:|[v1(16)][title(<=440)][v2(>=v1)]|",
-    @"H:|[divider]|",
-  ];
-  ApplyVisualConstraints(constraints, views);
-  return contentView;
-}
-
-- (void)viewWillLayoutSubviews {
-  CGSize viewSize = self.view.bounds.size;
-  MDCFlexibleHeaderView* headerView = self.appBarViewController.headerView;
-  headerView.maximumHeight =
-      MAX(kHeaderViewMinHeight, kHeaderViewHeightMultiplier * viewSize.height);
-}
-
-#pragma mark - Model
-
-- (void)loadModel {
-  [super loadModel];
-  CollectionViewModel* model = self.collectionViewModel;
-  [model addSectionWithIdentifier:SectionIdentifierTitle];
-  [model addItem:[self titleItem]
-      toSectionWithIdentifier:SectionIdentifierTitle];
-
-  [model addSectionWithIdentifier:SectionIdentifierAccounts];
-  NSArray* identities = ios::GetChromeBrowserProvider()
-                            ->GetChromeIdentityService()
-                            ->GetAllIdentitiesSortedForDisplay();
-  if ([identities count]) {
-    for (NSUInteger i = 0; i < [identities count]; ++i) {
-      [model addItem:[self accountItemForIdentity:identities[i]
-                                          checked:(i == 0)]
-          toSectionWithIdentifier:SectionIdentifierAccounts];
-    }
-    [model addSectionWithIdentifier:SectionIdentifierAddAccount];
-    [model addItem:[self addAccountItem]
-        toSectionWithIdentifier:SectionIdentifierAddAccount];
-  }
-}
-
-- (CollectionViewItem*)titleItem {
-  // TODO(crbug.com/662549) : Rename FooterItem to be used as regular item.
-  CollectionViewFooterItem* item =
-      [[CollectionViewFooterItem alloc] initWithType:ItemTypeTitle];
-  item.text =
-      l10n_util::GetNSString(IDS_IOS_ACCOUNT_CONSISTENCY_SETUP_DESCRIPTION);
-  return item;
-}
-
-- (CollectionViewItem*)accountItemForIdentity:(ChromeIdentity*)identity
-                                      checked:(BOOL)isChecked {
-  CollectionViewAccountItem* item =
-      [[CollectionViewAccountItem alloc] initWithType:ItemTypeAccount];
-  [self updateAccountItem:item withIdentity:identity];
-  if (isChecked) {
-    item.accessoryType = MDCCollectionViewCellAccessoryCheckmark;
-  }
-  return item;
-}
-
-- (void)updateAccountItem:(CollectionViewAccountItem*)item
-             withIdentity:(ChromeIdentity*)identity {
-  item.image = [_avatarCache resizedAvatarForIdentity:identity];
-  item.text = identity.userEmail;
-  item.chromeIdentity = identity;
-}
-
-- (CollectionViewItem*)addAccountItem {
-  CollectionViewAccountItem* item =
-      [[CollectionViewAccountItem alloc] initWithType:ItemTypeAddAccount];
-  item.text = l10n_util::GetNSString(
-      IDS_IOS_ACCOUNT_CONSISTENCY_SETUP_ADD_ACCOUNT_BUTTON);
-  item.image = [UIImage imageNamed:@"settings_accounts_add_account"];
-  return item;
-}
-
-- (ChromeIdentity*)selectedIdentity {
-  NSArray* accountItems = [self.collectionViewModel
-      itemsInSectionWithIdentifier:SectionIdentifierAccounts];
-  for (CollectionViewAccountItem* accountItem in accountItems) {
-    if (accountItem.accessoryType == MDCCollectionViewCellAccessoryCheckmark) {
-      return accountItem.chromeIdentity;
-    }
-  }
-  return nil;
-}
-
-#pragma mark - UICollectionViewDelegate
-
-- (void)collectionView:(UICollectionView*)collectionView
-    didSelectItemAtIndexPath:(NSIndexPath*)indexPath {
-  [super collectionView:collectionView didSelectItemAtIndexPath:indexPath];
-  CollectionViewItem* item =
-      [self.collectionViewModel itemAtIndexPath:indexPath];
-  if (item.type == ItemTypeAccount) {
-    CollectionViewAccountItem* selectedAccountItem =
-        base::mac::ObjCCastStrict<CollectionViewAccountItem>(item);
-    // TODO(crbug.com/631486) : Checkmark animation.
-    selectedAccountItem.accessoryType = MDCCollectionViewCellAccessoryCheckmark;
-
-    NSMutableArray<CollectionViewItem*>* reloadItems =
-        [[NSMutableArray alloc] init];
-    [reloadItems addObject:selectedAccountItem];
-
-    // Uncheck all the other account items.
-    NSArray* accountItems = [self.collectionViewModel
-        itemsInSectionWithIdentifier:SectionIdentifierAccounts];
-    for (CollectionViewAccountItem* accountItem in accountItems) {
-      if (accountItem != selectedAccountItem &&
-          accountItem.accessoryType != MDCCollectionViewCellAccessoryNone) {
-        // TODO(crbug.com/631486) : Checkmark animation.
-        accountItem.accessoryType = MDCCollectionViewCellAccessoryNone;
-        [reloadItems addObject:accountItem];
-      }
-    }
-    [self reconfigureCellsForItems:reloadItems];
-  } else if (item.type == ItemTypeAddAccount) {
-    [self.delegate accountSelectorControllerDidSelectAddAccount:self];
-  }
-}
-
-#pragma mark - ChromeIdentityServiceObserver
-
-- (void)identityListChanged {
-  ChromeIdentity* selectedIdentity = [self selectedIdentity];
-  [self loadModel];
-  [self.collectionView reloadData];
-
-  // Reselect the identity.
-  if (!selectedIdentity) {
-    return;
-  }
-  NSArray* accountItems = [self.collectionViewModel
-      itemsInSectionWithIdentifier:SectionIdentifierAccounts];
-  for (CollectionViewAccountItem* accountItem in accountItems) {
-    if ([accountItem.chromeIdentity.gaiaID
-            isEqualToString:selectedIdentity.gaiaID]) {
-      accountItem.accessoryType = MDCCollectionViewCellAccessoryCheckmark;
-    } else {
-      accountItem.accessoryType = MDCCollectionViewCellAccessoryNone;
-    }
-  }
-}
-
-- (void)chromeIdentityServiceWillBeDestroyed {
-  _identityServiceObserver.reset();
-}
-
-#pragma mark UICollectionViewDataSource
-
-- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView
-                 cellForItemAtIndexPath:(NSIndexPath*)indexPath {
-  MDCCollectionViewCell* cell =
-      [super collectionView:collectionView cellForItemAtIndexPath:indexPath];
-  CollectionViewItem* item =
-      [self.collectionViewModel itemAtIndexPath:indexPath];
-
-  if (item.type == ItemTypeAccount || item.type == ItemTypeAddAccount) {
-    CollectionViewAccountCell* accountCell =
-        base::mac::ObjCCastStrict<CollectionViewAccountCell>(cell);
-    accountCell.textLabel.font = [MDCTypography body1Font];
-    accountCell.textLabel.textColor = [[MDCPalette greyPalette] tint900];
-  } else if (item.type == ItemTypeTitle) {
-    CollectionViewFooterCell* titleCell =
-        base::mac::ObjCCastStrict<CollectionViewFooterCell>(cell);
-    titleCell.textLabel.font = [MDCTypography body1Font];
-    titleCell.textLabel.textColor = [[MDCPalette greyPalette] tint900];
-    titleCell.horizontalPadding = 16;
-  }
-  cell.shouldHideSeparator = YES;
-  return cell;
-}
-
-#pragma mark - MDCCollectionViewStylingDelegate
-
-- (CGFloat)collectionView:(UICollectionView*)collectionView
-    cellHeightAtIndexPath:(NSIndexPath*)indexPath {
-  CollectionViewItem* item =
-      [self.collectionViewModel itemAtIndexPath:indexPath];
-
-  if (item.type == ItemTypeTitle) {
-    return [MDCCollectionViewCell
-        cr_preferredHeightForWidth:CGRectGetWidth(collectionView.bounds)
-                           forItem:item];
-  }
-  return MDCCellDefaultTwoLineHeight;
-}
-
-- (BOOL)collectionView:(UICollectionView*)collectionView
-    hidesInkViewAtIndexPath:(NSIndexPath*)indexPath {
-  NSInteger itemType =
-      [self.collectionViewModel itemTypeForIndexPath:indexPath];
-  return (itemType == ItemTypeTitle);
-}
-
-- (BOOL)collectionView:(nonnull UICollectionView*)collectionView
-    shouldHideItemBackgroundAtIndexPath:(nonnull NSIndexPath*)indexPath {
-  return YES;
-}
-
-@end
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.h b/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.h
index 94c66c2..9955265 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.h
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.h
@@ -17,6 +17,10 @@
 class ManagedBookmarkService;
 }  // namespace bookmarks
 
+namespace base {
+class ScopedTempDir;
+}  // namespace base
+
 class TestChromeBrowserState;
 
 // Provides common bookmark testing infrastructure.
@@ -35,6 +39,11 @@
       NSString* title);
   void ChangeTitle(NSString* title, const bookmarks::BookmarkNode* node);
 
+  // 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.
+  std::unique_ptr<base::ScopedTempDir> state_dir_;
+
   web::WebTaskEnvironment task_environment_;
   std::unique_ptr<TestChromeBrowserState> chrome_browser_state_;
   bookmarks::BookmarkModel* _bookmarkModel;
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.mm b/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.mm
index 541b604..746a55d 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.mm
@@ -3,7 +3,9 @@
 // found in the LICENSE file.
 
 #include "ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.h"
+#include <memory>
 
+#include "base/files/scoped_temp_dir.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/test/bookmark_test_helpers.h"
@@ -23,6 +25,11 @@
 void BookmarkIOSUnitTest::SetUp() {
   // Get a BookmarkModel from the test ChromeBrowserState.
   TestChromeBrowserState::Builder test_cbs_builder;
+
+  state_dir_ = std::make_unique<base::ScopedTempDir>();
+  ASSERT_TRUE(state_dir_->CreateUniqueTempDir());
+  test_cbs_builder.SetPath(state_dir_->GetPath());
+
   chrome_browser_state_ = test_cbs_builder.Build();
   chrome_browser_state_->CreateBookmarkModel(true);
 
diff --git a/ios/chrome/browser/ui/browser_view/BUILD.gn b/ios/chrome/browser/ui/browser_view/BUILD.gn
index 835e9e12..4b74879 100644
--- a/ios/chrome/browser/ui/browser_view/BUILD.gn
+++ b/ios/chrome/browser/ui/browser_view/BUILD.gn
@@ -139,6 +139,8 @@
     "//ios/chrome/browser/ui/tabs",
     "//ios/chrome/browser/ui/tabs:coordinator",
     "//ios/chrome/browser/ui/tabs/requirements",
+    "//ios/chrome/browser/ui/text_zoom",
+    "//ios/chrome/browser/ui/text_zoom:text_zoom_ui",
     "//ios/chrome/browser/ui/toolbar",
     "//ios/chrome/browser/ui/toolbar:toolbar_ui",
     "//ios/chrome/browser/ui/toolbar/accessory",
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
index 03abeaaad..aa0decb 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -129,6 +129,8 @@
 #import "ios/chrome/browser/ui/tabs/requirements/tab_strip_presentation.h"
 #import "ios/chrome/browser/ui/tabs/switch_to_tab_animation_view.h"
 #import "ios/chrome/browser/ui/tabs/tab_strip_legacy_coordinator.h"
+#import "ios/chrome/browser/ui/text_zoom/text_zoom_coordinator.h"
+#import "ios/chrome/browser/ui/text_zoom/text_zoom_view_controller.h"
 #import "ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_coordinator_delegate.h"
 #import "ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.h"
 #import "ios/chrome/browser/ui/toolbar/adaptive_toolbar_coordinator.h"
@@ -558,6 +560,11 @@
 // Coordinator for find in page.
 @property(nonatomic, strong) FindBarCoordinator* findBarCoordinator;
 
+// Coordinator for text zoom.
+@property(nonatomic, strong) TextZoomCoordinator* textZoomCoordinator;
+
+@property(nonatomic, weak) ChromeCoordinator* nextToolbarCoordinator;
+
 @property(nonatomic, strong) BubblePresenter* bubblePresenter;
 
 // Primary toolbar.
@@ -1011,7 +1018,7 @@
                                                     .viewController.view
                                 headerBehaviour:Hideable]];
     }
-    if (self.toolbarAccessoryPresenter.backgroundView) {
+    if (self.toolbarAccessoryPresenter.isPresenting) {
       [results addObject:[HeaderDefinition
                              definitionWithView:self.toolbarAccessoryPresenter
                                                     .backgroundView
@@ -1269,7 +1276,7 @@
     auto* findHelper = FindTabHelper::FromWebState(webState);
     if (findHelper) {
       findHelper->StopFinding(^{
-        [self.findBarCoordinator hideFindBarWithAnimation:YES];
+        [self.findBarCoordinator stop];
       });
     }
   }
@@ -1667,7 +1674,7 @@
   // updateToobar];
   if (ShouldShowCompactToolbar(previousTraitCollection) !=
       ShouldShowCompactToolbar()) {
-    [self.findBarCoordinator hideFindBarWithAnimation:NO];
+    [self.findBarCoordinator stop];
   }
 
   // Update the toolbar visibility.
@@ -2360,7 +2367,7 @@
 
   if (!self.inNewTabAnimation) {
     // Hide findbar.  |updateToolbar| will restore the findbar later.
-    [self.findBarCoordinator hideFindBarWithAnimation:NO];
+    [self.findBarCoordinator stop];
 
     // Make new content visible, resizing it first as the orientation may
     // have changed from the last time it was displayed.
@@ -2452,7 +2459,7 @@
 
   auto* findHelper = FindTabHelper::FromWebState(webState);
   if (findHelper && findHelper->IsFindUIActive()) {
-    [self.findBarCoordinator showFindBarAnimated:NO];
+    [self.findBarCoordinator start];
   }
 
   BOOL hideToolbar = NO;
@@ -4045,30 +4052,27 @@
   if (!self.canShowFindBar)
     return;
 
-  if (!self.toolbarAccessoryPresenter) {
-    self.toolbarAccessoryPresenter =
-        [[ToolbarAccessoryPresenter alloc] initWithIsIncognito:_isOffTheRecord];
-    self.toolbarAccessoryPresenter.baseViewController = self;
+  if (self.toolbarAccessoryPresenter.isPresenting) {
+    self.nextToolbarCoordinator = self.findBarCoordinator;
+    [self hideTextZoom];
+    return;
   }
 
-  if (!self.findBarCoordinator) {
-    self.findBarCoordinator =
-        [[FindBarCoordinator alloc] initWithBaseViewController:self
-                                                       browser:self.browser];
-    self.findBarCoordinator.presenter = self.toolbarAccessoryPresenter;
-    self.findBarCoordinator.delegate = self;
-
-    [self.findBarCoordinator start];
-  }
-  [self.findBarCoordinator startFindInPage];
+  [self.findBarCoordinator start];
 }
 
 - (void)closeFindInPage {
   __weak BrowserViewController* weakSelf = self;
   if (self.currentWebState) {
-    FindTabHelper::FromWebState(self.currentWebState)->StopFinding(^{
-      [weakSelf.findBarCoordinator hideFindBarWithAnimation:YES];
-    });
+    FindTabHelper* findTabHelper =
+        FindTabHelper::FromWebState(self.currentWebState);
+    if (findTabHelper->IsFindUIActive()) {
+      findTabHelper->StopFinding(^{
+        [weakSelf.findBarCoordinator stop];
+      });
+    } else {
+      [self.findBarCoordinator stop];
+    }
   }
 }
 
@@ -4206,6 +4210,20 @@
   }
 }
 
+- (void)showTextZoom {
+  if (self.toolbarAccessoryPresenter.isPresenting) {
+    self.nextToolbarCoordinator = self.textZoomCoordinator;
+    [self closeFindInPage];
+    return;
+  }
+
+  [self.textZoomCoordinator start];
+}
+
+- (void)hideTextZoom {
+  [self.textZoomCoordinator stop];
+}
+
 #pragma mark - BrowserCommands helpers
 
 // Reloads the original url of the last non-redirect item (including non-history
@@ -4261,7 +4279,7 @@
     return;
 
   // Remove the find bar for now.
-  [self.findBarCoordinator hideFindBarWithAnimation:NO];
+  [self.findBarCoordinator stop];
 }
 
 - (void)webStateList:(WebStateList*)webStateList
@@ -4538,7 +4556,7 @@
   } else {
     // Hide UI accessories such as find bar and first visit overlays
     // for welcome page.
-    [self.findBarCoordinator hideFindBarWithAnimation:NO];
+    [self.findBarCoordinator stop];
     [self.infobarContainerCoordinator hideContainer:YES];
   }
 }
@@ -4719,6 +4737,59 @@
                    atOffset:[self currentHeaderOffset]];
 }
 
+- (void)toolbarAccessoryCoordinatorDidDismissUI:
+    (ChromeCoordinator*)coordinator {
+  if (self.nextToolbarCoordinator == self.findBarCoordinator) {
+    dispatch_async(dispatch_get_main_queue(), ^{
+      [self showFindInPage];
+    });
+    self.nextToolbarCoordinator = nil;
+  } else if (self.nextToolbarCoordinator == self.textZoomCoordinator) {
+    dispatch_async(dispatch_get_main_queue(), ^{
+      [self showTextZoom];
+    });
+    self.nextToolbarCoordinator = nil;
+  }
+}
+
+#pragma mark - Toolbar Accessory Methods
+
+- (ToolbarAccessoryPresenter*)toolbarAccessoryPresenter {
+  if (_toolbarAccessoryPresenter) {
+    return _toolbarAccessoryPresenter;
+  }
+
+  _toolbarAccessoryPresenter =
+      [[ToolbarAccessoryPresenter alloc] initWithIsIncognito:_isOffTheRecord];
+  _toolbarAccessoryPresenter.baseViewController = self;
+  return _toolbarAccessoryPresenter;
+}
+
+- (FindBarCoordinator*)findBarCoordinator {
+  if (_findBarCoordinator) {
+    return _findBarCoordinator;
+  }
+  _findBarCoordinator =
+      [[FindBarCoordinator alloc] initWithBaseViewController:self
+                                                     browser:self.browser];
+  _findBarCoordinator.presenter = self.toolbarAccessoryPresenter;
+  _findBarCoordinator.delegate = self;
+
+  return _findBarCoordinator;
+}
+
+- (TextZoomCoordinator*)textZoomCoordinator {
+  if (_textZoomCoordinator) {
+    return _textZoomCoordinator;
+  }
+  _textZoomCoordinator =
+      [[TextZoomCoordinator alloc] initWithBaseViewController:self
+                                                      browser:self.browser];
+  _textZoomCoordinator.presenter = self.toolbarAccessoryPresenter;
+  _textZoomCoordinator.delegate = self;
+  return _textZoomCoordinator;
+}
+
 #pragma mark - ManageAccountsDelegate
 
 - (void)onManageAccounts {
diff --git a/ios/chrome/browser/ui/commands/browser_commands.h b/ios/chrome/browser/ui/commands/browser_commands.h
index a1aeffe2..cfb41c36 100644
--- a/ios/chrome/browser/ui/commands/browser_commands.h
+++ b/ios/chrome/browser/ui/commands/browser_commands.h
@@ -116,6 +116,12 @@
 // prevent interaction with the web page.
 - (void)showActivityOverlay:(BOOL)show;
 
+// Shows the Text Zoom UI.
+- (void)showTextZoom;
+
+// Dismisses the Text Zoom UI.
+- (void)hideTextZoom;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_COMMANDS_BROWSER_COMMANDS_H_
diff --git a/ios/chrome/browser/ui/find_bar/find_bar_controller_ios.h b/ios/chrome/browser/ui/find_bar/find_bar_controller_ios.h
index 9c248b85..85edd86 100644
--- a/ios/chrome/browser/ui/find_bar/find_bar_controller_ios.h
+++ b/ios/chrome/browser/ui/find_bar/find_bar_controller_ios.h
@@ -13,8 +13,8 @@
 
 @interface FindBarControllerIOS : NSObject
 
-// The dispatcher for sending browser commands.
-@property(nonatomic, weak) id<BrowserCommands> dispatcher;
+// The command handler for browser commands.
+@property(nonatomic, weak) id<BrowserCommands> commandHandler;
 // The view controller containing all the buttons and textfields that is common
 // between iPhone and iPad.
 @property(nonatomic, strong, readonly)
diff --git a/ios/chrome/browser/ui/find_bar/find_bar_controller_ios.mm b/ios/chrome/browser/ui/find_bar/find_bar_controller_ios.mm
index 5ebb92bc..2267b2c 100644
--- a/ios/chrome/browser/ui/find_bar/find_bar_controller_ios.mm
+++ b/ios/chrome/browser/ui/find_bar/find_bar_controller_ios.mm
@@ -89,7 +89,7 @@
                 action:@selector(editingChanged)
       forControlEvents:UIControlEventEditingChanged];
   [_findBarViewController.findBarView.nextButton
-             addTarget:self.dispatcher
+             addTarget:self.commandHandler
                 action:@selector(findNextStringInPage)
       forControlEvents:UIControlEventTouchUpInside];
   [_findBarViewController.findBarView.nextButton
@@ -97,7 +97,7 @@
                 action:@selector(hideKeyboard:)
       forControlEvents:UIControlEventTouchUpInside];
   [_findBarViewController.findBarView.previousButton
-             addTarget:self.dispatcher
+             addTarget:self.commandHandler
                 action:@selector(findPreviousStringInPage)
       forControlEvents:UIControlEventTouchUpInside];
   [_findBarViewController.findBarView.previousButton
@@ -105,7 +105,7 @@
                 action:@selector(hideKeyboard:)
       forControlEvents:UIControlEventTouchUpInside];
   [_findBarViewController.findBarView.closeButton
-             addTarget:self.dispatcher
+             addTarget:self.commandHandler
                 action:@selector(closeFindInPage)
       forControlEvents:UIControlEventTouchUpInside];
 
@@ -203,7 +203,7 @@
   [self.delayTimer invalidate];
   NSUInteger length = [[self searchTerm] length];
   if (length == 0) {
-    [self.dispatcher searchFindInPage];
+    [self.commandHandler searchFindInPage];
     return;
   }
 
@@ -214,7 +214,7 @@
       (length > kSearchDelayChars) ? kSearchShortDelay : kSearchLongDelay;
   self.delayTimer =
       [NSTimer scheduledTimerWithTimeInterval:delay
-                                       target:self.dispatcher
+                                       target:self.commandHandler
                                      selector:@selector(searchFindInPage)
                                      userInfo:nil
                                       repeats:NO];
diff --git a/ios/chrome/browser/ui/find_bar/find_bar_coordinator.h b/ios/chrome/browser/ui/find_bar/find_bar_coordinator.h
index 4d25d76..7fa4d21 100644
--- a/ios/chrome/browser/ui/find_bar/find_bar_coordinator.h
+++ b/ios/chrome/browser/ui/find_bar/find_bar_coordinator.h
@@ -25,15 +25,6 @@
 // make the transition easier.
 @property(nonatomic, strong) FindBarControllerIOS* findBarController;
 
-// Starts the Find In Page process.
-- (void)startFindInPage;
-
-// Shows the Find Bar UI.
-- (void)showFindBarAnimated:(BOOL)animated;
-
-// Hides the Find Bar UI.
-- (void)hideFindBarWithAnimation:(BOOL)animated;
-
 // Defocuses the Find Bar text field.
 - (void)defocusFindBar;
 
diff --git a/ios/chrome/browser/ui/find_bar/find_bar_coordinator.mm b/ios/chrome/browser/ui/find_bar/find_bar_coordinator.mm
index 6329294b..42133b0 100644
--- a/ios/chrome/browser/ui/find_bar/find_bar_coordinator.mm
+++ b/ios/chrome/browser/ui/find_bar/find_bar_coordinator.mm
@@ -24,36 +24,48 @@
 @interface FindBarCoordinator () <FindInPageResponseDelegate,
                                   ContainedPresenterDelegate>
 
+// Command handler for |BrowserCommand|s.
+@property(nonatomic, readonly) id<BrowserCommands> browserCommandHandler;
+
 @end
 
 @implementation FindBarCoordinator
 
 - (void)start {
-  self.findBarController = [[FindBarControllerIOS alloc]
-      initWithIncognito:self.browserState->IsOffTheRecord()];
+  if (!self.findBarController) {
+    self.findBarController = [[FindBarControllerIOS alloc]
+        initWithIncognito:self.browserState->IsOffTheRecord()];
 
+    self.findBarController.commandHandler = self.browserCommandHandler;
+  }
   self.presenter.delegate = self;
 
-  self.findBarController.dispatcher =
-      static_cast<id<BrowserCommands>>(self.browser->GetCommandDispatcher());
-}
-
-- (void)startFindInPage {
   DCHECK(self.currentWebState);
   FindTabHelper* helper = FindTabHelper::FromWebState(self.currentWebState);
-  DCHECK(!helper->IsFindUIActive());
-  helper->SetResponseDelegate(self);
-  helper->SetFindUIActive(true);
-
-  [self showFindBarAnimated:YES shouldFocus:YES];
+  // If the FindUI is already active, just reshow it.
+  if (helper->IsFindUIActive()) {
+    [self showAnimated:NO shouldFocus:[self.findBarController isFocused]];
+  } else {
+    DCHECK(!helper->IsFindUIActive());
+    helper->SetResponseDelegate(self);
+    helper->SetFindUIActive(true);
+    [self showAnimated:YES shouldFocus:YES];
+  }
 }
 
-- (void)showFindBarAnimated:(BOOL)animated {
-  [self showFindBarAnimated:animated
-                shouldFocus:[self.findBarController isFocused]];
+- (void)stop {
+  if (!self.presenter.isPresenting) {
+    return;
+  }
+  FindTabHelper* helper = FindTabHelper::FromWebState(self.currentWebState);
+  // If the FindUI is still active, the dismiss should be unanimated, because
+  // the UI will be brought back later.
+  BOOL animated = helper && !helper->IsFindUIActive();
+  [self.findBarController findBarViewWillHide];
+  [self.presenter dismissAnimated:animated];
 }
 
-- (void)showFindBarAnimated:(BOOL)animated shouldFocus:(BOOL)shouldFocus {
+- (void)showAnimated:(BOOL)animated shouldFocus:(BOOL)shouldFocus {
   self.presenter.presentedViewController =
       self.findBarController.findBarViewController;
 
@@ -77,11 +89,6 @@
                       focusTextfield:shouldFocus];
 }
 
-- (void)hideFindBarWithAnimation:(BOOL)animated {
-  [self.findBarController findBarViewWillHide];
-  [self.presenter dismissAnimated:animated];
-}
-
 - (void)defocusFindBar {
   FindTabHelper* helper = FindTabHelper::FromWebState(self.currentWebState);
   if (helper && helper->IsFindUIActive()) {
@@ -98,7 +105,7 @@
 }
 
 - (void)findDidStop {
-  [self hideFindBarWithAnimation:YES];
+  [self.browserCommandHandler closeFindInPage];
 }
 
 #pragma mark - ContainedPresenterDelegate
@@ -109,6 +116,7 @@
 
 - (void)containedPresenterDidDismiss:(id<ContainedPresenter>)presenter {
   [self.findBarController findBarViewDidHide];
+  [self.delegate toolbarAccessoryCoordinatorDidDismissUI:self];
 }
 
 #pragma mark - Private
@@ -119,4 +127,9 @@
              : nullptr;
 }
 
+- (id<BrowserCommands>)browserCommandHandler {
+  return HandlerForProtocol(self.browser->GetCommandDispatcher(),
+                            BrowserCommands);
+}
+
 @end
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_coordinator_unittest.mm b/ios/chrome/browser/ui/location_bar/location_bar_coordinator_unittest.mm
index 7cdc8e8..3c6cff3 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/location_bar/location_bar_coordinator_unittest.mm
@@ -8,6 +8,7 @@
 #include <string>
 #include <vector>
 
+#include "base/files/scoped_temp_dir.h"
 #include "components/omnibox/browser/test_location_bar_model.h"
 #include "components/variations/variations_http_header_provider.h"
 #include "ios/chrome/browser/autocomplete/autocomplete_classifier_factory.h"
@@ -70,6 +71,10 @@
     PlatformTest::SetUp();
 
     TestChromeBrowserState::Builder test_cbs_builder;
+
+    ASSERT_TRUE(state_dir_.CreateUniqueTempDir());
+    test_cbs_builder.SetPath(state_dir_.GetPath());
+
     test_cbs_builder.AddTestingFactory(
         ios::TemplateURLServiceFactory::GetInstance(),
         ios::TemplateURLServiceFactory::GetDefaultFactory());
@@ -119,6 +124,11 @@
     PlatformTest::TearDown();
   }
 
+  // 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_;
   LocationBarCoordinator* coordinator_;
   std::unique_ptr<TestChromeBrowserState> browser_state_;
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row.mm
index 93690b8..779ab9eb 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row.mm
@@ -23,8 +23,8 @@
 
 namespace {
 // Side (w or h) length for the leading image view.
-const CGFloat kImageViewSizeUIRefresh = 28.0;
-const CGFloat kImageViewCornerRadiusUIRefresh = 7.0;
+const CGFloat kImageViewSize = 28.0;
+const CGFloat kImageViewCornerRadius = 7.0;
 const CGFloat kTrailingButtonTrailingMargin = 4;
 const CGFloat kTrailingButtonSize = 48.0;
 const CGFloat kLeadingPaddingIpad = 183;
@@ -94,7 +94,7 @@
     _imageView.userInteractionEnabled = NO;
     _imageView.contentMode = UIViewContentModeCenter;
 
-    _imageView.layer.cornerRadius = kImageViewCornerRadiusUIRefresh;
+    _imageView.layer.cornerRadius = kImageViewCornerRadius;
     _imageView.backgroundColor = UIColor.clearColor;
     _imageView.tintColor = color::DarkModeDynamicColor(
         [UIColor colorNamed:@"omnibox_suggestion_icon_color"], _incognito,
@@ -119,7 +119,7 @@
 }
 
 - (void)layoutAccessoryViews {
-  CGFloat imageViewSize = kImageViewSizeUIRefresh;
+  CGFloat imageViewSize = kImageViewSize;
   LayoutRect imageViewLayout = LayoutRectMake(
       ([self showsLeadingIcons] && IsCompactTablet())
           ? kLeadingPaddingIpadCompact
@@ -141,7 +141,7 @@
   _imageView.image = image;
 
   // Adjust the vertical position based on the current size of the row.
-  CGFloat imageViewSize = kImageViewSizeUIRefresh;
+  CGFloat imageViewSize = kImageViewSize;
   CGRect frame = _imageView.frame;
   frame.origin.y = floor((_rowHeight - imageViewSize) / 2);
   _imageView.frame = frame;
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_action_handler.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_action_handler.mm
index 5a22aac..2bb3031 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_action_handler.mm
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_action_handler.mm
@@ -110,6 +110,7 @@
       break;
     case PopupMenuActionTextZoom:
       RecordAction(UserMetricsAction("MobileMenuTextZoom"));
+      [self.dispatcher showTextZoom];
       break;
 #if !defined(NDEBUG)
     case PopupMenuActionViewSource:
diff --git a/ios/chrome/browser/ui/settings/cells/search_engine_item.mm b/ios/chrome/browser/ui/settings/cells/search_engine_item.mm
index 0743f71..7b7f7af 100644
--- a/ios/chrome/browser/ui/settings/cells/search_engine_item.mm
+++ b/ios/chrome/browser/ui/settings/cells/search_engine_item.mm
@@ -54,9 +54,11 @@
   if (self.enabled) {
     cell.contentView.alpha = 1.0;
     cell.userInteractionEnabled = YES;
+    cell.accessibilityTraits &= ~UIAccessibilityTraitNotEnabled;
   } else {
     cell.contentView.alpha = 0.4;
     cell.userInteractionEnabled = NO;
+    cell.accessibilityTraits |= UIAccessibilityTraitNotEnabled;
   }
 
   if (styler.cellTitleColor) {
diff --git a/ios/chrome/browser/ui/text_zoom/BUILD.gn b/ios/chrome/browser/ui/text_zoom/BUILD.gn
new file mode 100644
index 0000000..ac5f02e7
--- /dev/null
+++ b/ios/chrome/browser/ui/text_zoom/BUILD.gn
@@ -0,0 +1,35 @@
+# 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.
+
+source_set("text_zoom") {
+  sources = [
+    "text_zoom_coordinator.h",
+    "text_zoom_coordinator.mm",
+  ]
+  deps = [
+    ":text_zoom_ui",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/main",
+    "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
+    "//ios/chrome/browser/ui/presenters",
+    "//ios/chrome/browser/ui/toolbar/accessory",
+    "//ios/chrome/browser/ui/toolbar/public:constants",
+    "//ios/chrome/common/colors",
+  ]
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
+
+source_set("text_zoom_ui") {
+  sources = [
+    "text_zoom_view_controller.h",
+    "text_zoom_view_controller.mm",
+  ]
+  deps = [
+    "//components/strings:components_strings",
+    "//ios/chrome/browser/ui/commands",
+    "//ui/base",
+  ]
+  configs += [ "//build/config/compiler:enable_arc" ]
+}
diff --git a/ios/chrome/browser/ui/text_zoom/text_zoom_coordinator.h b/ios/chrome/browser/ui/text_zoom/text_zoom_coordinator.h
new file mode 100644
index 0000000..8e30de5
--- /dev/null
+++ b/ios/chrome/browser/ui/text_zoom/text_zoom_coordinator.h
@@ -0,0 +1,28 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_TEXT_ZOOM_TEXT_ZOOM_COORDINATOR_H_
+#define IOS_CHROME_BROWSER_UI_TEXT_ZOOM_TEXT_ZOOM_COORDINATOR_H_
+
+#import <UIKit/UIKit.h>
+
+#import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h"
+
+@class TextZoomViewController;
+@class ToolbarAccessoryPresenter;
+@protocol ToolbarAccessoryCoordinatorDelegate;
+
+// Coordinator for the UI of the text zoom feature, which allows adjusting the
+// zoom level of the text of a webpage.
+@interface TextZoomCoordinator : ChromeCoordinator
+
+// Presenter used by this coordinator to present itself.
+@property(nonatomic, strong) ToolbarAccessoryPresenter* presenter;
+
+// Delegate to inform when this coordinator's UI is dismissed.
+@property(nonatomic, weak) id<ToolbarAccessoryCoordinatorDelegate> delegate;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_TEXT_ZOOM_TEXT_ZOOM_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/text_zoom/text_zoom_coordinator.mm b/ios/chrome/browser/ui/text_zoom/text_zoom_coordinator.mm
new file mode 100644
index 0000000..24e1006
--- /dev/null
+++ b/ios/chrome/browser/ui/text_zoom/text_zoom_coordinator.mm
@@ -0,0 +1,62 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/text_zoom/text_zoom_coordinator.h"
+
+#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
+#import "ios/chrome/browser/main/browser.h"
+#import "ios/chrome/browser/ui/commands/browser_commands.h"
+#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
+#include "ios/chrome/browser/ui/presenters/contained_presenter_delegate.h"
+#import "ios/chrome/browser/ui/text_zoom/text_zoom_view_controller.h"
+#import "ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_coordinator_delegate.h"
+#import "ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.h"
+#import "ios/chrome/browser/ui/toolbar/public/toolbar_constants.h"
+#import "ios/chrome/common/colors/dynamic_color_util.h"
+#import "ios/chrome/common/colors/semantic_color_names.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface TextZoomCoordinator () <ContainedPresenterDelegate>
+
+// The view controller managed by this coordinator.
+@property(nonatomic, strong, readwrite)
+    TextZoomViewController* textZoomViewController;
+
+@end
+
+@implementation TextZoomCoordinator
+
+#pragma mark - ChromeCoordinator
+
+- (void)start {
+  self.textZoomViewController = [[TextZoomViewController alloc] init];
+  self.textZoomViewController.commandHandler =
+      HandlerForProtocol(self.browser->GetCommandDispatcher(), BrowserCommands);
+
+  [self showAnimated:YES];
+}
+
+- (void)stop {
+  [self.presenter dismissAnimated:YES];
+  self.textZoomViewController = nil;
+}
+
+- (void)showAnimated:(BOOL)animated {
+  self.presenter.presentedViewController = self.textZoomViewController;
+  self.presenter.delegate = self;
+
+  [self.presenter prepareForPresentation];
+  [self.presenter presentAnimated:animated];
+}
+
+#pragma mark - ContainedPresenterDelegate
+
+- (void)containedPresenterDidDismiss:(id<ContainedPresenter>)presenter {
+  [self.delegate toolbarAccessoryCoordinatorDidDismissUI:self];
+}
+
+@end
diff --git a/ios/chrome/browser/ui/text_zoom/text_zoom_view_controller.h b/ios/chrome/browser/ui/text_zoom/text_zoom_view_controller.h
new file mode 100644
index 0000000..191e79c
--- /dev/null
+++ b/ios/chrome/browser/ui/text_zoom/text_zoom_view_controller.h
@@ -0,0 +1,18 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_TEXT_ZOOM_TEXT_ZOOM_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_TEXT_ZOOM_TEXT_ZOOM_VIEW_CONTROLLER_H_
+
+#import <UIKit/UIKit.h>
+
+@protocol BrowserCommands;
+
+@interface TextZoomViewController : UIViewController
+
+@property(nonatomic, weak) id<BrowserCommands> commandHandler;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_TEXT_ZOOM_TEXT_ZOOM_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/text_zoom/text_zoom_view_controller.mm b/ios/chrome/browser/ui/text_zoom/text_zoom_view_controller.mm
new file mode 100644
index 0000000..d26ccc5
--- /dev/null
+++ b/ios/chrome/browser/ui/text_zoom/text_zoom_view_controller.mm
@@ -0,0 +1,78 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/text_zoom/text_zoom_view_controller.h"
+
+#include "components/strings/grit/components_strings.h"
+#import "ios/chrome/browser/ui/commands/browser_commands.h"
+#include "ui/base/l10n/l10n_util_mac.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace {
+// Horizontal padding between all elements (except the previous/next buttons).
+const CGFloat kPadding = 8;
+const CGFloat kButtonFontSize = 17;
+}
+
+@interface TextZoomViewController ()
+
+@property(nonatomic, strong) UIButton* closeButton;
+
+@end
+
+@implementation TextZoomViewController
+
+#pragma mark - UIViewController
+
+- (void)viewDidLoad {
+  [super viewDidLoad];
+
+  self.view.translatesAutoresizingMaskIntoConstraints = NO;
+
+  [self.view addSubview:self.closeButton];
+
+  [NSLayoutConstraint activateConstraints:@[
+    // Close Button.
+    [self.closeButton.centerYAnchor
+        constraintEqualToAnchor:self.view.centerYAnchor],
+    //  [self.closeButton.heightAnchor constraintEqualToConstant:kButtonLength],
+    // Use button intrinsic width.
+    [self.closeButton.trailingAnchor
+        constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor
+                       constant:-kPadding],
+  ]];
+
+  [self.closeButton
+      setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh + 1
+                                      forAxis:UILayoutConstraintAxisHorizontal];
+}
+
+#pragma mark - Private methods (control actions)
+
+- (void)closeButtonWasTapped:(id)sender {
+  [self.commandHandler hideTextZoom];
+}
+
+#pragma mark - Private property Accessors
+
+// Creates and returns the close button.
+- (UIButton*)closeButton {
+  if (!_closeButton) {
+    _closeButton = [UIButton buttonWithType:UIButtonTypeSystem];
+    [_closeButton setTitle:l10n_util::GetNSString(IDS_DONE)
+                  forState:UIControlStateNormal];
+    _closeButton.translatesAutoresizingMaskIntoConstraints = NO;
+    //  _closeButton.accessibilityIdentifier = kFindInPageCloseButtonId;
+    _closeButton.titleLabel.font = [UIFont systemFontOfSize:kButtonFontSize];
+    [_closeButton addTarget:self
+                     action:@selector(closeButtonWasTapped:)
+           forControlEvents:UIControlEventTouchUpInside];
+  }
+  return _closeButton;
+}
+
+@end
diff --git a/ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_coordinator_delegate.h b/ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_coordinator_delegate.h
index 3d51b793..57c3c73 100644
--- a/ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_coordinator_delegate.h
+++ b/ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_coordinator_delegate.h
@@ -12,6 +12,9 @@
 - (void)setHeadersForToolbarAccessoryCoordinator:
     (ChromeCoordinator*)toolbarAccessoryCoordinator;
 
+- (void)toolbarAccessoryCoordinatorDidDismissUI:
+    (ChromeCoordinator*)toolbarAccessoryCoordinator;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_TOOLBAR_ACCESSORY_TOOLBAR_ACCESSORY_COORDINATOR_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.h b/ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.h
index 2912872d..29f4126 100644
--- a/ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.h
+++ b/ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.h
@@ -18,6 +18,9 @@
 
 - (instancetype)init NS_UNAVAILABLE;
 
+// Whether the presenter is currently presenting a view
+@property(nonatomic, readonly, getter=isPresenting) BOOL presenting;
+
 // The main presented view.
 @property(nonatomic, strong, readonly) UIView* backgroundView;
 
diff --git a/ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.mm b/ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.mm
index 6e007d5..558470c 100644
--- a/ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.mm
+++ b/ios/chrome/browser/ui/toolbar/accessory/toolbar_accessory_presenter.mm
@@ -36,6 +36,9 @@
 
 @interface ToolbarAccessoryPresenter ()
 
+// The |presenting| public property redefined as readwrite.
+@property(nonatomic, assign, readwrite, getter=isPresenting) BOOL presenting;
+
 // The view that acts as the background for |presentedView|, redefined as
 // readwrite. This is especially important on iPhone, as this view that holds
 // everything around the safe area.
@@ -66,6 +69,7 @@
 }
 
 - (void)prepareForPresentation {
+  self.presenting = YES;
   self.backgroundView = [self createBackgroundView];
   [self.baseViewController addChildViewController:self.presentedViewController];
   [self.baseViewController.view addSubview:self.backgroundView];
@@ -75,32 +79,39 @@
   } else {
     [self prepareForPresentationOnIPad];
   }
-
-  // Force initial layout before the animation.
-  [self.baseViewController.view layoutIfNeeded];
 }
 
 - (void)presentAnimated:(BOOL)animated {
+  if (animated) {
+    // Force initial layout before the animation.
+    [self.baseViewController.view layoutIfNeeded];
+  }
+
   if (ShouldShowCompactToolbar()) {
     [self setupFinalConstraintsOnIPhone];
   } else {
     [self setupFinalConstraintsOnIPad];
   }
 
-  CGFloat duration = animated ? kAnimationDuration : 0;
   __weak __typeof(self) weakSelf = self;
-  [UIView animateWithDuration:duration
-      animations:^() {
-        [self.backgroundView layoutIfNeeded];
-      }
-      completion:^(BOOL finished) {
-        [weakSelf.presentedViewController
-            didMoveToParentViewController:weakSelf.baseViewController];
-        if ([weakSelf.delegate
-                respondsToSelector:@selector(containedPresenterDidPresent:)]) {
-          [weakSelf.delegate containedPresenterDidPresent:weakSelf];
-        }
-      }];
+  auto completion = ^void(BOOL) {
+    [weakSelf.presentedViewController
+        didMoveToParentViewController:weakSelf.baseViewController];
+    if ([weakSelf.delegate
+            respondsToSelector:@selector(containedPresenterDidPresent:)]) {
+      [weakSelf.delegate containedPresenterDidPresent:weakSelf];
+    }
+  };
+
+  if (animated) {
+    [UIView animateWithDuration:kAnimationDuration
+                     animations:^() {
+                       [self.baseViewController.view layoutIfNeeded];
+                     }
+                     completion:completion];
+  } else {
+    completion(YES);
+  }
 }
 
 - (void)dismissAnimated:(BOOL)animated {
@@ -116,6 +127,8 @@
       [weakSelf.delegate containedPresenterDidDismiss:weakSelf];
     }
     weakSelf.backgroundView = nil;
+    weakSelf.presenting = NO;
+    [weakSelf.delegate containedPresenterDidDismiss:weakSelf];
   };
   if (animated) {
     void (^animation)();
diff --git a/ios/web/shell/shell_url_request_context_getter.mm b/ios/web/shell/shell_url_request_context_getter.mm
index cfd7a79..b6c4ad6 100644
--- a/ios/web/shell/shell_url_request_context_getter.mm
+++ b/ios/web/shell/shell_url_request_context_getter.mm
@@ -135,7 +135,8 @@
     base::FilePath cache_path = base_path_.Append(FILE_PATH_LITERAL("Cache"));
     std::unique_ptr<net::HttpCache::DefaultBackend> main_backend(
         new net::HttpCache::DefaultBackend(
-            net::DISK_CACHE, net::CACHE_BACKEND_DEFAULT, cache_path, 0));
+            net::DISK_CACHE, net::CACHE_BACKEND_DEFAULT, cache_path,
+            /*max_bytes=*/0, /*hard_reset=*/false));
 
     storage_->set_http_network_session(
         std::make_unique<net::HttpNetworkSession>(
diff --git a/ios/web_view/internal/web_view_url_request_context_getter.mm b/ios/web_view/internal/web_view_url_request_context_getter.mm
index 06510c5..19f01ce 100644
--- a/ios/web_view/internal/web_view_url_request_context_getter.mm
+++ b/ios/web_view/internal/web_view_url_request_context_getter.mm
@@ -146,7 +146,8 @@
         base_path_.Append(FILE_PATH_LITERAL("ChromeWebViewCache"));
     std::unique_ptr<net::HttpCache::DefaultBackend> main_backend(
         new net::HttpCache::DefaultBackend(
-            net::DISK_CACHE, net::CACHE_BACKEND_DEFAULT, cache_path, 0));
+            net::DISK_CACHE, net::CACHE_BACKEND_DEFAULT, cache_path,
+            /*max_bytes=*/0, /*hard_reset=*/false));
 
     storage_->set_http_network_session(
         std::make_unique<net::HttpNetworkSession>(
diff --git a/ipc/BUILD.gn b/ipc/BUILD.gn
index fb51631e..b62217c 100644
--- a/ipc/BUILD.gn
+++ b/ipc/BUILD.gn
@@ -107,6 +107,14 @@
   if (enable_ipc_fuzzer) {
     public_configs = [ "//tools/ipc_fuzzer:ipc_fuzzer_config" ]
   }
+
+  if (!is_nacl && !is_ios) {
+    sources += [
+      "trace_ipc_message.cc",
+      "trace_ipc_message.h",
+    ]
+    public_deps += [ "//services/tracing/public/cpp" ]
+  }
 }
 
 component("message_support") {
diff --git a/ipc/DEPS b/ipc/DEPS
index fbc977b..ed7cd79f 100644
--- a/ipc/DEPS
+++ b/ipc/DEPS
@@ -4,6 +4,8 @@
   # For ipc_channel_nacl.cc:
   "+native_client/src/public",
   "+sandbox/mac/seatbelt.h",
+  "+services/tracing/public/cpp",
+  "+third_party/perfetto/protos/perfetto/trace/track_event",
 ]
 
 specific_include_rules = {
diff --git a/ipc/ipc_channel_nacl.cc b/ipc/ipc_channel_nacl.cc
index 1db4acb..fd0eeb4 100644
--- a/ipc/ipc_channel_nacl.cc
+++ b/ipc/ipc_channel_nacl.cc
@@ -212,9 +212,8 @@
   Logging::GetInstance()->OnSendMessage(message_ptr.get());
 #endif  // BUILDFLAG(IPC_MESSAGE_LOG_ENABLED)
 
-  TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"),
-                         "ChannelNacl::Send",
-                         message->header()->flags,
+  TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"),
+                         "ChannelNacl::Send", message->header()->flags,
                          TRACE_EVENT_FLAG_FLOW_OUT);
   output_queue_.push_back(std::move(message_ptr));
   if (!waiting_connect_)
diff --git a/ipc/ipc_message_pipe_reader.cc b/ipc/ipc_message_pipe_reader.cc
index 323c86c..ec0f1d4 100644
--- a/ipc/ipc_message_pipe_reader.cc
+++ b/ipc/ipc_message_pipe_reader.cc
@@ -51,7 +51,7 @@
 
 bool MessagePipeReader::Send(std::unique_ptr<Message> message) {
   CHECK(message->IsValid());
-  TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"),
+  TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"),
                          "MessagePipeReader::Send", message->flags(),
                          TRACE_EVENT_FLAG_FLOW_OUT);
   base::Optional<std::vector<mojo::native::SerializedHandlePtr>> handles;
@@ -101,9 +101,8 @@
     return;
   }
 
-  TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"),
-                         "MessagePipeReader::Receive",
-                         message.flags(),
+  TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"),
+                         "MessagePipeReader::Receive", message.flags(),
                          TRACE_EVENT_FLAG_FLOW_IN);
   delegate_->OnMessageReceived(message);
 }
diff --git a/ipc/ipc_sync_channel.cc b/ipc/ipc_sync_channel.cc
index 1180f56..823ec8d 100644
--- a/ipc/ipc_sync_channel.cc
+++ b/ipc/ipc_sync_channel.cc
@@ -21,12 +21,17 @@
 #include "base/threading/thread_local.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
+#include "build/build_config.h"
 #include "ipc/ipc_channel_factory.h"
 #include "ipc/ipc_logging.h"
 #include "ipc/ipc_message_macros.h"
 #include "ipc/ipc_sync_message.h"
 #include "mojo/public/cpp/bindings/sync_event_watcher.h"
 
+#if !defined(OS_NACL) && !BUILDFLAG(IPC_MESSAGE_LOG_ENABLED)
+#include "ipc/trace_ipc_message.h"
+#endif
+
 using base::WaitableEvent;
 
 namespace IPC {
@@ -452,9 +457,9 @@
   }
 
   base::WaitableEvent* done_event = deserializers_.back().done_event;
-  TRACE_EVENT_FLOW_BEGIN0(
-      TRACE_DISABLED_BY_DEFAULT("ipc.flow"),
-      "SyncChannel::SyncContext::TryToUnblockListener", done_event);
+  TRACE_EVENT_FLOW_BEGIN0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"),
+                          "SyncChannel::SyncContext::TryToUnblockListener",
+                          done_event);
 
   done_event->Signal();
 
@@ -517,7 +522,7 @@
   PendingSyncMessageQueue::iterator iter;
   DVLOG(1) << "Canceling pending sends";
   for (iter = deserializers_.begin(); iter != deserializers_.end(); iter++) {
-    TRACE_EVENT_FLOW_BEGIN0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"),
+    TRACE_EVENT_FLOW_BEGIN0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"),
                             "SyncChannel::SyncContext::CancelPendingSends",
                             iter->done_event);
     iter->done_event->Signal();
@@ -609,6 +614,8 @@
   Logging::GetInstance()->GetMessageText(
       message->type(), &name, message, nullptr);
   TRACE_EVENT1("ipc", "SyncChannel::Send", "name", name);
+#elif !defined(OS_NACL)
+  TRACE_IPC_MESSAGE_SEND("ipc", "SyncChannel::Send", message);
 #else
   TRACE_EVENT2("ipc", "SyncChannel::Send",
                "class", IPC_MESSAGE_ID_CLASS(message->type()),
@@ -637,7 +644,7 @@
   scoped_refptr<mojo::SyncHandleRegistry> registry = sync_handle_registry_;
   WaitForReply(registry.get(), context.get(), pump_messages);
 
-  TRACE_EVENT_FLOW_END0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"),
+  TRACE_EVENT_FLOW_END0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"),
                         "SyncChannel::Send", context->GetSendDoneEvent());
 
   return context->Pop();
diff --git a/ipc/ipc_sync_message_filter.cc b/ipc/ipc_sync_message_filter.cc
index 018ed83d4..4ceb3f3 100644
--- a/ipc/ipc_sync_message_filter.cc
+++ b/ipc/ipc_sync_message_filter.cc
@@ -81,7 +81,7 @@
   const bool* stop_flags[] = { &done, &shutdown };
   registry->Wait(stop_flags, 2);
   if (done) {
-    TRACE_EVENT_FLOW_END0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"),
+    TRACE_EVENT_FLOW_END0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"),
                           "SyncMessageFilter::Send", &done_event);
   }
 
@@ -131,7 +131,7 @@
         (*iter)->send_result =
             (*iter)->deserializer->SerializeOutputParameters(message);
       }
-      TRACE_EVENT_FLOW_BEGIN0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"),
+      TRACE_EVENT_FLOW_BEGIN0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"),
                               "SyncMessageFilter::OnMessageReceived",
                               (*iter)->done_event);
       (*iter)->done_event->Signal();
@@ -169,7 +169,7 @@
   lock_.AssertAcquired();
   for (PendingSyncMessages::iterator iter = pending_sync_messages_.begin();
        iter != pending_sync_messages_.end(); ++iter) {
-    TRACE_EVENT_FLOW_BEGIN0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"),
+    TRACE_EVENT_FLOW_BEGIN0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"),
                             "SyncMessageFilter::SignalAllEvents",
                             (*iter)->done_event);
     (*iter)->done_event->Signal();
diff --git a/ipc/trace_ipc_message.cc b/ipc/trace_ipc_message.cc
new file mode 100644
index 0000000..eba6c63
--- /dev/null
+++ b/ipc/trace_ipc_message.cc
@@ -0,0 +1,129 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ipc/trace_ipc_message.h"
+
+#include <stdint.h>
+
+#include "ipc/ipc_message_macros.h"
+#include "ipc/ipc_message_start.h"
+#include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_legacy_ipc.pbzero.h"
+
+namespace IPC {
+
+using perfetto::protos::pbzero::ChromeLegacyIpc;
+
+void WriteIpcMessageIdAsProtozero(uint32_t message_id,
+                                  ChromeLegacyIpc* legacy_ipc) {
+  ChromeLegacyIpc::MessageClass message_class =
+      ChromeLegacyIpc::CLASS_UNSPECIFIED;
+  switch (IPC_MESSAGE_ID_CLASS(message_id)) {
+    case AutomationMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_AUTOMATION;
+      break;
+    case FrameMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_FRAME;
+      break;
+    case PageMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_PAGE;
+      break;
+    case ViewMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_VIEW;
+      break;
+    case WidgetMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_WIDGET;
+      break;
+    case InputMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_INPUT;
+      break;
+    case TestMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_TEST;
+      break;
+    case WorkerMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_WORKER;
+      break;
+    case NaClMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_NACL;
+      break;
+    case GpuChannelMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_GPU_CHANNEL;
+      break;
+    case MediaMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_MEDIA;
+      break;
+    case PpapiMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_PPAPI;
+      break;
+    case ChromeMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_CHROME;
+      break;
+    case DragMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_DRAG;
+      break;
+    case PrintMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_PRINT;
+      break;
+    case ExtensionMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_EXTENSION;
+      break;
+    case TextInputClientMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_TEXT_INPUT_CLIENT;
+      break;
+    case BlinkTestMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_BLINK_TEST;
+      break;
+    case AccessibilityMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_ACCESSIBILITY;
+      break;
+    case PrerenderMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_PRERENDER;
+      break;
+    case ChromotingMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_CHROMOTING;
+      break;
+    case AndroidWebViewMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_ANDROID_WEB_VIEW;
+      break;
+    case NaClHostMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_NACL_HOST;
+      break;
+    case EncryptedMediaMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_ENCRYPTED_MEDIA;
+      break;
+    case CastMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_CAST;
+      break;
+    case GinJavaBridgeMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_GIN_JAVA_BRIDGE;
+      break;
+    case ChromeUtilityPrintingMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_CHROME_UTILITY_PRINTING;
+      break;
+    case OzoneGpuMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_OZONE_GPU;
+      break;
+    case WebTestMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_WEB_TEST;
+      break;
+    case ExtensionsGuestViewMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_EXTENSIONS_GUEST_VIEW;
+      break;
+    case GuestViewMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_GUEST_VIEW;
+      break;
+    case MediaPlayerDelegateMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_MEDIA_PLAYER_DELEGATE;
+      break;
+    case ExtensionWorkerMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_EXTENSION_WORKER;
+      break;
+    case UnfreezableFrameMsgStart:
+      message_class = ChromeLegacyIpc::CLASS_UNFREEZABLE_FRAME;
+      break;
+  }
+  legacy_ipc->set_message_class(message_class);
+  legacy_ipc->set_message_line(IPC_MESSAGE_ID_LINE(message_id));
+}
+
+}  // namespace IPC
\ No newline at end of file
diff --git a/ipc/trace_ipc_message.h b/ipc/trace_ipc_message.h
new file mode 100644
index 0000000..44d4792c
--- /dev/null
+++ b/ipc/trace_ipc_message.h
@@ -0,0 +1,33 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IPC_TRACE_IPC_MESSAGE_H_
+#define IPC_TRACE_IPC_MESSAGE_H_
+
+#include <stdint.h>
+
+#include "base/component_export.h"
+#include "services/tracing/public/cpp/perfetto/macros.h"
+#include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_legacy_ipc.pbzero.h"
+
+// When tracing is enabled, emits a trace event with the given category and
+// event name and typed arguments for the message's type (message class and line
+// number).
+#define TRACE_IPC_MESSAGE_SEND(category, name, msg)                          \
+  TRACE_EVENT(category, name, [msg](perfetto::EventContext ctx) {            \
+    IPC::WriteIpcMessageIdAsProtozero(msg->type(),                           \
+                                      ctx.event()->set_chrome_legacy_ipc()); \
+  });
+
+namespace IPC {
+
+// Converts |message_id| into its message class and line number parts and writes
+// them to the protozero message |ChromeLegacyIpc| for trace events.
+void COMPONENT_EXPORT(IPC)
+    WriteIpcMessageIdAsProtozero(uint32_t message_id,
+                                 perfetto::protos::pbzero::ChromeLegacyIpc*);
+
+}  // namespace IPC
+
+#endif  // IPC_TRACE_IPC_MESSAGE_H_
diff --git a/media/gpu/windows/dxva_video_decode_accelerator_win.cc b/media/gpu/windows/dxva_video_decode_accelerator_win.cc
index bff45e3..b06648e 100644
--- a/media/gpu/windows/dxva_video_decode_accelerator_win.cc
+++ b/media/gpu/windows/dxva_video_decode_accelerator_win.cc
@@ -574,13 +574,13 @@
       config.profile == VP9PROFILE_PROFILE3 ||
       config.profile == H264PROFILE_HIGH10PROFILE) {
     // Input file has more than 8 bits per channel.
-    want_fp16_ = true;
+    use_fp16_ = true;
   }
 
   // Unfortunately, the profile is currently unreliable for
   // VP9 (https://crbug.com/592074) so also try to use fp16 if HDR is on.
   if (config.target_color_space.IsHDR()) {
-    want_fp16_ = true;
+    use_fp16_ = true;
   }
 
   // Not all versions of Windows 7 and later include Media Foundation DLLs.
@@ -823,7 +823,7 @@
     RETURN_ON_FAILURE(angle_device_.Get(), "Failed to get d3d11 device", false);
 
     using_angle_device_ = true;
-    DCHECK(!want_fp16_);
+    DCHECK(!use_fp16_);
     angle_device_->GetImmediateContext(&d3d11_device_context_);
 
     hr = angle_device_.As(&video_device_);
@@ -892,8 +892,8 @@
   if (!checker.CheckOutputFormatSupport(DXGI_FORMAT_NV12))
     support_copy_nv12_textures_ = false;
 
-  support_fp16_ =
-      checker.CheckOutputFormatSupport(DXGI_FORMAT_R16G16B16A16_FLOAT);
+  if (!checker.CheckOutputFormatSupport(DXGI_FORMAT_R16G16B16A16_FLOAT))
+    use_fp16_ = false;
 
   // Enable multithreaded mode on the device. This ensures that accesses to
   // context are synchronized across threads. We have multiple threads
@@ -1388,19 +1388,18 @@
   }
 
   if (!gl::GLSurfaceEGL::IsPixelFormatFloatSupported())
-    want_fp16_ = false;
+    use_fp16_ = false;
 
   EGLDisplay egl_display = gl::GLSurfaceEGL::GetHardwareDisplay();
 
   while (true) {
-    std::vector<EGLint> config_attribs = {
-        EGL_BUFFER_SIZE,  32,
-        EGL_RED_SIZE,     ShouldUseFp16() ? 16 : 8,
-        EGL_GREEN_SIZE,   ShouldUseFp16() ? 16 : 8,
-        EGL_BLUE_SIZE,    ShouldUseFp16() ? 16 : 8,
-        EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
-        EGL_ALPHA_SIZE,   0};
-    if (ShouldUseFp16()) {
+    std::vector<EGLint> config_attribs = {EGL_BUFFER_SIZE,  32,
+                                          EGL_RED_SIZE,     use_fp16_ ? 16 : 8,
+                                          EGL_GREEN_SIZE,   use_fp16_ ? 16 : 8,
+                                          EGL_BLUE_SIZE,    use_fp16_ ? 16 : 8,
+                                          EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
+                                          EGL_ALPHA_SIZE,   0};
+    if (use_fp16_) {
       config_attribs.push_back(EGL_COLOR_COMPONENT_TYPE_EXT);
       config_attribs.push_back(EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT);
     }
@@ -1420,7 +1419,7 @@
           eglGetConfigAttrib(egl_display, configs[i], EGL_RED_SIZE, &red_bits);
           // Try to pick a configuration with the right number of bits rather
           // than one that just has enough bits.
-          if (red_bits == (ShouldUseFp16() ? 16 : 8)) {
+          if (red_bits == (use_fp16_ ? 16 : 8)) {
             egl_config_ = configs[i];
             break;
           }
@@ -1428,9 +1427,9 @@
       }
 
       if (!num_configs) {
-        if (ShouldUseFp16()) {
-          // Try again, but without want_fp16_
-          want_fp16_ = false;
+        if (use_fp16_) {
+          // Try again, but without use_fp16_
+          use_fp16_ = false;
           continue;
         }
         return false;
@@ -1440,7 +1439,7 @@
     break;
   }
 
-  if (ShouldUseFp16()) {
+  if (use_fp16_) {
     // TODO(hubbe): Share/copy P010/P016 textures.
     DisableSharedTextureSupport();
     support_copy_nv12_textures_ = false;
@@ -2761,7 +2760,7 @@
 
   // If we're copying textures or just not using color space information, set
   // the same color space on input and output.
-  if ((!use_color_info_ && !ShouldUseFp16()) ||
+  if ((!use_color_info_ && !use_fp16_) ||
       GetPictureBufferMechanism() == PictureBufferMechanism::COPY_TO_NV12 ||
       GetPictureBufferMechanism() ==
           PictureBufferMechanism::DELAYED_COPY_TO_NV12) {
@@ -2812,8 +2811,7 @@
     return true;
   }
 
-  if (ShouldUseFp16() && config_.target_color_space.IsHDR() &&
-      color_space.IsHDR()) {
+  if (use_fp16_ && config_.target_color_space.IsHDR() && color_space.IsHDR()) {
     // Note, we only use the SCRGBLinear output color space when the input is
     // PQ, because nvidia drivers will not convert G22 to G10 for some reason.
     dx11_converter_output_color_space_ = gfx::ColorSpace::CreateSCRGBLinear();
@@ -2986,7 +2984,7 @@
 
 DXVAVideoDecodeAccelerator::PictureBufferMechanism
 DXVAVideoDecodeAccelerator::GetPictureBufferMechanism() const {
-  if (ShouldUseFp16())
+  if (use_fp16_)
     return PictureBufferMechanism::COPY_TO_RGB;
   if (support_share_nv12_textures_)
     return PictureBufferMechanism::BIND;
@@ -3013,8 +3011,4 @@
   return ShouldUseANGLEDevice() ? angle_device_.Get() : d3d11_device_.Get();
 }
 
-bool DXVAVideoDecodeAccelerator::ShouldUseFp16() const {
-  return want_fp16_ && support_fp16_;
-}
-
 }  // namespace media
diff --git a/media/gpu/windows/dxva_video_decode_accelerator_win.h b/media/gpu/windows/dxva_video_decode_accelerator_win.h
index f894bba..af9da6e 100644
--- a/media/gpu/windows/dxva_video_decode_accelerator_win.h
+++ b/media/gpu/windows/dxva_video_decode_accelerator_win.h
@@ -397,8 +397,6 @@
   bool ShouldUseANGLEDevice() const;
   ID3D11Device* D3D11Device() const;
 
-  bool ShouldUseFp16() const;
-
   // To expose client callbacks from VideoDecodeAccelerator.
   VideoDecodeAccelerator::Client* client_;
 
@@ -558,11 +556,8 @@
   // Supports copying NV12 textures on the main thread to use in ANGLE.
   bool support_delayed_copy_nv12_textures_;
 
-  // Supports copying video to FP16 scRGB textures.
-  bool support_fp16_ = false;
-
-  // Copy video to FP16 scRGB textures if supported.
-  bool want_fp16_ = false;
+  // Copy video to FP16 scRGB textures.
+  bool use_fp16_ = false;
 
   // When converting YUV to RGB, make sure we tell the blitter about the input
   // color space so that it can convert it correctly.
diff --git a/mojo/public/cpp/bindings/remote_set.h b/mojo/public/cpp/bindings/remote_set.h
index d463fe2..fd6f9bbd 100644
--- a/mojo/public/cpp/bindings/remote_set.h
+++ b/mojo/public/cpp/bindings/remote_set.h
@@ -136,7 +136,7 @@
 
  private:
   RemoteSetElementId GenerateNextElementId() {
-    return RemoteSetElementId::FromUnsafeValue(next_element_id_++);
+    return remote_set_element_id_generator_.GenerateNextId();
   }
 
   void OnDisconnect(RemoteSetElementId id) {
@@ -145,7 +145,7 @@
       disconnect_handler_.Run(id);
   }
 
-  uint32_t next_element_id_ = 1;
+  RemoteSetElementId::Generator remote_set_element_id_generator_;
   Storage storage_;
   DisconnectHandler disconnect_handler_;
 
diff --git a/net/disk_cache/cache_util.cc b/net/disk_cache/cache_util.cc
index 1f95642..3224f73 100644
--- a/net/disk_cache/cache_util.cc
+++ b/net/disk_cache/cache_util.cc
@@ -110,10 +110,13 @@
 // rename the cache directory (for instance due to a sharing violation), and in
 // that case a cache for this profile (on the desired path) cannot be created.
 bool DelayedCacheCleanup(const base::FilePath& full_path) {
-  // GetTempCacheName() and MoveCache() use synchronous file
-  // operations.
+  // GetTempCacheName() and MoveCache() use synchronous file operations.
   base::ThreadRestrictions::ScopedAllowIO allow_io;
 
+  // We can exit early if nothing was done/the directory is empty.
+  if (base::IsDirectoryEmpty(full_path))
+    return true;
+
   base::FilePath current_path = full_path.StripTrailingSeparators();
 
   base::FilePath path = current_path.DirName();
diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc
index ba99d7c..be28d4e 100644
--- a/net/http/http_cache.cc
+++ b/net/http/http_cache.cc
@@ -62,11 +62,13 @@
 HttpCache::DefaultBackend::DefaultBackend(CacheType type,
                                           BackendType backend_type,
                                           const base::FilePath& path,
-                                          int max_bytes)
+                                          int max_bytes,
+                                          bool hard_reset)
     : type_(type),
       backend_type_(backend_type),
       path_(path),
-      max_bytes_(max_bytes) {}
+      max_bytes_(max_bytes),
+      hard_reset_(hard_reset) {}
 
 HttpCache::DefaultBackend::~DefaultBackend() = default;
 
@@ -74,7 +76,7 @@
 std::unique_ptr<HttpCache::BackendFactory> HttpCache::DefaultBackend::InMemory(
     int max_bytes) {
   return std::make_unique<DefaultBackend>(MEMORY_CACHE, CACHE_BACKEND_DEFAULT,
-                                          base::FilePath(), max_bytes);
+                                          base::FilePath(), max_bytes, false);
 }
 
 int HttpCache::DefaultBackend::CreateBackend(
@@ -82,20 +84,20 @@
     std::unique_ptr<disk_cache::Backend>* backend,
     CompletionOnceCallback callback) {
   DCHECK_GE(max_bytes_, 0);
-  // TODO(crbug.com/1002220): Implement a forced reset for the http_cache when
-  // the Finch experiment status changes the cache configuration.
+  disk_cache::ResetHandling reset_handling =
+      hard_reset_ ? disk_cache::ResetHandling::kReset
+                  : disk_cache::ResetHandling::kResetOnError;
+  UMA_HISTOGRAM_BOOLEAN("HttpCache.HardReset", hard_reset_);
 #if defined(OS_ANDROID)
   if (app_status_listener_) {
     return disk_cache::CreateCacheBackend(
-        type_, backend_type_, path_, max_bytes_,
-        disk_cache::ResetHandling::kResetOnError, net_log, backend,
-        std::move(callback), app_status_listener_);
+        type_, backend_type_, path_, max_bytes_, reset_handling, net_log,
+        backend, std::move(callback), app_status_listener_);
   }
 #endif
-  return disk_cache::CreateCacheBackend(
-      type_, backend_type_, path_, max_bytes_,
-      disk_cache::ResetHandling::kResetOnError, net_log, backend,
-      std::move(callback));
+  return disk_cache::CreateCacheBackend(type_, backend_type_, path_, max_bytes_,
+                                        reset_handling, net_log, backend,
+                                        std::move(callback));
 }
 
 #if defined(OS_ANDROID)
diff --git a/net/http/http_cache.h b/net/http/http_cache.h
index a0bbaba..59cf665 100644
--- a/net/http/http_cache.h
+++ b/net/http/http_cache.h
@@ -100,7 +100,8 @@
     DefaultBackend(CacheType type,
                    BackendType backend_type,
                    const base::FilePath& path,
-                   int max_bytes);
+                   int max_bytes,
+                   bool hard_reset);
     ~DefaultBackend() override;
 
     // Returns a factory for an in-memory cache.
@@ -121,6 +122,7 @@
     BackendType backend_type_;
     const base::FilePath path_;
     int max_bytes_;
+    bool hard_reset_;
 #if defined(OS_ANDROID)
     base::android::ApplicationStatusListener* app_status_listener_ = nullptr;
 #endif
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc
index 67f625d..fea2d8c 100644
--- a/net/http/http_cache_unittest.cc
+++ b/net/http/http_cache_unittest.cc
@@ -3019,7 +3019,8 @@
   ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
 
   auto backend_factory = std::make_unique<HttpCache::DefaultBackend>(
-      DISK_CACHE, CACHE_BACKEND_BLOCKFILE, temp_dir.GetPath(), 1024 * 1024);
+      DISK_CACHE, CACHE_BACKEND_BLOCKFILE, temp_dir.GetPath(), 1024 * 1024,
+      false);
   MockHttpCache cache(std::move(backend_factory));
 
   RangeTransactionServer handler;
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc
index 0094841..8ad449a 100644
--- a/net/url_request/url_request_context_builder.cc
+++ b/net/url_request/url_request_context_builder.cc
@@ -175,7 +175,7 @@
 }  // namespace
 
 URLRequestContextBuilder::HttpCacheParams::HttpCacheParams()
-    : type(IN_MEMORY), max_size(0) {}
+    : type(IN_MEMORY), max_size(0), reset_cache(false) {}
 URLRequestContextBuilder::HttpCacheParams::~HttpCacheParams() = default;
 
 URLRequestContextBuilder::URLRequestContextBuilder() = default;
@@ -603,7 +603,7 @@
       }
       http_cache_backend.reset(new HttpCache::DefaultBackend(
           DISK_CACHE, backend_type, http_cache_params_.path,
-          http_cache_params_.max_size));
+          http_cache_params_.max_size, http_cache_params_.reset_cache));
     } else {
       http_cache_backend =
           HttpCache::DefaultBackend::InMemory(http_cache_params_.max_size);
diff --git a/net/url_request/url_request_context_builder.h b/net/url_request/url_request_context_builder.h
index 8434c67..880b23f 100644
--- a/net/url_request/url_request_context_builder.h
+++ b/net/url_request/url_request_context_builder.h
@@ -119,6 +119,9 @@
     // based off available disk space.
     int max_size;
 
+    // Whether or not we need to reset the cache due to an experiment change.
+    bool reset_cache;
+
     // The cache path (when type is DISK).
     base::FilePath path;
 
diff --git a/services/network/cors/cors_url_loader.cc b/services/network/cors/cors_url_loader.cc
index 2da1a9e..23f76c34 100644
--- a/services/network/cors/cors_url_loader.cc
+++ b/services/network/cors/cors_url_loader.cc
@@ -252,14 +252,13 @@
   DCHECK(forwarding_client_);
   DCHECK(!deferred_redirect_url_);
 
-  int response_status_code =
-      response_head->headers ? response_head->headers->response_code() : 0;
-
+  // See 10.7.4 of https://fetch.spec.whatwg.org/#http-network-or-cache-fetch
   const bool is_304_for_revalidation =
-      request_.is_revalidating && response_status_code == 304;
+      request_.is_revalidating && response_head->headers &&
+      response_head->headers->response_code() == 304;
   if (fetch_cors_flag_ && !is_304_for_revalidation) {
     const auto error_status = CheckAccess(
-        request_.url, response_status_code,
+        request_.url,
         GetHeaderString(*response_head,
                         header_names::kAccessControlAllowOrigin),
         GetHeaderString(*response_head,
@@ -296,7 +295,7 @@
   // failure, then return a network error.
   if (fetch_cors_flag_ && IsCorsEnabledRequestMode(request_.mode)) {
     const auto error_status = CheckAccess(
-        request_.url, response_head->headers->response_code(),
+        request_.url,
         GetHeaderString(*response_head,
                         header_names::kAccessControlAllowOrigin),
         GetHeaderString(*response_head,
diff --git a/services/network/cors/preflight_controller.cc b/services/network/cors/preflight_controller.cc
index a6b0bae..2d50cdb 100644
--- a/services/network/cors/preflight_controller.cc
+++ b/services/network/cors/preflight_controller.cc
@@ -134,9 +134,8 @@
     base::Optional<CorsErrorStatus>* detected_error_status) {
   DCHECK(detected_error_status);
 
-  const int response_code = head.headers ? head.headers->response_code() : 0;
   *detected_error_status = CheckPreflightAccess(
-      final_url, response_code,
+      final_url, head.headers ? head.headers->response_code() : 0,
       GetHeaderString(head.headers, header_names::kAccessControlAllowOrigin),
       GetHeaderString(head.headers,
                       header_names::kAccessControlAllowCredentials),
@@ -145,13 +144,6 @@
   if (*detected_error_status)
     return nullptr;
 
-  base::Optional<mojom::CorsError> error;
-  error = CheckPreflight(response_code);
-  if (error) {
-    *detected_error_status = CorsErrorStatus(*error);
-    return nullptr;
-  }
-
   if (original_request.is_external_request) {
     *detected_error_status = CheckExternalPreflight(GetHeaderString(
         head.headers, header_names::kAccessControlAllowExternal));
@@ -159,6 +151,7 @@
       return nullptr;
   }
 
+  base::Optional<mojom::CorsError> error;
   auto result = PreflightResult::Create(
       original_request.credentials_mode,
       GetHeaderString(head.headers, header_names::kAccessControlAllowMethods),
diff --git a/services/network/network_context.cc b/services/network/network_context.cc
index e18aa74..e5dfb9c6f 100644
--- a/services/network/network_context.cc
+++ b/services/network/network_context.cc
@@ -1838,6 +1838,7 @@
       cache_params.path = *params_->http_cache_path;
       cache_params.type = network_session_configurator::ChooseCacheType();
     }
+    cache_params.reset_cache = params_->reset_http_cache_backend;
 
 #if defined(OS_ANDROID)
     cache_params.app_status_listener = app_status_listener();
diff --git a/services/network/p2p/socket_manager.cc b/services/network/p2p/socket_manager.cc
index fd14058..78c3a2b8 100644
--- a/services/network/p2p/socket_manager.cc
+++ b/services/network/p2p/socket_manager.cc
@@ -167,6 +167,9 @@
 }
 
 P2PSocketManager::~P2PSocketManager() {
+  // Reset the P2PSocketManager receiver before dropping pending dns requests.
+  socket_manager_receiver_.reset();
+
   sockets_.clear();
   dns_requests_.clear();
 
diff --git a/services/network/public/cpp/cors/cors.cc b/services/network/public/cpp/cors/cors.cc
index f20d665..932c5f3 100644
--- a/services/network/public/cpp/cors/cors.cc
+++ b/services/network/public/cpp/cors/cors.cc
@@ -123,16 +123,10 @@
 
 base::Optional<CorsErrorStatus> CheckAccessInternal(
     const GURL& response_url,
-    const int response_status_code,
     const base::Optional<std::string>& allow_origin_header,
     const base::Optional<std::string>& allow_credentials_header,
     mojom::CredentialsMode credentials_mode,
     const url::Origin& origin) {
-  // TODO(toyoshim): This response status code check should not be needed. We
-  // have another status code check after a CheckAccess() call if it is needed.
-  if (!response_status_code)
-    return CorsErrorStatus(mojom::CorsError::kInvalidResponse);
-
   if (allow_origin_header == kAsterisk) {
     // A wildcard Access-Control-Allow-Origin can not be used if credentials are
     // to be sent, even with Access-Control-Allow-Credentials set to true.
@@ -240,14 +234,13 @@
 // See https://fetch.spec.whatwg.org/#cors-check.
 base::Optional<CorsErrorStatus> CheckAccess(
     const GURL& response_url,
-    const int response_status_code,
     const base::Optional<std::string>& allow_origin_header,
     const base::Optional<std::string>& allow_credentials_header,
     mojom::CredentialsMode credentials_mode,
     const url::Origin& origin) {
-  base::Optional<CorsErrorStatus> error_status = CheckAccessInternal(
-      response_url, response_status_code, allow_origin_header,
-      allow_credentials_header, credentials_mode, origin);
+  const auto error_status =
+      CheckAccessInternal(response_url, allow_origin_header,
+                          allow_credentials_header, credentials_mode, origin);
   ReportAccessCheckResultMetric(error_status ? AccessCheckResult::kNotPermitted
                                              : AccessCheckResult::kPermitted);
   if (error_status) {
@@ -285,47 +278,58 @@
     const base::Optional<std::string>& allow_credentials_header,
     mojom::CredentialsMode actual_credentials_mode,
     const url::Origin& origin) {
-  const auto error_status = CheckAccessInternal(
-      response_url, response_status_code, allow_origin_header,
-      allow_credentials_header, actual_credentials_mode, origin);
+  // Step 7 of https://fetch.spec.whatwg.org/#cors-preflight-fetch
+  auto error_status = CheckAccessInternal(response_url, allow_origin_header,
+                                          allow_credentials_header,
+                                          actual_credentials_mode, origin);
+  const bool has_ok_status = IsOkStatus(response_status_code);
+
   ReportAccessCheckResultMetric(
-      error_status ? AccessCheckResult::kNotPermittedInPreflight
-                   : AccessCheckResult::kPermittedInPreflight);
-  if (!error_status)
+      (error_status || !has_ok_status)
+          ? AccessCheckResult::kNotPermittedInPreflight
+          : AccessCheckResult::kPermittedInPreflight);
+
+  // Prefer using a preflight specific error code.
+  if (error_status) {
+    switch (error_status->cors_error) {
+      case mojom::CorsError::kWildcardOriginNotAllowed:
+        error_status->cors_error =
+            mojom::CorsError::kPreflightWildcardOriginNotAllowed;
+        break;
+      case mojom::CorsError::kMissingAllowOriginHeader:
+        error_status->cors_error =
+            mojom::CorsError::kPreflightMissingAllowOriginHeader;
+        break;
+      case mojom::CorsError::kMultipleAllowOriginValues:
+        error_status->cors_error =
+            mojom::CorsError::kPreflightMultipleAllowOriginValues;
+        break;
+      case mojom::CorsError::kInvalidAllowOriginValue:
+        error_status->cors_error =
+            mojom::CorsError::kPreflightInvalidAllowOriginValue;
+        break;
+      case mojom::CorsError::kAllowOriginMismatch:
+        error_status->cors_error =
+            mojom::CorsError::kPreflightAllowOriginMismatch;
+        break;
+      case mojom::CorsError::kInvalidAllowCredentials:
+        error_status->cors_error =
+            mojom::CorsError::kPreflightInvalidAllowCredentials;
+        break;
+      default:
+        NOTREACHED();
+        break;
+    }
+  } else if (!has_ok_status) {
+    error_status = base::make_optional<CorsErrorStatus>(
+        mojom::CorsError::kPreflightInvalidStatus);
+  } else {
     return base::nullopt;
-
-  // TODO(toyoshim): Remove following two lines when the status code check is
-  // removed from CheckAccess().
-  if (error_status->cors_error == mojom::CorsError::kInvalidResponse)
-    return error_status;
-
-  mojom::CorsError error = error_status->cors_error;
-  switch (error_status->cors_error) {
-    case mojom::CorsError::kWildcardOriginNotAllowed:
-      error = mojom::CorsError::kPreflightWildcardOriginNotAllowed;
-      break;
-    case mojom::CorsError::kMissingAllowOriginHeader:
-      error = mojom::CorsError::kPreflightMissingAllowOriginHeader;
-      break;
-    case mojom::CorsError::kMultipleAllowOriginValues:
-      error = mojom::CorsError::kPreflightMultipleAllowOriginValues;
-      break;
-    case mojom::CorsError::kInvalidAllowOriginValue:
-      error = mojom::CorsError::kPreflightInvalidAllowOriginValue;
-      break;
-    case mojom::CorsError::kAllowOriginMismatch:
-      error = mojom::CorsError::kPreflightAllowOriginMismatch;
-      break;
-    case mojom::CorsError::kInvalidAllowCredentials:
-      error = mojom::CorsError::kPreflightInvalidAllowCredentials;
-      break;
-    default:
-      NOTREACHED();
-      break;
   }
-  UMA_HISTOGRAM_ENUMERATION("Net.Cors.PreflightCheckError", error);
 
-  return CorsErrorStatus(error, error_status->failed_parameter);
+  UMA_HISTOGRAM_ENUMERATION("Net.Cors.PreflightCheckError",
+                            error_status->cors_error);
+  return error_status;
 }
 
 base::Optional<CorsErrorStatus> CheckRedirectLocation(
@@ -359,16 +363,6 @@
   return base::nullopt;
 }
 
-base::Optional<mojom::CorsError> CheckPreflight(const int status_code) {
-  // CORS preflight with 3XX is considered network error in
-  // Fetch API Spec: https://fetch.spec.whatwg.org/#cors-preflight-fetch
-  // CORS Spec: http://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0
-  // https://crbug.com/452394
-  if (IsOkStatus(status_code))
-    return base::nullopt;
-  return mojom::CorsError::kPreflightInvalidStatus;
-}
-
 // https://wicg.github.io/cors-rfc1918/#http-headerdef-access-control-allow-external
 base::Optional<CorsErrorStatus> CheckExternalPreflight(
     const base::Optional<std::string>& allow_external) {
diff --git a/services/network/public/cpp/cors/cors.h b/services/network/public/cpp/cors/cors.h
index 231421f..736a01d 100644
--- a/services/network/public/cpp/cors/cors.h
+++ b/services/network/public/cpp/cors/cors.h
@@ -53,7 +53,6 @@
 COMPONENT_EXPORT(NETWORK_CPP)
 base::Optional<CorsErrorStatus> CheckAccess(
     const GURL& response_url,
-    const int response_status_code,
     const base::Optional<std::string>& allow_origin_header,
     const base::Optional<std::string>& allow_credentials_header,
     mojom::CredentialsMode credentials_mode,
@@ -93,12 +92,6 @@
     bool cors_flag,
     bool tainted);
 
-// Performs the required CORS checks on the response to a preflight request.
-// Returns |kPreflightSuccess| if preflight response was successful.
-// TODO(toyoshim): Rename to CheckPreflightStatus.
-COMPONENT_EXPORT(NETWORK_CPP)
-base::Optional<mojom::CorsError> CheckPreflight(const int status_code);
-
 // Checks errors for the currently experimental "Access-Control-Allow-External:"
 // header. Shares error conditions with standard preflight checking.
 // See https://crbug.com/590714.
diff --git a/services/network/public/cpp/cors/cors_unittest.cc b/services/network/public/cpp/cors/cors_unittest.cc
index 111bd343..2d23129 100644
--- a/services/network/public/cpp/cors/cors_unittest.cc
+++ b/services/network/public/cpp/cors/cors_unittest.cc
@@ -16,27 +16,15 @@
 
 using CorsTest = testing::Test;
 
-TEST_F(CorsTest, CheckAccessDetectsInvalidResponse) {
-  base::Optional<CorsErrorStatus> error_status =
-      CheckAccess(GURL(), 0 /* response_status_code */,
-                  base::nullopt /* allow_origin_header */,
-                  base::nullopt /* allow_credentials_header */,
-                  network::mojom::CredentialsMode::kOmit, url::Origin());
-  ASSERT_TRUE(error_status);
-  EXPECT_EQ(mojom::CorsError::kInvalidResponse, error_status->cors_error);
-}
-
 // Tests if CheckAccess detects kWildcardOriginNotAllowed error correctly.
 TEST_F(CorsTest, CheckAccessDetectsWildcardOriginNotAllowed) {
   const GURL response_url("http://example.com/data");
   const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
-  const int response_status_code = 200;
   const std::string allow_all_header("*");
 
   // Access-Control-Allow-Origin '*' works.
   base::Optional<CorsErrorStatus> error1 =
-      CheckAccess(response_url, response_status_code,
-                  allow_all_header /* allow_origin_header */,
+      CheckAccess(response_url, allow_all_header /* allow_origin_header */,
                   base::nullopt /* allow_credentials_header */,
                   network::mojom::CredentialsMode::kOmit, origin);
   EXPECT_FALSE(error1);
@@ -44,8 +32,7 @@
   // Access-Control-Allow-Origin '*' should not be allowed if credentials mode
   // is kInclude.
   base::Optional<CorsErrorStatus> error2 =
-      CheckAccess(response_url, response_status_code,
-                  allow_all_header /* allow_origin_header */,
+      CheckAccess(response_url, allow_all_header /* allow_origin_header */,
                   base::nullopt /* allow_credentials_header */,
                   network::mojom::CredentialsMode::kInclude, origin);
   ASSERT_TRUE(error2);
@@ -56,12 +43,10 @@
 TEST_F(CorsTest, CheckAccessDetectsMissingAllowOriginHeader) {
   const GURL response_url("http://example.com/data");
   const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
-  const int response_status_code = 200;
 
   // Access-Control-Allow-Origin is missed.
   base::Optional<CorsErrorStatus> error =
-      CheckAccess(response_url, response_status_code,
-                  base::nullopt /* allow_origin_header */,
+      CheckAccess(response_url, base::nullopt /* allow_origin_header */,
                   base::nullopt /* allow_credentials_header */,
                   network::mojom::CredentialsMode::kOmit, origin);
   ASSERT_TRUE(error);
@@ -73,25 +58,22 @@
 TEST_F(CorsTest, CheckAccessDetectsMultipleAllowOriginValues) {
   const GURL response_url("http://example.com/data");
   const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
-  const int response_status_code = 200;
 
   const std::string space_separated_multiple_origins(
       "http://example.com http://another.example.com");
-  base::Optional<CorsErrorStatus> error1 =
-      CheckAccess(response_url, response_status_code,
-                  space_separated_multiple_origins /* allow_origin_header */,
-                  base::nullopt /* allow_credentials_header */,
-                  network::mojom::CredentialsMode::kOmit, origin);
+  base::Optional<CorsErrorStatus> error1 = CheckAccess(
+      response_url, space_separated_multiple_origins /* allow_origin_header */,
+      base::nullopt /* allow_credentials_header */,
+      network::mojom::CredentialsMode::kOmit, origin);
   ASSERT_TRUE(error1);
   EXPECT_EQ(mojom::CorsError::kMultipleAllowOriginValues, error1->cors_error);
 
   const std::string comma_separated_multiple_origins(
       "http://example.com,http://another.example.com");
-  base::Optional<CorsErrorStatus> error2 =
-      CheckAccess(response_url, response_status_code,
-                  comma_separated_multiple_origins /* allow_origin_header */,
-                  base::nullopt /* allow_credentials_header */,
-                  network::mojom::CredentialsMode::kOmit, origin);
+  base::Optional<CorsErrorStatus> error2 = CheckAccess(
+      response_url, comma_separated_multiple_origins /* allow_origin_header */,
+      base::nullopt /* allow_credentials_header */,
+      network::mojom::CredentialsMode::kOmit, origin);
   ASSERT_TRUE(error2);
   EXPECT_EQ(mojom::CorsError::kMultipleAllowOriginValues, error2->cors_error);
 }
@@ -100,13 +82,11 @@
 TEST_F(CorsTest, CheckAccessDetectsInvalidAllowOriginValue) {
   const GURL response_url("http://example.com/data");
   const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
-  const int response_status_code = 200;
 
-  base::Optional<CorsErrorStatus> error =
-      CheckAccess(response_url, response_status_code,
-                  std::string("invalid.origin") /* allow_origin_header */,
-                  base::nullopt /* allow_credentials_header */,
-                  network::mojom::CredentialsMode::kOmit, origin);
+  base::Optional<CorsErrorStatus> error = CheckAccess(
+      response_url, std::string("invalid.origin") /* allow_origin_header */,
+      base::nullopt /* allow_credentials_header */,
+      network::mojom::CredentialsMode::kOmit, origin);
   ASSERT_TRUE(error);
   EXPECT_EQ(mojom::CorsError::kInvalidAllowOriginValue, error->cors_error);
   EXPECT_EQ("invalid.origin", error->failed_parameter);
@@ -116,17 +96,15 @@
 TEST_F(CorsTest, CheckAccessDetectsAllowOriginMismatch) {
   const GURL response_url("http://example.com/data");
   const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
-  const int response_status_code = 200;
 
   base::Optional<CorsErrorStatus> error1 =
-      CheckAccess(response_url, response_status_code,
-                  origin.Serialize() /* allow_origin_header */,
+      CheckAccess(response_url, origin.Serialize() /* allow_origin_header */,
                   base::nullopt /* allow_credentials_header */,
                   network::mojom::CredentialsMode::kOmit, origin);
   ASSERT_FALSE(error1);
 
   base::Optional<CorsErrorStatus> error2 = CheckAccess(
-      response_url, response_status_code,
+      response_url,
       std::string("http://not.google.com") /* allow_origin_header */,
       base::nullopt /* allow_credentials_header */,
       network::mojom::CredentialsMode::kOmit, origin);
@@ -139,10 +117,10 @@
   const url::Origin null_origin;
   EXPECT_EQ(null_string, null_origin.Serialize());
 
-  base::Optional<CorsErrorStatus> error3 = CheckAccess(
-      response_url, response_status_code, null_string /* allow_origin_header */,
-      base::nullopt /* allow_credentials_header */,
-      network::mojom::CredentialsMode::kOmit, null_origin);
+  base::Optional<CorsErrorStatus> error3 =
+      CheckAccess(response_url, null_string /* allow_origin_header */,
+                  base::nullopt /* allow_credentials_header */,
+                  network::mojom::CredentialsMode::kOmit, null_origin);
   EXPECT_FALSE(error3);
 }
 
@@ -150,18 +128,15 @@
 TEST_F(CorsTest, CheckAccessDetectsInvalidAllowCredential) {
   const GURL response_url("http://example.com/data");
   const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
-  const int response_status_code = 200;
 
   base::Optional<CorsErrorStatus> error1 =
-      CheckAccess(response_url, response_status_code,
-                  origin.Serialize() /* allow_origin_header */,
+      CheckAccess(response_url, origin.Serialize() /* allow_origin_header */,
                   std::string("true") /* allow_credentials_header */,
                   network::mojom::CredentialsMode::kInclude, origin);
   ASSERT_FALSE(error1);
 
   base::Optional<CorsErrorStatus> error2 =
-      CheckAccess(response_url, response_status_code,
-                  origin.Serialize() /* allow_origin_header */,
+      CheckAccess(response_url, origin.Serialize() /* allow_origin_header */,
                   std::string("fuga") /* allow_credentials_header */,
                   network::mojom::CredentialsMode::kInclude, origin);
   ASSERT_TRUE(error2);
@@ -284,14 +259,41 @@
   }
 }
 
-TEST_F(CorsTest, CheckPreflightDetectsErrors) {
-  EXPECT_FALSE(CheckPreflight(200));
-  EXPECT_FALSE(CheckPreflight(299));
+TEST_F(CorsTest, CheckPreflightAccessDetectsErrorStatus) {
+  const GURL response_url("http://example.com/data");
+  const url::Origin origin = url::Origin::Create(GURL("http://google.com"));
+  const std::string allow_all_header("*");
 
-  base::Optional<mojom::CorsError> error1 = CheckPreflight(300);
-  ASSERT_TRUE(error1);
-  EXPECT_EQ(mojom::CorsError::kPreflightInvalidStatus, *error1);
+  // Status 200-299 should pass.
+  EXPECT_FALSE(
+      CheckPreflightAccess(response_url, 200, allow_all_header,
+                           base::nullopt /* allow_credentials_header */,
+                           network::mojom::CredentialsMode::kOmit, origin));
+  EXPECT_FALSE(
+      CheckPreflightAccess(response_url, 299, allow_all_header,
+                           base::nullopt /* allow_credentials_header */,
+                           network::mojom::CredentialsMode::kOmit, origin));
 
+  // Status 300 should fail.
+  base::Optional<CorsErrorStatus> invalid_status_error =
+      CheckPreflightAccess(response_url, 300, allow_all_header,
+                           base::nullopt /* allow_credentials_header */,
+                           network::mojom::CredentialsMode::kOmit, origin);
+  ASSERT_TRUE(invalid_status_error);
+  EXPECT_EQ(mojom::CorsError::kPreflightInvalidStatus,
+            invalid_status_error->cors_error);
+
+  // Status 0 should fail too.
+  invalid_status_error =
+      CheckPreflightAccess(response_url, 0, allow_all_header,
+                           base::nullopt /* allow_credentials_header */,
+                           network::mojom::CredentialsMode::kOmit, origin);
+  ASSERT_TRUE(invalid_status_error);
+  EXPECT_EQ(mojom::CorsError::kPreflightInvalidStatus,
+            invalid_status_error->cors_error);
+}
+
+TEST_F(CorsTest, CheckExternalPreflightErrors) {
   EXPECT_FALSE(CheckExternalPreflight(std::string("true")));
 
   base::Optional<CorsErrorStatus> error2 =
diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom
index 0b44874..32a60d94 100644
--- a/services/network/public/mojom/network_context.mojom
+++ b/services/network/public/mojom/network_context.mojom
@@ -450,6 +450,12 @@
   // the dynamic preference from NetworkService side, to populate
   // HttpAuthPreference.
   HttpAuthStaticNetworkContextParams? http_auth_static_network_context_params;
+
+  // Indicates that the HttpCache back-end should be reset (e.g. when a Finch
+  // experiment changes the cache key representation via NetworkIsolationKey).
+  // A reset throws out all existing cache content when loading the cache,
+  // effectively starting with an empty cache.
+  bool reset_http_cache_backend = false;
 };
 
 struct NetworkConditions {
diff --git a/services/tracing/perfetto/consumer_host.cc b/services/tracing/perfetto/consumer_host.cc
index 58899e5..7df96762 100644
--- a/services/tracing/perfetto/consumer_host.cc
+++ b/services/tracing/perfetto/consumer_host.cc
@@ -84,7 +84,7 @@
 
 class ConsumerHost::StreamWriter {
  public:
-  using Slices = std::vector<std::string>;
+  using Slice = std::string;
 
   static scoped_refptr<base::SequencedTaskRunner> CreateTaskRunner() {
     return base::CreateSequencedTaskRunner({base::ThreadPool(),
@@ -101,34 +101,32 @@
         disconnect_callback_(std::move(disconnect_callback)),
         callback_task_runner_(callback_task_runner) {}
 
-  void WriteToStream(std::unique_ptr<Slices> slices, bool has_more) {
+  void WriteToStream(std::unique_ptr<Slice> slice, bool has_more) {
     DCHECK(stream_.is_valid());
-    for (const auto& slice : *slices) {
-      uint32_t write_position = 0;
 
-      while (write_position < slice.size()) {
-        uint32_t write_bytes = slice.size() - write_position;
+    uint32_t write_position = 0;
+    while (write_position < slice->size()) {
+      uint32_t write_bytes = slice->size() - write_position;
 
-        MojoResult result =
-            stream_->WriteData(slice.data() + write_position, &write_bytes,
-                               MOJO_WRITE_DATA_FLAG_NONE);
+      MojoResult result =
+          stream_->WriteData(slice->data() + write_position, &write_bytes,
+                             MOJO_WRITE_DATA_FLAG_NONE);
 
-        if (result == MOJO_RESULT_OK) {
-          write_position += write_bytes;
-          continue;
+      if (result == MOJO_RESULT_OK) {
+        write_position += write_bytes;
+        continue;
+      }
+
+      if (result == MOJO_RESULT_SHOULD_WAIT) {
+        result = mojo::Wait(stream_.get(), MOJO_HANDLE_SIGNAL_WRITABLE);
+      }
+
+      if (result != MOJO_RESULT_OK) {
+        if (!disconnect_callback_.is_null()) {
+          callback_task_runner_->PostTask(FROM_HERE,
+                                          std::move(disconnect_callback_));
         }
-
-        if (result == MOJO_RESULT_SHOULD_WAIT) {
-          result = mojo::Wait(stream_.get(), MOJO_HANDLE_SIGNAL_WRITABLE);
-        }
-
-        if (result != MOJO_RESULT_OK) {
-          if (!disconnect_callback_.is_null()) {
-            callback_task_runner_->PostTask(FROM_HERE,
-                                            std::move(disconnect_callback_));
-          }
-          return;
-        }
+        return;
       }
     }
 
@@ -465,11 +463,10 @@
 
 void ConsumerHost::TracingSession::OnJSONTraceData(std::string json,
                                                    bool has_more) {
-  auto slices = std::make_unique<StreamWriter::Slices>();
-  slices->push_back(std::string());
-  slices->back().swap(json);
+  auto slice = std::make_unique<StreamWriter::Slice>();
+  slice->swap(json);
   read_buffers_stream_writer_.Post(FROM_HERE, &StreamWriter::WriteToStream,
-                                   std::move(slices), has_more);
+                                   std::move(slice), has_more);
 
   if (!has_more) {
     read_buffers_stream_writer_.Reset();
@@ -480,14 +477,15 @@
     std::vector<perfetto::TracePacket> packets,
     bool has_more) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (trace_processor_) {
-    // Calculate space needed for trace chunk. Each packet has a preamble and
-    // payload size.
-    size_t max_size = packets.size() * perfetto::TracePacket::kMaxPreambleBytes;
-    for (const auto& packet : packets) {
-      max_size += packet.size();
-    }
 
+  // Calculate space needed for trace chunk. Each packet has a preamble and
+  // payload size.
+  size_t max_size = packets.size() * perfetto::TracePacket::kMaxPreambleBytes;
+  for (const auto& packet : packets) {
+    max_size += packet.size();
+  }
+
+  if (trace_processor_) {
     // Copy packets into a trace file chunk.
     size_t position = 0;
     std::unique_ptr<uint8_t[]> data(new uint8_t[max_size]);
@@ -518,19 +516,21 @@
     return;
   }
 
-  auto copy = std::make_unique<StreamWriter::Slices>();
+  // Copy packets into a trace slice.
+  auto chunk = std::make_unique<StreamWriter::Slice>();
+  chunk->reserve(max_size);
   for (auto& packet : packets) {
     char* data;
     size_t size;
     std::tie(data, size) = packet.GetProtoPreamble();
-    copy->emplace_back(data, size);
+    chunk->append(data, size);
     auto& slices = packet.slices();
     for (auto& slice : slices) {
-      copy->emplace_back(static_cast<const char*>(slice.start), slice.size);
+      chunk->append(static_cast<const char*>(slice.start), slice.size);
     }
   }
   read_buffers_stream_writer_.Post(FROM_HERE, &StreamWriter::WriteToStream,
-                                   std::move(copy), has_more);
+                                   std::move(chunk), has_more);
   if (!has_more) {
     read_buffers_stream_writer_.Reset();
   }
diff --git a/skia/BUILD.gn b/skia/BUILD.gn
index 4328ad5..07b170a 100644
--- a/skia/BUILD.gn
+++ b/skia/BUILD.gn
@@ -844,7 +844,7 @@
     ]
   }
 }
-if (is_mac) {
+if (is_mac || is_ios) {
   bundle_data("test_fonts_bundle_data") {
     public_deps = [
       "//third_party/test_fonts",
@@ -865,7 +865,7 @@
   deps = []
   data_deps = []
 
-  if (is_mac) {
+  if (is_mac || is_ios) {
     deps += [ ":test_fonts_bundle_data" ]
     data_deps += [ ":test_fonts_bundle_data" ]
   } else {
diff --git a/testing/scripts/run_wpt_tests.py b/testing/scripts/run_wpt_tests.py
index 5a0012d..d4b0989 100755
--- a/testing/scripts/run_wpt_tests.py
+++ b/testing/scripts/run_wpt_tests.py
@@ -55,7 +55,11 @@
             "--no-capture-stdio",
             "--no-manifest-download",
             "--no-pause-after-test",
-            "--no-fail-on-unexpected",
+            # Setting --no-fail-on-unexpected makes the return code of wpt 0
+            # even if there were test failures. The CQ doesn't like this since
+            # it uses the exit code to determine which shards to retry (ie:
+            # those that had non-zero exit codes).
+            #"--no-fail-on-unexpected",
             "--metadata",
             WPT_METADATA_DIR,
             # By specifying metadata above, WPT will try to find manifest in the
diff --git a/third_party/blink/common/BUILD.gn b/third_party/blink/common/BUILD.gn
index b003d6e..bcc9ab1 100644
--- a/third_party/blink/common/BUILD.gn
+++ b/third_party/blink/common/BUILD.gn
@@ -88,6 +88,7 @@
     "origin_trials/trial_token_validator.cc",
     "page/page_zoom.cc",
     "peerconnection/webrtc_ip_handling_policy.cc",
+    "permissions/permission_utils.cc",
     "scheduler/web_scheduler_tracked_feature.cc",
     "service_worker/service_worker_status_code.cc",
     "service_worker/service_worker_type_converters.cc",
diff --git a/third_party/blink/common/permissions/OWNERS b/third_party/blink/common/permissions/OWNERS
new file mode 100644
index 0000000..d83a9c5
--- /dev/null
+++ b/third_party/blink/common/permissions/OWNERS
@@ -0,0 +1,3 @@
+file://third_party/blink/renderer/modules/permissions/OWNERS
+
+# COMPONENT: Blink>PermissionsAPI
diff --git a/third_party/blink/common/permissions/permission_utils.cc b/third_party/blink/common/permissions/permission_utils.cc
new file mode 100644
index 0000000..fffd8eef
--- /dev/null
+++ b/third_party/blink/common/permissions/permission_utils.cc
@@ -0,0 +1,22 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/public/common/permissions/permission_utils.h"
+
+#include "base/logging.h"
+
+namespace blink {
+
+mojom::PermissionStatus ToPermissionStatus(const std::string& status) {
+  if (status == "granted")
+    return mojom::PermissionStatus::GRANTED;
+  if (status == "prompt")
+    return mojom::PermissionStatus::ASK;
+  if (status == "denied")
+    return mojom::PermissionStatus::DENIED;
+  NOTREACHED();
+  return mojom::PermissionStatus::DENIED;
+}
+
+}  // namespace blink
diff --git a/third_party/blink/public/common/BUILD.gn b/third_party/blink/public/common/BUILD.gn
index ad924c4..9a4c1d9 100644
--- a/third_party/blink/public/common/BUILD.gn
+++ b/third_party/blink/public/common/BUILD.gn
@@ -134,6 +134,7 @@
     "page/page_visibility_state.h",
     "page/page_zoom.h",
     "peerconnection/webrtc_ip_handling_policy.h",
+    "permissions/permission_utils.h",
     "plugin/plugin_action.h",
     "prerender/prerender_rel_type.h",
     "presentation/presentation_receiver_flags.h",
diff --git a/third_party/blink/public/common/permissions/OWNERS b/third_party/blink/public/common/permissions/OWNERS
new file mode 100644
index 0000000..d83a9c5
--- /dev/null
+++ b/third_party/blink/public/common/permissions/OWNERS
@@ -0,0 +1,3 @@
+file://third_party/blink/renderer/modules/permissions/OWNERS
+
+# COMPONENT: Blink>PermissionsAPI
diff --git a/third_party/blink/public/common/permissions/permission_utils.h b/third_party/blink/public/common/permissions/permission_utils.h
new file mode 100644
index 0000000..d623fc6
--- /dev/null
+++ b/third_party/blink/public/common/permissions/permission_utils.h
@@ -0,0 +1,22 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_PERMISSIONS_PERMISSION_UTILS_H_
+#define THIRD_PARTY_BLINK_PUBLIC_COMMON_PERMISSIONS_PERMISSION_UTILS_H_
+
+#include <string>
+
+#include "third_party/blink/public/common/common_export.h"
+#include "third_party/blink/public/mojom/permissions/permission_status.mojom-shared.h"
+
+namespace blink {
+
+// Converts a permission string ("granted", "denied", "prompt") into a
+// PermissionStatus.
+BLINK_COMMON_EXPORT mojom::PermissionStatus ToPermissionStatus(
+    const std::string& status);
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_PUBLIC_COMMON_PERMISSIONS_PERMISSION_UTILS_H_
diff --git a/third_party/blink/public/mojom/BUILD.gn b/third_party/blink/public/mojom/BUILD.gn
index 601f7953..0ea1cc8 100644
--- a/third_party/blink/public/mojom/BUILD.gn
+++ b/third_party/blink/public/mojom/BUILD.gn
@@ -94,6 +94,7 @@
     "payments/payment_app.mojom",
     "peerconnection/peer_connection_tracker.mojom",
     "permissions/permission.mojom",
+    "permissions/permission_automation.mojom",
     "permissions/permission_status.mojom",
     "picture_in_picture/picture_in_picture.mojom",
     "plugins/plugin_registry.mojom",
diff --git a/third_party/blink/public/mojom/permissions/permission_automation.mojom b/third_party/blink/public/mojom/permissions/permission_automation.mojom
new file mode 100644
index 0000000..9442f56
--- /dev/null
+++ b/third_party/blink/public/mojom/permissions/permission_automation.mojom
@@ -0,0 +1,21 @@
+// 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.
+
+module blink.test.mojom;
+
+import "third_party/blink/public/mojom/permissions/permission.mojom";
+import "third_party/blink/public/mojom/permissions/permission_status.mojom";
+import "url/mojom/url.mojom";
+
+// Provides a way for tests to change the permission returned to permission
+// requests of a certain type (via the PermissionService interface).
+// See https://w3c.github.io/permissions/#automation
+interface PermissionAutomation {
+  // Sets the permission for |descriptor| to |status| when queried or requested
+  // in |origin| from |embedding_origin|.
+  SetPermission(blink.mojom.PermissionDescriptor descriptor,
+                blink.mojom.PermissionStatus status,
+                url.mojom.Url origin,
+                url.mojom.Url embedding_origin) => (bool success);
+};
diff --git a/third_party/blink/public/mojom/renderer_preferences.mojom b/third_party/blink/public/mojom/renderer_preferences.mojom
index 487391f6..ec41e11 100644
--- a/third_party/blink/public/mojom/renderer_preferences.mojom
+++ b/third_party/blink/public/mojom/renderer_preferences.mojom
@@ -40,7 +40,7 @@
   // positions for glyphs.  Currently only used by Linux.
   bool use_subpixel_positioning = false;
 
-  // The color of the focus ring. Currently only used on Linux.
+  // The color of the focus ring.
   uint32 focus_ring_color = 0xFFE59700;
 
   // The colors used in selection text. Currently only used on Linux and Ash.
diff --git a/third_party/blink/public/platform/web_url_response.h b/third_party/blink/public/platform/web_url_response.h
index 500fa6e..5135156 100644
--- a/third_party/blink/public/platform/web_url_response.h
+++ b/third_party/blink/public/platform/web_url_response.h
@@ -216,6 +216,7 @@
   BLINK_PLATFORM_EXPORT void SetHasMajorCertificateErrors(bool);
   BLINK_PLATFORM_EXPORT void SetCTPolicyCompliance(net::ct::CTPolicyCompliance);
   BLINK_PLATFORM_EXPORT void SetIsLegacyTLSVersion(bool);
+  BLINK_PLATFORM_EXPORT void SetTimingAllowPassed(bool);
 
   BLINK_PLATFORM_EXPORT void SetSecurityStyle(SecurityStyle);
 
diff --git a/third_party/blink/renderer/bindings/core/v8/idl_types.h b/third_party/blink/renderer/bindings/core/v8/idl_types.h
index cb2cb9a..3cc8a28 100644
--- a/third_party/blink/renderer/bindings/core/v8/idl_types.h
+++ b/third_party/blink/renderer/bindings/core/v8/idl_types.h
@@ -80,6 +80,44 @@
 using IDLStringTreatNullAsEmptyString =
     IDLStringBase<V8StringResourceMode::kTreatNullAsEmptyString>;
 
+// Strings for the new bindings generator
+
+namespace bindings {
+
+enum class NativeValueTraitsStringConv {
+  kDefault,
+  kNullable,
+  kTreatNullAsEmptyString,
+};
+
+}  // namespace bindings
+
+// ByteString
+template <bindings::NativeValueTraitsStringConv mode>
+struct IDLByteStringBaseV2 final : public IDLBaseHelper<String> {};
+using IDLByteStringV2 =
+    IDLByteStringBaseV2<bindings::NativeValueTraitsStringConv::kDefault>;
+using IDLByteStringOrNullV2 =
+    IDLByteStringBaseV2<bindings::NativeValueTraitsStringConv::kNullable>;
+
+// DOMString
+template <bindings::NativeValueTraitsStringConv mode>
+struct IDLStringBaseV2 final : public IDLBaseHelper<String> {};
+using IDLStringV2 =
+    IDLStringBaseV2<bindings::NativeValueTraitsStringConv::kDefault>;
+using IDLStringOrNullV2 =
+    IDLStringBaseV2<bindings::NativeValueTraitsStringConv::kNullable>;
+using IDLStringTreatNullAsEmptyStringV2 = IDLStringBaseV2<
+    bindings::NativeValueTraitsStringConv::kTreatNullAsEmptyString>;
+
+// USVString
+template <bindings::NativeValueTraitsStringConv mode>
+struct IDLUSVStringBaseV2 final : public IDLBaseHelper<String> {};
+using IDLUSVStringV2 =
+    IDLUSVStringBaseV2<bindings::NativeValueTraitsStringConv::kDefault>;
+using IDLUSVStringOrNullV2 =
+    IDLUSVStringBaseV2<bindings::NativeValueTraitsStringConv::kNullable>;
+
 // Double
 struct IDLDouble final : public IDLBaseHelper<double> {};
 struct IDLUnrestrictedDouble final : public IDLBaseHelper<double> {};
diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
index 2a0c8ac9..e03b4ea 100644
--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
@@ -341,6 +341,140 @@
   static String NullValue() { return String(); }
 };
 
+// Strings for the new bindings generator
+
+namespace bindings {
+
+// ToBlinkString implements AtomicString- and String-specific conversions from
+// v8::String.  NativeValueTraitsStringAdapter helps select the best conversion.
+//
+// Example:
+//   void F(const AtomicString& s);
+//   void G(const String& s);
+//
+//   const NativeValueTraitsStringAdapter& x = ...;
+//   F(x);  // ToBlinkString<AtomicString> is used.
+//   G(x);  // ToBlinkString<String> is used.
+class NativeValueTraitsStringAdapter {
+ public:
+  NativeValueTraitsStringAdapter() = default;
+  NativeValueTraitsStringAdapter(const NativeValueTraitsStringAdapter&) =
+      default;
+  NativeValueTraitsStringAdapter(NativeValueTraitsStringAdapter&&) = default;
+  NativeValueTraitsStringAdapter(v8::Local<v8::String> value)
+      : v8_string_(value) {}
+  NativeValueTraitsStringAdapter(const String& value) : wtf_string_(value) {}
+  NativeValueTraitsStringAdapter(int32_t value)
+      : wtf_string_(ToBlinkString(value)) {}
+
+  NativeValueTraitsStringAdapter& operator=(
+      const NativeValueTraitsStringAdapter&) = default;
+  NativeValueTraitsStringAdapter& operator=(NativeValueTraitsStringAdapter&&) =
+      default;
+
+  operator String() const { return ToString<String>(); }
+  operator AtomicString() const { return ToString<AtomicString>(); }
+
+ private:
+  template <class StringType>
+  StringType ToString() const {
+    if (LIKELY(!v8_string_.IsEmpty()))
+      return ToBlinkString<StringType>(v8_string_, kExternalize);
+    return StringType(wtf_string_);
+  }
+
+  v8::Local<v8::String> v8_string_;
+  String wtf_string_;
+};
+
+}  // namespace bindings
+
+template <bindings::NativeValueTraitsStringConv mode>
+struct NativeValueTraits<IDLByteStringBaseV2<mode>>
+    : public NativeValueTraitsBase<IDLByteStringBaseV2<mode>> {
+  // http://heycam.github.io/webidl/#es-ByteString
+  static bindings::NativeValueTraitsStringAdapter NativeValue(
+      v8::Isolate* isolate,
+      v8::Local<v8::Value> value,
+      ExceptionState& exception_state) {
+    if (value->IsString() and value.As<v8::String>()->ContainsOnlyOneByte())
+      return bindings::NativeValueTraitsStringAdapter(value.As<v8::String>());
+    if (value->IsInt32()) {
+      return bindings::NativeValueTraitsStringAdapter(
+          value.As<v8::Int32>()->Value());
+    }
+
+    if (mode == bindings::NativeValueTraitsStringConv::kNullable) {
+      if (value->IsNullOrUndefined())
+        return bindings::NativeValueTraitsStringAdapter();
+    }
+
+    v8::TryCatch try_catch(isolate);
+    v8::Local<v8::String> v8_string;
+    if (!value->ToString(isolate->GetCurrentContext()).ToLocal(&v8_string)) {
+      exception_state.RethrowV8Exception(try_catch.Exception());
+      return bindings::NativeValueTraitsStringAdapter();
+    }
+    if (!v8_string->ContainsOnlyOneByte()) {
+      exception_state.ThrowTypeError(
+          "String contains non ISO-8859-1 code point.");
+      return bindings::NativeValueTraitsStringAdapter();
+    }
+    return bindings::NativeValueTraitsStringAdapter(v8_string);
+  }
+};
+
+template <bindings::NativeValueTraitsStringConv mode>
+struct NativeValueTraits<IDLStringBaseV2<mode>>
+    : public NativeValueTraitsBase<IDLStringBaseV2<mode>> {
+  // https://heycam.github.io/webidl/#es-DOMString
+  static bindings::NativeValueTraitsStringAdapter NativeValue(
+      v8::Isolate* isolate,
+      v8::Local<v8::Value> value,
+      ExceptionState& exception_state) {
+    if (value->IsString())
+      return bindings::NativeValueTraitsStringAdapter(value.As<v8::String>());
+    if (value->IsInt32()) {
+      return bindings::NativeValueTraitsStringAdapter(
+          value.As<v8::Int32>()->Value());
+    }
+
+    if (mode == bindings::NativeValueTraitsStringConv::kNullable) {
+      if (value->IsNullOrUndefined())
+        return bindings::NativeValueTraitsStringAdapter();
+    }
+    if (mode ==
+        bindings::NativeValueTraitsStringConv::kTreatNullAsEmptyString) {
+      if (value->IsNull())
+        return bindings::NativeValueTraitsStringAdapter(g_empty_string);
+    }
+
+    v8::TryCatch try_catch(isolate);
+    v8::Local<v8::String> v8_string;
+    if (!value->ToString(isolate->GetCurrentContext()).ToLocal(&v8_string)) {
+      exception_state.RethrowV8Exception(try_catch.Exception());
+      return bindings::NativeValueTraitsStringAdapter();
+    }
+    return bindings::NativeValueTraitsStringAdapter(v8_string);
+  }
+};
+
+template <bindings::NativeValueTraitsStringConv mode>
+struct NativeValueTraits<IDLUSVStringBaseV2<mode>>
+    : public NativeValueTraitsBase<IDLUSVStringBaseV2<mode>> {
+  // http://heycam.github.io/webidl/#es-USVString
+  static String NativeValue(v8::Isolate* isolate,
+                            v8::Local<v8::Value> value,
+                            ExceptionState& exception_state) {
+    String string = NativeValueTraits<IDLStringBaseV2<mode>>::NativeValue(
+        isolate, value, exception_state);
+    if (exception_state.HadException())
+      return String();
+
+    return ReplaceUnmatchedSurrogates(string);
+  }
+};
+
 // Floats and doubles
 template <>
 struct CORE_EXPORT NativeValueTraits<IDLDouble>
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py b/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py
index 2955445..839981fc 100644
--- a/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py
+++ b/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py
@@ -150,13 +150,12 @@
             "ScriptPromise", ref_fmt="{}&", const_ref_fmt="const {}&")
 
     if real_type.is_union:
-        def_obj = real_type.union_definition_object
-        blink_impl_type = blink_class_name(def_obj)
+        blink_impl_type = blink_class_name(real_type.union_definition_object)
         return TypeInfo(
             blink_impl_type,
             ref_fmt="{}&",
             const_ref_fmt="const {}&",
-            is_nullable=def_obj.does_include_nullable_type)
+            is_nullable=True)
 
     if real_type.is_nullable:
         inner_type = blink_type_info(real_type.inner_type)
@@ -176,10 +175,13 @@
 
     real_type = idl_type.unwrap(typedef=True)
 
-    if (real_type.is_boolean or real_type.is_numeric or real_type.is_string
-            or real_type.is_any or real_type.is_object):
+    if (real_type.is_boolean or real_type.is_numeric or real_type.is_any
+            or real_type.is_object):
         return "IDL{}".format(real_type.type_name)
 
+    if real_type.unwrap(nullable=True).is_string:
+        return "IDL{}V2".format(real_type.type_name)
+
     if real_type.is_symbol:
         assert False, "Blink does not support/accept IDL symbol type."
 
@@ -207,6 +209,8 @@
     if real_type.is_nullable:
         return "IDLNullable<{}>".format(native_value_tag(real_type.inner_type))
 
+    assert False
+
 
 def make_default_value_expr(idl_type, default_value):
     """
@@ -239,6 +243,9 @@
         elif type_info.value_t == "ScriptValue":
             initializer = None  # ScriptValue::IsEmpty() by default
             assignment_value = "ScriptValue()"
+        elif idl_type.unwrap().is_union:
+            initializer = None  # <union_type>::IsNull() by default
+            assignment_value = "{}()".format(type_info.value_t)
         else:
             assert not type_info.is_nullable
             initializer = None  # !base::Optional::has_value() by default
diff --git a/third_party/blink/renderer/build/scripts/core/css/css_properties.py b/third_party/blink/renderer/build/scripts/core/css/css_properties.py
index b6b40d0d..5967df70 100755
--- a/third_party/blink/renderer/build/scripts/core/css/css_properties.py
+++ b/third_party/blink/renderer/build/scripts/core/css/css_properties.py
@@ -54,6 +54,18 @@
     if property_to_check['alias_for']:
         assert not property_to_check['is_internal'], \
             'Internal aliases is not supported'
+    if property_to_check['valid_for_first_letter']:
+        assert not property_to_check['longhands'], \
+            'Shorthand %s should not be marked as valid_for_first_letter' % \
+            property_to_check['name']
+    if property_to_check['valid_for_cue']:
+        assert not property_to_check['longhands'], \
+            'Shorthand %s should not be marked as valid_for_cue' % \
+            property_to_check['name']
+    if property_to_check['valid_for_marker']:
+        assert not property_to_check['longhands'], \
+            'Shorthand %s should not be marked as valid_for_marker' % \
+            property_to_check['name']
 
 
 class CSSProperties(object):
diff --git a/third_party/blink/renderer/build/scripts/core/css/properties/templates/css_properties.h.tmpl b/third_party/blink/renderer/build/scripts/core/css/properties/templates/css_properties.h.tmpl
index 20d6d09..3d46184 100644
--- a/third_party/blink/renderer/build/scripts/core/css/properties/templates/css_properties.h.tmpl
+++ b/third_party/blink/renderer/build/scripts/core/css/properties/templates/css_properties.h.tmpl
@@ -42,6 +42,9 @@
   (property.affected_by_forced_colors and 'kIsAffectedByForcedColors' or ''),
   (property.ua and 'kUA' or ''),
   (property.is_animation_property and 'kAnimation' or ''),
+  (property.valid_for_first_letter and 'kValidForFirstLetter' or ''),
+  (property.valid_for_cue and 'kValidForCue' or ''),
+  (property.valid_for_marker and 'kValidForMarker' or ''),
 ] | reject('==', '') | join(' | ') %}
 {% set ctor_args = (not is_alias and [property_id, flags, separator] or []) %}
 // {{property.name}}
diff --git a/third_party/blink/renderer/core/DEPS b/third_party/blink/renderer/core/DEPS
index 5c38eb42..d3d2c29 100644
--- a/third_party/blink/renderer/core/DEPS
+++ b/third_party/blink/renderer/core/DEPS
@@ -134,5 +134,6 @@
     ],
     "document.cc" : [
         "+net/base/registry_controlled_domains/registry_controlled_domain.h",
-    ]
+    ],
+    "(computed_style|computed_style_test)\.cc" : [ "+ui/base/ui_base_features.h" ]
 }
diff --git a/third_party/blink/renderer/core/css/css_gradient_value.cc b/third_party/blink/renderer/core/css/css_gradient_value.cc
index e4b4c49..13d416e 100644
--- a/third_party/blink/renderer/core/css/css_gradient_value.cc
+++ b/third_party/blink/renderer/core/css/css_gradient_value.cc
@@ -48,6 +48,7 @@
 #include "third_party/blink/renderer/platform/graphics/gradient_generated_image.h"
 #include "third_party/blink/renderer/platform/graphics/image.h"
 #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h"
+#include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
@@ -1522,7 +1523,7 @@
 CSSConicGradientValue* CSSConicGradientValue::ComputedCSSValue(
     const ComputedStyle& style,
     bool allow_visited_style) {
-  CSSConicGradientValue* result = CSSConicGradientValue::Create(
+  auto* result = MakeGarbageCollected<CSSConicGradientValue>(
       x_, y_, from_angle_, repeating_ ? kRepeating : kNonRepeating);
   result->AddComputedStops(style, allow_visited_style, stops_);
   return result;
diff --git a/third_party/blink/renderer/core/css/css_gradient_value.h b/third_party/blink/renderer/core/css/css_gradient_value.h
index 6976a76b..6596e0e0 100644
--- a/third_party/blink/renderer/core/css/css_gradient_value.h
+++ b/third_party/blink/renderer/core/css/css_gradient_value.h
@@ -305,14 +305,6 @@
 
 class CSSConicGradientValue final : public CSSGradientValue {
  public:
-  static CSSConicGradientValue* Create(const CSSValue* x,
-                                       const CSSValue* y,
-                                       const CSSPrimitiveValue* from_angle,
-                                       CSSGradientRepeat repeat) {
-    return MakeGarbageCollected<CSSConicGradientValue>(x, y, from_angle,
-                                                       repeat);
-  }
-
   CSSConicGradientValue(const CSSValue* x,
                         const CSSValue* y,
                         const CSSPrimitiveValue* from_angle,
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5
index 9beb4c6..f4e2cfdb2 100644
--- a/third_party/blink/renderer/core/css/css_properties.json5
+++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -443,6 +443,29 @@
       valid_type: "str",
     },
 
+    // - valid_for_first_letter: true
+    //
+    // https://drafts.csswg.org/css-pseudo-4/#first-letter-styling
+    valid_for_first_letter: {
+      default: false,
+      valid_type: "bool",
+    },
+
+    // - valid_for_cue: true
+    //
+    // https://w3c.github.io/webvtt/#the-cue-pseudo-element
+    valid_for_cue: {
+      default: false,
+      valid_type: "bool",
+    },
+
+    // - valid_for_marker: true
+    //
+    // https://drafts.csswg.org/css-pseudo-4/#marker-pseudo
+    valid_for_marker: {
+      default: false,
+      valid_type: "bool",
+    },
   },
 
   // Members in the data objects should appear in the same order as in the
@@ -637,6 +660,9 @@
       keywords: ["currentcolor"],
       typedom_types: ["Keyword"],
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
+      valid_for_cue: true,
+      valid_for_marker: true,
     },
     {
       name: "direction",
@@ -651,6 +677,7 @@
       type_name: "TextDirection",
       style_builder_custom_functions: ["value"],
       priority: "High",
+      valid_for_marker: true,
     },
     {
       name: "font-family",
@@ -662,6 +689,9 @@
       type_name: "FontDescription::FamilyDescription",
       converter: "ConvertFontFamily",
       priority: "High",
+      valid_for_first_letter: true,
+      valid_for_cue: true,
+      valid_for_marker: true,
     },
     {
       name: "font-kerning",
@@ -673,6 +703,8 @@
       priority: "High",
       keywords: ["auto", "normal", "none"],
       typedom_types: ["Keyword"],
+      valid_for_first_letter: true,
+      valid_for_marker: true,
     },
     {
       name: "font-optical-sizing",
@@ -683,7 +715,9 @@
       type_name: "OpticalSizing",
       priority: "High",
       keywords: ["auto", "none"],
-      typedom_types: ["Keyword"]
+      typedom_types: ["Keyword"],
+      valid_for_first_letter: true,
+      valid_for_marker: true,
     },
     {
       name: "font-size",
@@ -696,7 +730,10 @@
       converter: "ConvertFontSize",
       priority: "High",
       keywords: ["xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "xxx-large", "larger", "smaller", "-webkit-xxx-large"],
-      typedom_types: ["Keyword", "Length", "Percentage"]
+      typedom_types: ["Keyword", "Length", "Percentage"],
+      valid_for_first_letter: true,
+      valid_for_cue: true,
+      valid_for_marker: true,
     },
     {
       name: "font-size-adjust",
@@ -709,7 +746,9 @@
       converter: "ConvertFontSizeAdjust",
       priority: "High",
       keywords: ["none"],
-      typedom_types: ["Keyword", "Number"]
+      typedom_types: ["Keyword", "Number"],
+      valid_for_first_letter: true,
+      valid_for_marker: true,
     },
     {
       name: "font-stretch",
@@ -724,7 +763,10 @@
         "normal", "ultra-condensed", "extra-condensed", "condensed",
         "semi-condensed", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded"
       ],
-      typedom_types: ["Keyword", "Percentage"]
+      typedom_types: ["Keyword", "Percentage"],
+      valid_for_first_letter: true,
+      valid_for_cue: true,
+      valid_for_marker: true,
     },
     {
       name: "font-style",
@@ -737,6 +779,9 @@
       priority: "High",
       keywords: ["normal", "italic", "oblique"],
       typedom_types: ["Keyword"],
+      valid_for_first_letter: true,
+      valid_for_cue: true,
+      valid_for_marker: true,
     },
     {
       name: "font-variant-ligatures",
@@ -754,6 +799,8 @@
          "no-contextual"
       ],
       typedom_types: ["Keyword"],
+      valid_for_first_letter: true,
+      valid_for_marker: true,
     },
     {
       name: "font-variant-caps",
@@ -768,6 +815,8 @@
         "all-petite-caps", "unicase", "titling-caps"
       ],
       typedom_types: ["Keyword"],
+      valid_for_first_letter: true,
+      valid_for_marker: true,
     },
     {
       name: "font-variant-east-asian",
@@ -782,6 +831,8 @@
          "traditional", "full-width", "proportional-width", "ruby"
       ],
       typedom_types: ["Keyword"],
+      valid_for_first_letter: true,
+      valid_for_marker: true,
     },
     {
       name: "font-variant-numeric",
@@ -797,6 +848,8 @@
         "slashed-zero"
       ],
       typedom_types: ["Keyword"],
+      valid_for_first_letter: true,
+      valid_for_marker: true,
     },
     {
       name: "font-weight",
@@ -809,7 +862,10 @@
       converter: "ConvertFontWeight",
       priority: "High",
       keywords: ["normal", "bold", "bolder", "lighter"],
-      typedom_types: ["Keyword", "Number"]
+      typedom_types: ["Keyword", "Number"],
+      valid_for_first_letter: true,
+      valid_for_cue: true,
+      valid_for_marker: true,
     },
     {
       name: "font-feature-settings",
@@ -822,6 +878,8 @@
       priority: "High",
       keywords: ["normal"],
       typedom_types: ["Keyword"],
+      valid_for_first_letter: true,
+      valid_for_marker: true,
     },
     {
       name: "font-variation-settings",
@@ -833,7 +891,10 @@
       converter: "ConvertFontVariationSettings",
       priority: "High",
       keywords: ["normal"],
-      typedom_types: ["Keyword"]
+      typedom_types: ["Keyword"],
+      valid_for_first_letter: true,
+      valid_for_cue: true,
+      valid_for_marker: true,
     },
     {
       name: "-webkit-font-smoothing",
@@ -842,6 +903,7 @@
       font: true,
       type_name: "FontSmoothingMode",
       priority: "High",
+      valid_for_first_letter: true,
     },
     {
       name: "forced-color-adjust",
@@ -1000,6 +1062,8 @@
       style_builder_template_args: {
         fill_type: "Attachment",
       },
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "background-blend-mode",
@@ -1016,6 +1080,7 @@
         fill_type: "BlendMode",
         fill_type_getter: "GetBlendMode",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "background-clip",
@@ -1027,6 +1092,8 @@
       style_builder_template_args: {
         fill_type: "Clip",
       },
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "background-color",
@@ -1046,6 +1113,8 @@
         initial_color: "ComputedStyleInitialValues::InitialBackgroundColor",
       },
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "background-image",
@@ -1059,6 +1128,8 @@
         fill_type: "Image",
         fill_type_getter: "GetImage",
       },
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "background-origin",
@@ -1070,6 +1141,8 @@
       style_builder_template_args: {
         fill_type: "Origin",
       },
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "background-position-x",
@@ -1079,6 +1152,8 @@
       style_builder_template_args: {
         fill_type: "PositionX",
       },
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "background-position-y",
@@ -1088,6 +1163,8 @@
       style_builder_template_args: {
         fill_type: "PositionY",
       },
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "background-repeat-x",
@@ -1095,6 +1172,8 @@
       style_builder_template_args: {
         fill_type: "RepeatX",
       },
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "background-repeat-y",
@@ -1102,6 +1181,8 @@
       style_builder_template_args: {
         fill_type: "RepeatY",
       },
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "background-size",
@@ -1114,6 +1195,8 @@
       style_builder_template_args: {
         fill_type: "Size",
       },
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "baseline-shift",
@@ -1140,6 +1223,7 @@
       converter: "ConvertStyleColor",
       style_builder_template: "color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "border-bottom-left-radius",
@@ -1152,6 +1236,7 @@
       type_name: "LengthSize",
       converter: "ConvertRadius",
       typedom_types: ["Length", "Percentage"],
+      valid_for_first_letter: true,
     },
     {
       name: "border-bottom-right-radius",
@@ -1164,6 +1249,7 @@
       type_name: "LengthSize",
       converter: "ConvertRadius",
       typedom_types: ["Length", "Percentage"],
+      valid_for_first_letter: true,
     },
     {
       name: "border-bottom-style",
@@ -1178,6 +1264,7 @@
       typedom_types: ["Keyword"],
       default_value: "none",
       type_name: "EBorderStyle",
+      valid_for_first_letter: true,
     },
     {
       name: "border-bottom-width",
@@ -1193,6 +1280,7 @@
       type_name: "LayoutUnit",
       computed_style_custom_functions: ["getter", "setter"],
       converter: "ConvertBorderWidth",
+      valid_for_first_letter: true,
     },
     {
       name: "border-collapse",
@@ -1214,6 +1302,7 @@
       style_builder_template_args: {
         modifier_type: "Outset",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-image-repeat",
@@ -1225,6 +1314,7 @@
       style_builder_template_args: {
         modifier_type: "Repeat",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-image-slice",
@@ -1236,6 +1326,7 @@
       style_builder_template_args: {
         modifier_type: "Slice",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-image-source",
@@ -1245,6 +1336,7 @@
       keywords: ["none"],
       typedom_types: ["Keyword", "Image"],
       style_builder_custom_functions: ["value"],
+      valid_for_first_letter: true,
     },
     {
       name: "border-image-width",
@@ -1257,6 +1349,7 @@
       style_builder_template_args: {
         modifier_type: "Width",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-left-color",
@@ -1274,6 +1367,7 @@
       converter: "ConvertStyleColor",
       style_builder_template: "color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "border-left-style",
@@ -1288,6 +1382,7 @@
       typedom_types: ["Keyword"],
       default_value: "none",
       type_name: "EBorderStyle",
+      valid_for_first_letter: true,
     },
     {
       name: "border-left-width",
@@ -1303,6 +1398,7 @@
       type_name: "LayoutUnit",
       computed_style_custom_functions: ["getter", "setter"],
       converter: "ConvertBorderWidth",
+      valid_for_first_letter: true,
     },
     {
       name: "border-right-color",
@@ -1320,6 +1416,7 @@
       converter: "ConvertStyleColor",
       style_builder_template: "color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "border-right-style",
@@ -1334,6 +1431,7 @@
       typedom_types: ["Keyword"],
       default_value: "none",
       type_name: "EBorderStyle",
+      valid_for_first_letter: true,
     },
     {
       name: "border-right-width",
@@ -1349,6 +1447,7 @@
       type_name: "LayoutUnit",
       computed_style_custom_functions: ["getter", "setter"],
       converter: "ConvertBorderWidth",
+      valid_for_first_letter: true,
     },
     {
       name: "border-top-color",
@@ -1366,6 +1465,7 @@
       converter: "ConvertStyleColor",
       style_builder_template: "color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "border-top-left-radius",
@@ -1378,6 +1478,7 @@
       type_name: "LengthSize",
       converter: "ConvertRadius",
       typedom_types: ["Length", "Percentage"],
+      valid_for_first_letter: true,
     },
     {
       name: "border-top-right-radius",
@@ -1390,6 +1491,7 @@
       type_name: "LengthSize",
       converter: "ConvertRadius",
       typedom_types: ["Length", "Percentage"],
+      valid_for_first_letter: true,
     },
     {
       name: "border-top-style",
@@ -1404,6 +1506,7 @@
       typedom_types: ["Keyword"],
       default_value: "none",
       type_name: "EBorderStyle",
+      valid_for_first_letter: true,
     },
     {
       name: "border-top-width",
@@ -1419,6 +1522,7 @@
       type_name: "LayoutUnit",
       computed_style_custom_functions: ["getter", "setter"],
       converter: "ConvertBorderWidth",
+      valid_for_first_letter: true,
     },
     {
       name: "bottom",
@@ -1447,6 +1551,7 @@
       keywords: ["none"],
       typedom_types: ["Keyword"],
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "box-sizing",
@@ -1643,6 +1748,7 @@
       type_name: "ContentData",
       computed_style_custom_functions: ["getter", "setter"],
       style_builder_custom_functions: ["initial", "inherit", "value"],
+      valid_for_marker: true,
     },
     {
       name: "counter-increment",
@@ -1843,6 +1949,7 @@
       default_value: "none",
       name_for_methods: "Floating",
       type_name: "EFloat",
+      valid_for_first_letter: true,
     },
     {
       name: "flood-color",
@@ -2146,7 +2253,8 @@
       inherited: true,
       converter: "ConvertSpacing",
       keywords: ["normal"],
-      typedom_types: ["Keyword", "Length"]
+      typedom_types: ["Keyword", "Length"],
+      valid_for_first_letter: true,
     },
     {
       name: "lighting-color",
@@ -2169,7 +2277,9 @@
       computed_style_custom_functions: ["getter"],
       converter: "ConvertLineHeight",
       keywords: ["normal"],
-      typedom_types: ["Keyword", "Length", "Number", "Percentage"]
+      typedom_types: ["Keyword", "Length", "Number", "Percentage"],
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "line-height-step",
@@ -2242,7 +2352,8 @@
       converter: "ConvertQuirkyLength",
       computed_style_custom_functions: ["setter"],
       keywords: ["auto"],
-      typedom_types: ["Keyword", "Length", "Percentage"]
+      typedom_types: ["Keyword", "Length", "Percentage"],
+      valid_for_first_letter: true,
     },
     {
       name: "margin-left",
@@ -2256,7 +2367,8 @@
       converter: "ConvertQuirkyLength",
       computed_style_custom_functions: ["setter"],
       keywords: ["auto"],
-      typedom_types: ["Keyword", "Length", "Percentage"]
+      typedom_types: ["Keyword", "Length", "Percentage"],
+      valid_for_first_letter: true,
     },
     {
       name: "margin-right",
@@ -2270,7 +2382,8 @@
       converter: "ConvertQuirkyLength",
       computed_style_custom_functions: ["setter"],
       keywords: ["auto"],
-      typedom_types: ["Keyword", "Length", "Percentage"]
+      typedom_types: ["Keyword", "Length", "Percentage"],
+      valid_for_first_letter: true,
     },
     {
       name: "margin-top",
@@ -2284,7 +2397,8 @@
       converter: "ConvertQuirkyLength",
       computed_style_custom_functions: ["setter"],
       keywords: ["auto"],
-      typedom_types: ["Keyword", "Length", "Percentage"]
+      typedom_types: ["Keyword", "Length", "Percentage"],
+      valid_for_first_letter: true,
     },
     {
       name: "marker-end",
@@ -2502,7 +2616,9 @@
       default_value: "1.0",
       type_name: "float",
       computed_style_custom_functions: ["setter"],
-      typedom_types: ["Number"]
+      typedom_types: ["Number"],
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "order",
@@ -2542,6 +2658,7 @@
       converter: "ConvertStyleColor",
       style_builder_template: "color",
       affected_by_forced_colors: true,
+      valid_for_cue: true,
     },
     {
       name: "outline-offset",
@@ -2554,6 +2671,7 @@
       computed_style_custom_functions: ["getter"],
       converter: "ConvertComputedLength<int>",
       typedom_types: ["Length"],
+      valid_for_cue: true,
     },
     {
       name: "outline-style",
@@ -2568,6 +2686,7 @@
       default_value: "none",
       type_name: "EBorderStyle",
       style_builder_custom_functions: ["initial", "inherit", "value"],
+      valid_for_cue: true,
     },
     {
       name: "outline-width",
@@ -2582,6 +2701,7 @@
       converter: "ConvertLineWidth<unsigned short>",
       keywords: ["thin", "medium", "thick"],
       typedom_types: ["Keyword", "Length"],
+      valid_for_cue: true,
     },
     {
       name: "overflow-anchor",
@@ -2689,7 +2809,8 @@
       default_value: "Length::Fixed()",
       converter: "ConvertLength",
       computed_style_custom_functions: ["setter"],
-      typedom_types: ["Keyword", "Length", "Percentage"]
+      typedom_types: ["Keyword", "Length", "Percentage"],
+      valid_for_first_letter: true,
     },
     {
       name: "padding-left",
@@ -2702,7 +2823,8 @@
       default_value: "Length::Fixed()",
       converter: "ConvertLength",
       computed_style_custom_functions: ["setter"],
-      typedom_types: ["Keyword", "Length", "Percentage"]
+      typedom_types: ["Keyword", "Length", "Percentage"],
+      valid_for_first_letter: true,
     },
     {
       name: "padding-right",
@@ -2715,7 +2837,8 @@
       default_value: "Length::Fixed()",
       converter: "ConvertLength",
       computed_style_custom_functions: ["setter"],
-      typedom_types: ["Keyword", "Length", "Percentage"]
+      typedom_types: ["Keyword", "Length", "Percentage"],
+      valid_for_first_letter: true,
     },
     {
       name: "padding-top",
@@ -2728,7 +2851,8 @@
       default_value: "Length::Fixed()",
       converter: "ConvertLength",
       computed_style_custom_functions: ["setter"],
-      typedom_types: ["Keyword", "Length", "Percentage"]
+      typedom_types: ["Keyword", "Length", "Percentage"],
+      valid_for_first_letter: true,
     },
     {
       name: "paint-order",
@@ -3327,6 +3451,7 @@
       typedom_types: ["Keyword"],
       default_value: "none",
       name_for_methods: "TextCombine",
+      valid_for_marker: true,
     },
     {
       name: "text-decoration-color",
@@ -3342,6 +3467,8 @@
       converter: "ConvertStyleColor",
       style_builder_template: "color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "text-decoration-line",
@@ -3354,6 +3481,8 @@
       name_for_methods: "TextDecoration",
       type_name: "TextDecoration",
       converter: "ConvertFlags<TextDecoration>",
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "text-decoration-skip-ink",
@@ -3364,6 +3493,8 @@
       keywords: ["none", "auto"],
       typedom_types: ["Keyword"],
       default_value: "auto",
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "text-decoration-style",
@@ -3373,6 +3504,8 @@
       keywords: ["solid", "double", "dotted", "dashed", "wavy"],
       typedom_types: ["Keyword"],
       default_value: "solid",
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "text-indent",
@@ -3397,7 +3530,8 @@
       default_value: "auto",
       getter: "GetTextJustify",
       type_name: "TextJustify",
-      typedom_types: ["Keyword"]
+      typedom_types: ["Keyword"],
+      valid_for_first_letter: true,
     },
     {
       name: "text-overflow",
@@ -3423,6 +3557,8 @@
       keywords: ["none"],
       typedom_types: ["Keyword"],
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "text-size-adjust",
@@ -3448,6 +3584,7 @@
       keywords: ["capitalize", "uppercase", "lowercase", "none"],
       typedom_types: ["Keyword"],
       default_value: "none",
+      valid_for_first_letter: true,
     },
     {
       name: "text-underline-position",
@@ -3462,6 +3599,7 @@
       converter: "ConvertTextUnderlinePosition",
       keywords: ["auto", "under", "left", "right"],
       typedom_types: ["Keyword"],
+      valid_for_first_letter: true,
     },
     {
       name: "top",
@@ -3591,6 +3729,7 @@
       typedom_types: ["Keyword"],
       default_value: "normal",
       type_name: "UnicodeBidi",
+      valid_for_marker: true,
     },
     {
       name: "vector-effect",
@@ -3606,6 +3745,7 @@
       style_builder_custom_functions: ["inherit", "value"],
       typedom_types: ["Keyword", "Length", "Percentage"],
       keywords: ["baseline", "sub", "super", "text-top", "text-bottom", "middle"],
+      valid_for_first_letter: true,
     },
     {
       name: "visibility",
@@ -3617,6 +3757,8 @@
       keywords: ["visible", "hidden", "collapse"],
       typedom_types: ["Keyword"],
       default_value: "visible",
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "x",
@@ -3665,13 +3807,15 @@
       name_for_methods: "HorizontalBorderSpacing",
       type_name: "short",
       converter: "ConvertComputedLength<short>",
+      valid_for_first_letter: true,
     },
     {
       name: "-webkit-border-image",
       property_methods: ["ParseSingleValue", "CSSValueFromComputedStyleInternal"],
       style_builder_custom_functions: ["value"],
       slots: ["border-image-outset", "border-image-repeat", "border-image-slice",
-              "border-image-source", "border-image-width"]
+              "border-image-source", "border-image-width"],
+      valid_for_first_letter: true,
     },
     {
       name: "-webkit-border-vertical-spacing",
@@ -3684,6 +3828,7 @@
       name_for_methods: "VerticalBorderSpacing",
       type_name: "short",
       converter: "ConvertComputedLength<short>",
+      valid_for_first_letter: true,
     },
     // For valid values of box-align see
     // http://www.w3.org/TR/2009/WD-css3-flexbox-20090723/#alignment
@@ -4221,6 +4366,8 @@
       ],
       typedom_types: ["Keyword"],
       default_value: "normal",
+      valid_for_cue: true,
+      valid_for_marker: true,
     },
     {
       name: "widows",
@@ -4274,7 +4421,8 @@
       converter: "ConvertSpacing",
       keywords: ["normal"],
       typedom_types: ["normal"],
-      typedom_types: ["Keyword", "Length"]
+      typedom_types: ["Keyword", "Length"],
+      valid_for_first_letter: true,
     },
     {
       name: "z-index",
@@ -4360,7 +4508,8 @@
         physical_group: "margin",
       },
       typedom_types: ["Length", "Percentage"],
-      keywords: ["auto"]
+      keywords: ["auto"],
+      valid_for_first_letter: true,
     },
     {
       name: "margin-inline-end",
@@ -4371,7 +4520,8 @@
         physical_group: "margin",
       },
       typedom_types: ["Length", "Percentage"],
-      keywords: ["auto"]
+      keywords: ["auto"],
+      valid_for_first_letter: true,
     },
     {
       name: "margin-block-start",
@@ -4382,7 +4532,8 @@
         physical_group: "margin",
       },
       typedom_types: ["Length", "Percentage"],
-      keywords: ["auto"]
+      keywords: ["auto"],
+      valid_for_first_letter: true,
     },
     {
       name: "margin-block-end",
@@ -4393,7 +4544,8 @@
         physical_group: "margin",
       },
       typedom_types: ["Length", "Percentage"],
-      keywords: ["auto"]
+      keywords: ["auto"],
+      valid_for_first_letter: true,
     },
     {
       name: "padding-inline-start",
@@ -4442,6 +4594,7 @@
         resolver: "inline-start",
         physical_group: "border-width",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-inline-start-style",
@@ -4449,6 +4602,7 @@
         resolver: "inline-start",
         physical_group: "border-style",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-inline-start-color",
@@ -4457,6 +4611,7 @@
         resolver: "inline-start",
         physical_group: "border-color",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-inline-end-width",
@@ -4465,6 +4620,7 @@
         resolver: "inline-end",
         physical_group: "border-width",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-inline-end-style",
@@ -4472,6 +4628,7 @@
         resolver: "inline-end",
         physical_group: "border-style",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-inline-end-color",
@@ -4480,6 +4637,7 @@
         resolver: "inline-end",
         physical_group: "border-color",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-block-start-width",
@@ -4488,6 +4646,7 @@
         resolver: "block-start",
         physical_group: "border-width",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-block-start-style",
@@ -4495,6 +4654,7 @@
         resolver: "block-start",
         physical_group: "border-style",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-block-start-color",
@@ -4503,6 +4663,7 @@
         resolver: "block-start",
         physical_group: "border-color",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-block-end-width",
@@ -4511,6 +4672,7 @@
         resolver: "block-end",
         physical_group: "border-width",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-block-end-style",
@@ -4518,6 +4680,7 @@
         resolver: "block-end",
         physical_group: "border-style",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "border-block-end-color",
@@ -4526,6 +4689,7 @@
         resolver: "block-end",
         physical_group: "border-color",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "inset-inline-start",
@@ -5331,6 +5495,9 @@
       style_builder_custom_functions: ["initial", "inherit", "value"],
       priority: "High",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
+      valid_for_cue: true,
+      valid_for_marker: true,
     },
     {
       name: "-internal-visited-caret-color",
@@ -5379,6 +5546,8 @@
         initial_color: "ComputedStyleInitialValues::InitialBackgroundColor",
       },
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "-internal-visited-border-left-color",
@@ -5394,6 +5563,7 @@
       converter: "ConvertStyleColor",
       style_builder_template: "visited_color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-visited-border-right-color",
@@ -5409,6 +5579,7 @@
       converter: "ConvertStyleColor",
       style_builder_template: "visited_color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-visited-border-top-color",
@@ -5424,6 +5595,7 @@
       converter: "ConvertStyleColor",
       style_builder_template: "visited_color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-visited-border-bottom-color",
@@ -5439,6 +5611,7 @@
       converter: "ConvertStyleColor",
       style_builder_template: "visited_color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-visited-border-inline-start-color",
@@ -5448,6 +5621,7 @@
         resolver: "inline-start",
         physical_group: "visited-border-color",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-visited-border-inline-end-color",
@@ -5457,6 +5631,7 @@
         resolver: "inline-end",
         physical_group: "visited-border-color",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-visited-border-block-start-color",
@@ -5466,6 +5641,7 @@
         resolver: "block-start",
         physical_group: "visited-border-color",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-visited-border-block-end-color",
@@ -5475,6 +5651,7 @@
         resolver: "block-end",
         physical_group: "visited-border-color",
       },
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-visited-fill",
@@ -5501,6 +5678,7 @@
       converter: "ConvertStyleColor",
       style_builder_template: "visited_color",
       affected_by_forced_colors: true,
+      valid_for_cue: true,
     },
     {
       name: "-internal-visited-stroke",
@@ -5527,6 +5705,8 @@
       converter: "ConvertStyleColor",
       style_builder_template: "visited_color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "-internal-visited-text-emphasis-color",
@@ -5602,6 +5782,8 @@
         fill_type: "Attachment",
       },
       ua_property_for: "background-attachment",
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "-internal-ua-background-blend-mode",
@@ -5611,6 +5793,7 @@
         fill_type_getter: "GetBlendMode",
       },
       ua_property_for: "background-blend-mode",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-background-clip",
@@ -5619,6 +5802,8 @@
         fill_type: "Clip",
       },
       ua_property_for: "background-clip",
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "-internal-ua-background-color",
@@ -5630,6 +5815,8 @@
       },
       ua_property_for: "background-color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "-internal-ua-background-image",
@@ -5639,6 +5826,8 @@
         fill_type_getter: "GetImage",
       },
       ua_property_for: "background-image",
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "-internal-ua-background-origin",
@@ -5647,6 +5836,8 @@
         fill_type: "Origin",
       },
       ua_property_for: "background-origin",
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "-internal-ua-background-position-x",
@@ -5655,6 +5846,8 @@
         fill_type: "PositionX",
       },
       ua_property_for: "background-position-x",
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "-internal-ua-background-position-y",
@@ -5663,6 +5856,8 @@
         fill_type: "PositionY",
       },
       ua_property_for: "background-position-y",
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "-internal-ua-background-size",
@@ -5671,6 +5866,8 @@
         fill_type: "Size",
       },
       ua_property_for: "background-size",
+      valid_for_first_letter: true,
+      valid_for_cue: true,
     },
     {
       name: "-internal-ua-border-bottom-color",
@@ -5679,6 +5876,7 @@
       style_builder_template: "color",
       ua_property_for: "border-bottom-color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-left-color",
@@ -5687,6 +5885,7 @@
       style_builder_template: "color",
       ua_property_for: "border-left-color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-right-color",
@@ -5695,6 +5894,7 @@
       style_builder_template: "color",
       ua_property_for: "border-right-color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-top-color",
@@ -5703,78 +5903,91 @@
       style_builder_template: "color",
       ua_property_for: "border-top-color",
       affected_by_forced_colors: true,
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-bottom-style",
       name_for_methods: "BorderBottomStyle",
       type_name: "EBorderStyle",
       ua_property_for: "border-bottom-style",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-left-style",
       name_for_methods: "BorderLeftStyle",
       type_name: "EBorderStyle",
       ua_property_for: "border-left-style",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-right-style",
       name_for_methods: "BorderRightStyle",
       type_name: "EBorderStyle",
       ua_property_for: "border-right-style",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-top-style",
       name_for_methods: "BorderTopStyle",
       type_name: "EBorderStyle",
       ua_property_for: "border-top-style",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-bottom-width",
       name_for_methods: "BorderBottomWidth",
       converter: "ConvertBorderWidth",
       ua_property_for: "border-bottom-width",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-left-width",
       name_for_methods: "BorderLeftWidth",
       converter: "ConvertBorderWidth",
       ua_property_for: "border-left-width",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-right-width",
       name_for_methods: "BorderRightWidth",
       converter: "ConvertBorderWidth",
       ua_property_for: "border-right-width",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-top-width",
       name_for_methods: "BorderTopWidth",
       converter: "ConvertBorderWidth",
       ua_property_for: "border-top-width",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-top-left-radius",
       name_for_methods: "BorderTopLeftRadius",
       converter: "ConvertRadius",
       ua_property_for: "border-top-left-radius",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-top-right-radius",
       name_for_methods: "BorderTopRightRadius",
       converter: "ConvertRadius",
       ua_property_for: "border-top-right-radius",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-bottom-left-radius",
       name_for_methods: "BorderBottomLeftRadius",
       converter: "ConvertRadius",
       ua_property_for: "border-bottom-left-radius",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-bottom-right-radius",
       name_for_methods: "BorderBottomRightRadius",
       converter: "ConvertRadius",
       ua_property_for: "border-bottom-right-radius",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-image-outset",
@@ -5783,6 +5996,7 @@
         modifier_type: "Outset",
       },
       ua_property_for: "border-image-outset",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-image-repeat",
@@ -5791,6 +6005,7 @@
         modifier_type: "Repeat",
       },
       ua_property_for: "border-image-repeat",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-image-slice",
@@ -5799,6 +6014,7 @@
         modifier_type: "Slice",
       },
       ua_property_for: "border-image-slice",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-image-source",
@@ -5807,6 +6023,7 @@
         modifier_type: "Source",
       },
       ua_property_for: "border-image-source",
+      valid_for_first_letter: true,
     },
     {
       name: "-internal-ua-border-image-width",
@@ -5815,6 +6032,7 @@
         modifier_type: "Width",
       },
       ua_property_for: "border-image-width",
+      valid_for_first_letter: true,
     },
 
     // Aliases; these map to the same CSSPropertyID
@@ -6105,4 +6323,4 @@
       alias_for: "overflow-wrap",
     },
   ],
-}
+}
\ No newline at end of file
diff --git a/third_party/blink/renderer/core/css/parser/css_property_parser_helpers.cc b/third_party/blink/renderer/core/css/parser/css_property_parser_helpers.cc
index e5ec350..051b3073 100644
--- a/third_party/blink/renderer/core/css/parser/css_property_parser_helpers.cc
+++ b/third_party/blink/renderer/core/css/parser/css_property_parser_helpers.cc
@@ -31,6 +31,7 @@
 #include "third_party/blink/renderer/core/css/style_color.h"
 #include "third_party/blink/renderer/core/frame/web_feature.h"
 #include "third_party/blink/renderer/core/style_property_shorthand.h"
+#include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
@@ -1601,7 +1602,7 @@
     return nullptr;
   }
 
-  cssvalue::CSSGradientValue* result = cssvalue::CSSConicGradientValue::Create(
+  auto* result = MakeGarbageCollected<cssvalue::CSSConicGradientValue>(
       center_x, center_y, from_angle, repeating);
   return ConsumeGradientColorStops(args, context, result,
                                    ConsumeGradientAngleOrPercent)
diff --git a/third_party/blink/renderer/core/css/properties/css_property.h b/third_party/blink/renderer/core/css/properties/css_property.h
index 33eec78..e626fe8 100644
--- a/third_party/blink/renderer/core/css/properties/css_property.h
+++ b/third_party/blink/renderer/core/css/properties/css_property.h
@@ -53,6 +53,9 @@
   bool IsAffectedByForcedColors() const {
     return flags_ & kIsAffectedByForcedColors;
   }
+  bool IsValidForFirstLetter() const { return flags_ & kValidForFirstLetter; }
+  bool IsValidForCue() const { return flags_ & kValidForCue; }
+  bool IsValidForMarker() const { return flags_ & kValidForMarker; }
 
   bool IsRepeated() const { return repetition_separator_ != '\0'; }
   char RepetitionSeparator() const { return repetition_separator_; }
@@ -118,6 +121,12 @@
     // Animation properties have this flag set. (I.e. longhands of the
     // 'animation' and 'transition' shorthands).
     kAnimation = 1 << 11,
+    // https://drafts.csswg.org/css-pseudo-4/#first-letter-styling
+    kValidForFirstLetter = 1 << 12,
+    // https://w3c.github.io/webvtt/#the-cue-pseudo-element
+    kValidForCue = 1 << 13,
+    // https://drafts.csswg.org/css-pseudo-4/#marker-pseudo
+    kValidForMarker = 1 << 14,
   };
 
   constexpr CSSProperty(CSSPropertyID property_id,
diff --git a/third_party/blink/renderer/core/css/properties/longhands/variable.h b/third_party/blink/renderer/core/css/properties/longhands/variable.h
index fd5cd2e..db5c776 100644
--- a/third_party/blink/renderer/core/css/properties/longhands/variable.h
+++ b/third_party/blink/renderer/core/css/properties/longhands/variable.h
@@ -35,7 +35,8 @@
  protected:
   constexpr Variable(bool inherited)
       : Longhand(CSSPropertyID::kVariable,
-                 kProperty | (inherited ? kInherited : 0),
+                 kProperty | (inherited ? kInherited : 0) |
+                     kValidForFirstLetter | kValidForMarker,
                  '\0') {}
 };
 
diff --git a/third_party/blink/renderer/core/css/resolver/style_adjuster.cc b/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
index 32ede28..0621f39 100644
--- a/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
@@ -604,8 +604,12 @@
 
   if (should_be_invisible) {
     // Add containment to style if we're invisible.
-    auto contain =
-        style.Contain() | kContainsStyle | kContainsLayout | kContainsSize;
+    auto contain = style.Contain() | kContainsStyle | kContainsLayout;
+    // If we haven't activated, then we should also contain size. This means
+    // that if we are rendering the element's subtree (i.e. it is either
+    // unlocked or activated), then we do not have size containment.
+    if (!context->IsActivated())
+      contain |= kContainsSize;
     style.SetContain(contain);
 
     // If we're unlocked and unactivated, then we should lock the context. Note
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
index 52edde4..14b5ab4 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -1355,210 +1355,6 @@
   }
 }
 
-static inline bool IsValidCueStyleProperty(CSSPropertyID id) {
-  switch (id) {
-    case CSSPropertyID::kBackground:
-    case CSSPropertyID::kBackgroundAttachment:
-    case CSSPropertyID::kBackgroundClip:
-    case CSSPropertyID::kBackgroundColor:
-    case CSSPropertyID::kBackgroundImage:
-    case CSSPropertyID::kBackgroundOrigin:
-    case CSSPropertyID::kBackgroundPosition:
-    case CSSPropertyID::kBackgroundPositionX:
-    case CSSPropertyID::kBackgroundPositionY:
-    case CSSPropertyID::kBackgroundRepeat:
-    case CSSPropertyID::kBackgroundRepeatX:
-    case CSSPropertyID::kBackgroundRepeatY:
-    case CSSPropertyID::kBackgroundSize:
-    case CSSPropertyID::kColor:
-    case CSSPropertyID::kFont:
-    case CSSPropertyID::kFontFamily:
-    case CSSPropertyID::kFontSize:
-    case CSSPropertyID::kFontStretch:
-    case CSSPropertyID::kFontStyle:
-    case CSSPropertyID::kFontVariant:
-    case CSSPropertyID::kFontWeight:
-    case CSSPropertyID::kLineHeight:
-    case CSSPropertyID::kOpacity:
-    case CSSPropertyID::kOutline:
-    case CSSPropertyID::kOutlineColor:
-    case CSSPropertyID::kOutlineOffset:
-    case CSSPropertyID::kOutlineStyle:
-    case CSSPropertyID::kOutlineWidth:
-    case CSSPropertyID::kVisibility:
-    case CSSPropertyID::kWhiteSpace:
-    // FIXME: 'text-decoration' shorthand to be handled when available.
-    // See https://chromiumcodereview.appspot.com/19516002 for details.
-    case CSSPropertyID::kTextDecoration:
-    case CSSPropertyID::kTextShadow:
-    case CSSPropertyID::kBorderStyle:
-      return true;
-    case CSSPropertyID::kTextDecorationLine:
-    case CSSPropertyID::kTextDecorationStyle:
-    case CSSPropertyID::kTextDecorationColor:
-    case CSSPropertyID::kTextDecorationSkipInk:
-      return true;
-    case CSSPropertyID::kFontVariationSettings:
-      return true;
-    default:
-      break;
-  }
-  return false;
-}
-
-static inline bool IsValidFirstLetterStyleProperty(CSSPropertyID id) {
-  switch (id) {
-    // Valid ::first-letter properties listed in spec:
-    // https://drafts.csswg.org/css-pseudo-4/#first-letter-styling
-    case CSSPropertyID::kBackgroundAttachment:
-    case CSSPropertyID::kBackgroundBlendMode:
-    case CSSPropertyID::kBackgroundClip:
-    case CSSPropertyID::kBackgroundColor:
-    case CSSPropertyID::kBackgroundImage:
-    case CSSPropertyID::kBackgroundOrigin:
-    case CSSPropertyID::kBackgroundPosition:
-    case CSSPropertyID::kBackgroundPositionX:
-    case CSSPropertyID::kBackgroundPositionY:
-    case CSSPropertyID::kBackgroundRepeat:
-    case CSSPropertyID::kBackgroundRepeatX:
-    case CSSPropertyID::kBackgroundRepeatY:
-    case CSSPropertyID::kBackgroundSize:
-    case CSSPropertyID::kBorderBlockEnd:
-    case CSSPropertyID::kBorderBlockEndColor:
-    case CSSPropertyID::kBorderBlockEndStyle:
-    case CSSPropertyID::kBorderBlockEndWidth:
-    case CSSPropertyID::kBorderBlockStart:
-    case CSSPropertyID::kBorderBlockStartColor:
-    case CSSPropertyID::kBorderBlockStartStyle:
-    case CSSPropertyID::kBorderBlockStartWidth:
-    case CSSPropertyID::kBorderBottomColor:
-    case CSSPropertyID::kBorderBottomLeftRadius:
-    case CSSPropertyID::kBorderBottomRightRadius:
-    case CSSPropertyID::kBorderBottomStyle:
-    case CSSPropertyID::kBorderBottomWidth:
-    case CSSPropertyID::kBorderImageOutset:
-    case CSSPropertyID::kBorderImageRepeat:
-    case CSSPropertyID::kBorderImageSlice:
-    case CSSPropertyID::kBorderImageSource:
-    case CSSPropertyID::kBorderImageWidth:
-    case CSSPropertyID::kBorderInlineEnd:
-    case CSSPropertyID::kBorderInlineEndColor:
-    case CSSPropertyID::kBorderInlineEndStyle:
-    case CSSPropertyID::kBorderInlineEndWidth:
-    case CSSPropertyID::kBorderInlineStart:
-    case CSSPropertyID::kBorderInlineStartColor:
-    case CSSPropertyID::kBorderInlineStartStyle:
-    case CSSPropertyID::kBorderInlineStartWidth:
-    case CSSPropertyID::kBorderLeftColor:
-    case CSSPropertyID::kBorderLeftStyle:
-    case CSSPropertyID::kBorderLeftWidth:
-    case CSSPropertyID::kBorderRightColor:
-    case CSSPropertyID::kBorderRightStyle:
-    case CSSPropertyID::kBorderRightWidth:
-    case CSSPropertyID::kBorderTopColor:
-    case CSSPropertyID::kBorderTopLeftRadius:
-    case CSSPropertyID::kBorderTopRightRadius:
-    case CSSPropertyID::kBorderTopStyle:
-    case CSSPropertyID::kBorderTopWidth:
-    case CSSPropertyID::kBoxShadow:
-    case CSSPropertyID::kColor:
-    case CSSPropertyID::kFloat:
-    case CSSPropertyID::kFontFamily:
-    case CSSPropertyID::kFontFeatureSettings:
-    case CSSPropertyID::kFontKerning:
-    case CSSPropertyID::kFontOpticalSizing:
-    case CSSPropertyID::kFontSize:
-    case CSSPropertyID::kFontSizeAdjust:
-    case CSSPropertyID::kFontStretch:
-    case CSSPropertyID::kFontStyle:
-    case CSSPropertyID::kFontVariant:
-    case CSSPropertyID::kFontVariantCaps:
-    case CSSPropertyID::kFontVariantLigatures:
-    case CSSPropertyID::kFontVariantNumeric:
-    case CSSPropertyID::kFontVariantEastAsian:
-    case CSSPropertyID::kFontVariationSettings:
-    case CSSPropertyID::kFontWeight:
-    case CSSPropertyID::kLetterSpacing:
-    case CSSPropertyID::kLineHeight:
-    case CSSPropertyID::kMarginBlockEnd:
-    case CSSPropertyID::kMarginBlockStart:
-    case CSSPropertyID::kMarginBottom:
-    case CSSPropertyID::kMarginInlineEnd:
-    case CSSPropertyID::kMarginInlineStart:
-    case CSSPropertyID::kMarginLeft:
-    case CSSPropertyID::kMarginRight:
-    case CSSPropertyID::kMarginTop:
-    case CSSPropertyID::kOpacity:
-    case CSSPropertyID::kPaddingBottom:
-    case CSSPropertyID::kPaddingLeft:
-    case CSSPropertyID::kPaddingRight:
-    case CSSPropertyID::kPaddingTop:
-    case CSSPropertyID::kTextDecorationColor:
-    case CSSPropertyID::kTextDecorationLine:
-    case CSSPropertyID::kTextDecorationStyle:
-    case CSSPropertyID::kTextDecorationSkipInk:
-    case CSSPropertyID::kTextJustify:
-    case CSSPropertyID::kTextShadow:
-    case CSSPropertyID::kTextTransform:
-    case CSSPropertyID::kTextUnderlinePosition:
-    case CSSPropertyID::kVerticalAlign:
-    case CSSPropertyID::kWebkitBorderHorizontalSpacing:
-    case CSSPropertyID::kWebkitBorderImage:
-    case CSSPropertyID::kWebkitBorderVerticalSpacing:
-    case CSSPropertyID::kWebkitFontSmoothing:
-    case CSSPropertyID::kWordSpacing:
-      return true;
-
-    // Not directly specified in spec, but variables should be supported nearly
-    // anywhere.
-    case CSSPropertyID::kVariable:
-    // Properties that we currently support outside of spec.
-    case CSSPropertyID::kVisibility:
-      return true;
-
-    default:
-      return false;
-  }
-}
-
-static inline bool IsValidMarkerStyleProperty(CSSPropertyID id) {
-  switch (id) {
-    // Valid ::marker properties listed in spec:
-    // https://drafts.csswg.org/css-pseudo-4/#marker-pseudo
-    case CSSPropertyID::kColor:
-    case CSSPropertyID::kContent:
-    case CSSPropertyID::kDirection:
-    case CSSPropertyID::kFont:
-    case CSSPropertyID::kFontFamily:
-    case CSSPropertyID::kFontFeatureSettings:
-    case CSSPropertyID::kFontKerning:
-    case CSSPropertyID::kFontOpticalSizing:
-    case CSSPropertyID::kFontSize:
-    case CSSPropertyID::kFontSizeAdjust:
-    case CSSPropertyID::kFontStretch:
-    case CSSPropertyID::kFontStyle:
-    case CSSPropertyID::kFontVariant:
-    case CSSPropertyID::kFontVariantCaps:
-    case CSSPropertyID::kFontVariantEastAsian:
-    case CSSPropertyID::kFontVariantLigatures:
-    case CSSPropertyID::kFontVariantNumeric:
-    case CSSPropertyID::kFontVariationSettings:
-    case CSSPropertyID::kFontWeight:
-    case CSSPropertyID::kTextCombineUpright:
-    case CSSPropertyID::kUnicodeBidi:
-    case CSSPropertyID::kWhiteSpace:
-      return true;
-
-    // Not directly specified in spec, but variables should be supported nearly
-    // anywhere.
-    case CSSPropertyID::kVariable:
-      return true;
-
-    default:
-      return false;
-  }
-}
-
 static bool PassesPropertyFilter(ValidPropertyFilter valid_property_filter,
                                  CSSPropertyID property,
                                  const Document& document) {
@@ -1566,11 +1362,11 @@
     case ValidPropertyFilter::kNoFilter:
       return true;
     case ValidPropertyFilter::kFirstLetter:
-      return IsValidFirstLetterStyleProperty(property);
+      return CSSProperty::Get(property).IsValidForFirstLetter();
     case ValidPropertyFilter::kCue:
-      return IsValidCueStyleProperty(property);
+      return CSSProperty::Get(property).IsValidForCue();
     case ValidPropertyFilter::kMarker:
-      return IsValidMarkerStyleProperty(property);
+      return CSSProperty::Get(property).IsValidForMarker();
   }
   NOTREACHED();
   return true;
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_context.cc b/third_party/blink/renderer/core/display_lock/display_lock_context.cc
index 73ca0e9..8d1f32da8 100644
--- a/third_party/blink/renderer/core/display_lock/display_lock_context.cc
+++ b/third_party/blink/renderer/core/display_lock/display_lock_context.cc
@@ -120,8 +120,14 @@
     return;
   }
 
+  // We require observation if we are viewport-activatable, and one of the
+  // following is true:
+  // 1. We're locked, which means that we need to know when to unlock the
+  //    element
+  // 2. We're activated (in the CSS version), which means that we need to know
+  //    when we stop intersecting the viewport so that we can re-lock.
   bool should_observe =
-      IsLocked() &&
+      (IsLocked() || (!IsAttributeVersion(this) && IsActivated())) &&
       IsActivatable(DisplayLockActivationReason::kViewportIntersection) &&
       ConnectedToView();
   if (should_observe && !is_observed_) {
@@ -414,7 +420,16 @@
                 weak_factory_.GetWeakPtr(), WrapPersistent(activated_element)));
 
   StartCommit();
-  is_activated_ = true;
+
+  if (!IsAttributeVersion(this)) {
+    css_is_activated_ = true;
+    // Since size containment depends on the activatability state, we should
+    // invalidate the style for this element, so that the style adjuster can
+    // properly remove the containment.
+    element_->SetNeedsStyleRecalc(
+        kLocalStyleChange,
+        StyleChangeReasonForTracing::Create(style_change_reason::kDisplayLock));
+  }
 
   // Since setting the attribute might trigger a commit if we are still locked,
   // we set it after we start the commit.
@@ -423,11 +438,12 @@
 }
 
 bool DisplayLockContext::IsActivated() const {
-  return is_activated_;
+  DCHECK(!IsAttributeVersion(this));
+  return css_is_activated_;
 }
 
 void DisplayLockContext::ClearActivated() {
-  is_activated_ = false;
+  css_is_activated_ = false;
 }
 
 bool DisplayLockContext::ShouldCommitForActivation(
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_context.h b/third_party/blink/renderer/core/display_lock/display_lock_context.h
index 684f696..2eb28949 100644
--- a/third_party/blink/renderer/core/display_lock/display_lock_context.h
+++ b/third_party/blink/renderer/core/display_lock/display_lock_context.h
@@ -279,7 +279,7 @@
   // Note that this returns true if there is no context at all, so in order to
   // check whether this is strictly an attribute version, as opposed to a null
   // context, one needs to compare context with nullptr first.
-  static bool IsAttributeVersion(DisplayLockContext* context) {
+  static bool IsAttributeVersion(const DisplayLockContext* context) {
     return !context ||
            context->GetMethod() == DisplayLockContextCreateMethod::kAttribute;
   }
@@ -434,7 +434,9 @@
   uint16_t activatable_mask_ =
       static_cast<uint16_t>(DisplayLockActivationReason::kAny);
 
-  bool is_activated_ = false;
+  // State that tracks whether we've been activated. Note that this is only
+  // valid for CSS version of render-subtree.
+  bool css_is_activated_ = false;
 
   DisplayLockContextCreateMethod method_ =
       DisplayLockContextCreateMethod::kUnknown;
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index cfdcf697..7ea8d3e 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -8536,12 +8536,24 @@
 void Document::ProcessDisplayLockActivationObservation(
     const HeapVector<Member<IntersectionObserverEntry>>& entries) {
   for (auto& entry : entries) {
+    auto* context = entry->target()->GetDisplayLockContext();
+    DCHECK(context);
     if (entry->isIntersecting()) {
-      auto* context = entry->target()->GetDisplayLockContext();
-      DCHECK(context);
+      if (!context->IsLocked())
+        continue;
       DCHECK(context->ShouldCommitForActivation(
           DisplayLockActivationReason::kViewportIntersection));
       context->CommitForActivationWithSignal(entry->target());
+    } else if (!DisplayLockContext::IsAttributeVersion(context)) {
+      // In a CSS version, if we're not visible, but are observing viewport
+      // intersections, it means that we're either locked (in which case we
+      // should remain locked), or we've been activated (in which case we should
+      // relock).
+      DCHECK(context->IsLocked() || context->IsActivated());
+      if (context->IsLocked())
+        continue;
+      context->ClearActivated();
+      context->StartAcquire();
     }
   }
 }
diff --git a/third_party/blink/renderer/core/loader/threadable_loader.cc b/third_party/blink/renderer/core/loader/threadable_loader.cc
index c760dc2..f0ef7382 100644
--- a/third_party/blink/renderer/core/loader/threadable_loader.cc
+++ b/third_party/blink/renderer/core/loader/threadable_loader.cc
@@ -570,8 +570,7 @@
 
     if (cors_flag_) {
       if (const auto error_status = cors::CheckAccess(
-              original_url, redirect_response.HttpStatusCode(),
-              redirect_response.HttpHeaderFields(),
+              original_url, redirect_response.HttpHeaderFields(),
               new_request.GetCredentialsMode(), *GetSecurityOrigin())) {
         DispatchDidFail(ResourceError(original_url, *error_status));
         return false;
@@ -751,14 +750,6 @@
     return;
   }
 
-  base::Optional<network::mojom::CorsError> preflight_error =
-      cors::CheckPreflight(response.HttpStatusCode());
-  if (preflight_error) {
-    HandlePreflightFailure(response.CurrentRequestUrl(),
-                           network::CorsErrorStatus(*preflight_error));
-    return;
-  }
-
   base::Optional<network::CorsErrorStatus> error_status;
   if (actual_request_.IsExternalRequest()) {
     error_status = cors::CheckExternalPreflight(response.HttpHeaderFields());
@@ -860,8 +851,8 @@
 
   if (cors_flag_) {
     base::Optional<network::CorsErrorStatus> access_error = cors::CheckAccess(
-        response.CurrentRequestUrl(), response.HttpStatusCode(),
-        response.HttpHeaderFields(), credentials_mode_, *GetSecurityOrigin());
+        response.CurrentRequestUrl(), response.HttpHeaderFields(),
+        credentials_mode_, *GetSecurityOrigin());
     if (access_error) {
       ReportResponseReceived(resource->InspectorId(), response);
       DispatchDidFail(
diff --git a/third_party/blink/renderer/core/loader/web_associated_url_loader_impl_test.cc b/third_party/blink/renderer/core/loader/web_associated_url_loader_impl_test.cc
index 2fd0e74..551498e 100644
--- a/third_party/blink/renderer/core/loader/web_associated_url_loader_impl_test.cc
+++ b/third_party/blink/renderer/core/loader/web_associated_url_loader_impl_test.cc
@@ -387,36 +387,6 @@
   EXPECT_FALSE(did_receive_response_);
 }
 
-// Test an unsuccessful cross-origin load using CORS.
-TEST_F(WebAssociatedURLLoaderTest,
-       CrossOriginWithAccessControlFailureBadStatusCode) {
-  // This is cross-origin since the frame was loaded from www.test.com.
-  KURL url =
-      ToKURL("http://www.other.com/CrossOriginWithAccessControlFailure.html");
-  WebURLRequest request(url);
-  request.SetMode(network::mojom::RequestMode::kCors);
-  request.SetCredentialsMode(network::mojom::CredentialsMode::kOmit);
-
-  expected_response_ = WebURLResponse();
-  expected_response_.SetMimeType("text/html");
-  expected_response_.SetHttpStatusCode(0);
-  expected_response_.AddHttpHeaderField("access-control-allow-origin", "*");
-  RegisterMockedURLLoadWithCustomResponse(url, expected_response_,
-                                          frame_file_path_);
-
-  WebAssociatedURLLoaderOptions options;
-  expected_loader_ = CreateAssociatedURLLoader(options);
-  EXPECT_TRUE(expected_loader_);
-  expected_loader_->LoadAsynchronously(request, this);
-
-  // Failure should not be reported synchronously.
-  EXPECT_FALSE(did_fail_);
-  // The loader needs to receive the response, before doing the CORS check.
-  ServeRequests();
-  EXPECT_TRUE(did_fail_);
-  EXPECT_FALSE(did_receive_response_);
-}
-
 // Test a same-origin URL redirect and load.
 TEST_F(WebAssociatedURLLoaderTest, RedirectSuccess) {
   KURL url = ToKURL("http://www.test.com/RedirectSuccess.html");
diff --git a/third_party/blink/renderer/core/paint/DEPS b/third_party/blink/renderer/core/paint/DEPS
index 9850ce0..323b7c0 100644
--- a/third_party/blink/renderer/core/paint/DEPS
+++ b/third_party/blink/renderer/core/paint/DEPS
@@ -7,14 +7,14 @@
 ]
 
 specific_include_rules = {
-  "(theme_painter|fallback_theme)\.cc": [
+  "(theme_painter|fallback_theme|object_painter_base)\.cc": [
     "+ui/native_theme/native_theme.h",
     "+ui/native_theme/native_theme_base.h",
   ],
   ".*test\.cc": [
     "+base/test/trace_event_analyzer.h",
   ],
-  "(paint_layer_scrollable_area|theme_painter|theme_painter_default)\.cc": [
+  "(object_painter_base|paint_layer_scrollable_area|theme_painter|theme_painter_default)\.cc": [
     "+ui/base/ui_base_features.h",
   ],
 }
diff --git a/third_party/blink/renderer/core/paint/box_painter_base.cc b/third_party/blink/renderer/core/paint/box_painter_base.cc
index 6abea27..93cafae 100644
--- a/third_party/blink/renderer/core/paint/box_painter_base.cc
+++ b/third_party/blink/renderer/core/paint/box_painter_base.cc
@@ -376,13 +376,11 @@
 FloatRect CorrectSrcRectForImageOrientation(BitmapImage* image,
                                             FloatRect original_rect) {
   ImageOrientation orientation = image->CurrentFrameOrientation();
-  if (orientation != kDefaultImageOrientation) {
-    AffineTransform forward_map =
-        orientation.TransformFromDefault(original_rect.Size());
-    AffineTransform inverse_map = forward_map.Inverse();
-    return inverse_map.MapRect(original_rect);
-  }
-  return original_rect;
+  DCHECK(orientation != kDefaultImageOrientation);
+  AffineTransform forward_map =
+      orientation.TransformFromDefault(original_rect.Size());
+  AffineTransform inverse_map = forward_map.Inverse();
+  return inverse_map.MapRect(original_rect);
 }
 
 // The unsnapped_subset_size should be the target painting area implied by the
@@ -441,7 +439,7 @@
     // rect to be in the unrotated image space, but we have computed it here in
     // the rotated space in order to position and size the background. Undo the
     // src rect rotation if necessaary.
-    if (respect_orientation && image->IsBitmapImage()) {
+    if (respect_orientation && !image->HasDefaultOrientation()) {
       visible_src_rect = CorrectSrcRectForImageOrientation(ToBitmapImage(image),
                                                            visible_src_rect);
     }
@@ -559,6 +557,7 @@
       !has_intrinsic_size
           ? image_tile.Size()
           : FloatSize(image->Size(info.respect_image_orientation));
+
   // Subset computation needs the same location as was used with
   // ComputePhaseForBackground above, but needs the unsnapped destination
   // size to correctly calculate sprite subsets in the presence of zoom. But if
@@ -584,7 +583,7 @@
   // to be in the unrotated image space, but we have computed it here in the
   // rotated space in order to position and size the background. Undo the src
   // rect rotation if necessaary.
-  if (info.respect_image_orientation && image->IsBitmapImage()) {
+  if (info.respect_image_orientation && !image->HasDefaultOrientation()) {
     src_rect =
         CorrectSrcRectForImageOrientation(ToBitmapImage(image), src_rect);
   }
diff --git a/third_party/blink/renderer/core/paint/image_element_timing.cc b/third_party/blink/renderer/core/paint/image_element_timing.cc
index ac6ec504..001ad4c 100644
--- a/third_party/blink/renderer/core/paint/image_element_timing.cc
+++ b/third_party/blink/renderer/core/paint/image_element_timing.cc
@@ -150,14 +150,8 @@
   DCHECK(layout_object.GetDocument().GetSecurityOrigin());
   // It's ok to expose rendering timestamp for data URIs so exclude those from
   // the Timing-Allow-Origin check.
-  bool response_tainting_not_basic = false;
-  bool tainted_origin_flag = false;
   if (!url.ProtocolIsData() &&
-      !Performance::PassesTimingAllowCheck(
-          cached_image.GetResponse(), cached_image.GetResponse(),
-          *layout_object.GetDocument().GetSecurityOrigin(),
-          &layout_object.GetDocument(), &response_tainting_not_basic,
-          &tainted_origin_flag)) {
+      !cached_image.GetResponse().TimingAllowPassed()) {
     WindowPerformance* performance =
         DOMWindowPerformance::performance(*GetSupplementable());
     if (performance) {
diff --git a/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.cc b/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.cc
index d5ab889..5185e76 100644
--- a/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.cc
+++ b/third_party/blink/renderer/core/paint/largest_contentful_paint_calculator.cc
@@ -121,18 +121,8 @@
       return;
 
     const KURL& url = cached_image->Url();
-    auto* document = window_performance_->GetExecutionContext();
-    bool expose_paint_time_to_api = true;
-    bool response_tainting_not_basic = false;
-    bool tainted_origin_flag = false;
-    if (!url.ProtocolIsData() &&
-        (!document ||
-         !Performance::PassesTimingAllowCheck(
-             cached_image->GetResponse(), cached_image->GetResponse(),
-             *document->GetSecurityOrigin(), document,
-             &response_tainting_not_basic, &tainted_origin_flag))) {
-      expose_paint_time_to_api = false;
-    }
+    bool expose_paint_time_to_api =
+        url.ProtocolIsData() || cached_image->GetResponse().TimingAllowPassed();
     const String& image_url =
         url.ProtocolIsData()
             ? url.GetString().Left(ImageElementTiming::kInlineImageMaxChars)
diff --git a/third_party/blink/renderer/core/paint/object_painter_base.cc b/third_party/blink/renderer/core/paint/object_painter_base.cc
index f165cee..19a8aaa89 100644
--- a/third_party/blink/renderer/core/paint/object_painter_base.cc
+++ b/third_party/blink/renderer/core/paint/object_painter_base.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/paint/object_painter_base.h"
 
+#include "base/optional.h"
 #include "third_party/blink/renderer/core/paint/box_border_painter.h"
 #include "third_party/blink/renderer/core/paint/paint_info.h"
 #include "third_party/blink/renderer/core/style/border_edge.h"
@@ -12,6 +13,8 @@
 #include "third_party/blink/renderer/platform/graphics/graphics_context.h"
 #include "third_party/blink/renderer/platform/graphics/graphics_context_state_saver.h"
 #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h"
+#include "ui/base/ui_base_features.h"
+#include "ui/native_theme/native_theme.h"
 
 namespace blink {
 
@@ -486,6 +489,46 @@
   FillQuad(graphics_context, quad, color, antialias);
 }
 
+float GetFocusRingBorderRadius(const ComputedStyle& style) {
+  // Default style is border-radius equal to outline width.
+  float border_radius = style.GetOutlineStrokeWidthForFocusRing();
+
+  if (::features::IsFormControlsRefreshEnabled() && !style.HasAuthorBorder() &&
+      style.HasEffectiveAppearance()) {
+    // For the elements that have not been styled and that have an appearance,
+    // the focus ring should use the same border radius as the one used for
+    // drawing the element.
+    base::Optional<ui::NativeTheme::Part> part;
+    switch (style.EffectiveAppearance()) {
+      case kCheckboxPart:
+        part = ui::NativeTheme::kCheckbox;
+        break;
+      case kRadioPart:
+        part = ui::NativeTheme::kRadio;
+        break;
+      case kPushButtonPart:
+      case kSquareButtonPart:
+      case kButtonPart:
+        part = ui::NativeTheme::kPushButton;
+        break;
+      case kTextFieldPart:
+      case kTextAreaPart:
+      case kSearchFieldPart:
+        part = ui::NativeTheme::kTextField;
+        break;
+      default:
+        break;
+    }
+    if (part) {
+      return ui::NativeTheme::GetInstanceForWeb()->GetBorderRadiusForPart(
+          part.value(), style.Width().GetFloatValue(),
+          style.Height().GetFloatValue(), style.EffectiveZoom());
+    }
+  }
+
+  return border_radius;
+}
+
 }  // anonymous namespace
 
 void ObjectPainterBase::PaintOutlineRects(
@@ -498,9 +541,16 @@
 
   Color color = style.VisitedDependentColor(GetCSSPropertyOutlineColor());
   if (style.OutlineStyleIsAuto()) {
+    // Logic in draw focus ring is dependent on whether the border is large
+    // enough to have an inset outline. Use the smallest border edge for that
+    // test.
+    float min_border_width =
+        std::min(std::min(style.BorderTopWidth(), style.BorderBottomWidth()),
+                 std::min(style.BorderLeftWidth(), style.BorderRightWidth()));
+    float border_radius = GetFocusRingBorderRadius(style);
     paint_info.context.DrawFocusRing(
         pixel_snapped_outline_rects, style.GetOutlineStrokeWidthForFocusRing(),
-        style.OutlineOffset(), color,
+        style.OutlineOffset(), border_radius, min_border_width, color,
         LayoutTheme::GetTheme().IsFocusRingOutset());
     return;
   }
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc
index 9b7525f..4066d9d 100644
--- a/third_party/blink/renderer/core/style/computed_style.cc
+++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -74,6 +74,7 @@
 #include "third_party/blink/renderer/platform/wtf/math_extras.h"
 #include "third_party/blink/renderer/platform/wtf/size_assertions.h"
 #include "third_party/blink/renderer/platform/wtf/text/case_map.h"
+#include "ui/base/ui_base_features.h"
 
 namespace blink {
 
@@ -2180,6 +2181,10 @@
 }
 
 float ComputedStyle::GetOutlineStrokeWidthForFocusRing() const {
+  if (::features::IsFormControlsRefreshEnabled() && OutlineStyleIsAuto()) {
+    return std::max(EffectiveZoom(), 3.f);
+  }
+
 #if defined(OS_MACOSX)
   return OutlineWidth();
 #else
diff --git a/third_party/blink/renderer/core/style/computed_style_test.cc b/third_party/blink/renderer/core/style/computed_style_test.cc
index 55c95aa0..2b6c183 100644
--- a/third_party/blink/renderer/core/style/computed_style_test.cc
+++ b/third_party/blink/renderer/core/style/computed_style_test.cc
@@ -27,6 +27,7 @@
 #include "third_party/blink/renderer/core/testing/dummy_page_holder.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
+#include "ui/base/ui_base_features.h"
 
 namespace blink {
 
@@ -69,24 +70,32 @@
 
 TEST(ComputedStyleTest, FocusRingWidth) {
   scoped_refptr<ComputedStyle> style = ComputedStyle::Create();
-  style->SetEffectiveZoom(3.5);
-  style->SetOutlineStyle(EBorderStyle::kSolid);
+  if (::features::IsFormControlsRefreshEnabled()) {
+    style->SetOutlineStyleIsAuto(static_cast<bool>(OutlineIsAuto::kOn));
+    EXPECT_EQ(3, style->GetOutlineStrokeWidthForFocusRing());
+    style->SetEffectiveZoom(3.5);
+    style->SetOutlineWidth(4);
+    EXPECT_EQ(3.5, style->GetOutlineStrokeWidthForFocusRing());
+  } else {
+    style->SetEffectiveZoom(3.5);
+    style->SetOutlineStyle(EBorderStyle::kSolid);
 #if defined(OS_MACOSX)
-  EXPECT_EQ(3, style->GetOutlineStrokeWidthForFocusRing());
+    EXPECT_EQ(3, style->GetOutlineStrokeWidthForFocusRing());
 #else
-  style->SetOutlineStyleIsAuto(static_cast<bool>(OutlineIsAuto::kOn));
-  static uint16_t outline_width = 4;
-  style->SetOutlineWidth(outline_width);
+    style->SetOutlineStyleIsAuto(static_cast<bool>(OutlineIsAuto::kOn));
+    static uint16_t outline_width = 4;
+    style->SetOutlineWidth(outline_width);
 
-  double expected_width =
-      LayoutTheme::GetTheme().IsFocusRingOutset() ? outline_width : 3.5;
-  EXPECT_EQ(expected_width, style->GetOutlineStrokeWidthForFocusRing());
+    double expected_width =
+        LayoutTheme::GetTheme().IsFocusRingOutset() ? outline_width : 3.5;
+    EXPECT_EQ(expected_width, style->GetOutlineStrokeWidthForFocusRing());
 
-  expected_width =
-      LayoutTheme::GetTheme().IsFocusRingOutset() ? outline_width : 1.0;
-  style->SetEffectiveZoom(0.5);
-  EXPECT_EQ(expected_width, style->GetOutlineStrokeWidthForFocusRing());
+    expected_width =
+        LayoutTheme::GetTheme().IsFocusRingOutset() ? outline_width : 1.0;
+    style->SetEffectiveZoom(0.5);
+    EXPECT_EQ(expected_width, style->GetOutlineStrokeWidthForFocusRing());
 #endif
+  }
 }
 
 TEST(ComputedStyleTest, FocusRingOutset) {
@@ -94,11 +103,15 @@
   style->SetOutlineStyle(EBorderStyle::kSolid);
   style->SetOutlineStyleIsAuto(static_cast<bool>(OutlineIsAuto::kOn));
   style->SetEffectiveZoom(4.75);
+  if (::features::IsFormControlsRefreshEnabled()) {
+    EXPECT_EQ(4, style->OutlineOutsetExtent());
+  } else {
 #if defined(OS_MACOSX)
-  EXPECT_EQ(4, style->OutlineOutsetExtent());
+    EXPECT_EQ(4, style->OutlineOutsetExtent());
 #else
-  EXPECT_EQ(3, style->OutlineOutsetExtent());
+    EXPECT_EQ(3, style->OutlineOutsetExtent());
 #endif
+  }
 }
 
 TEST(ComputedStyleTest, SVGStackingContext) {
diff --git a/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents_test.cc b/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents_test.cc
index c7fd17d..3ce5bfe 100644
--- a/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents_test.cc
+++ b/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents_test.cc
@@ -10,7 +10,15 @@
 
 class ArrayBufferContentsTest : public testing::Test {};
 
-TEST_F(ArrayBufferContentsTest, AllocationFail) {
+#if defined(ADDRESS_SANITIZER)
+#define DISABLE_ON_ASAN(test_name) DISABLED_##test_name
+#else
+#define DISABLE_ON_ASAN(test_name) test_name
+#endif  // defined(ADDRESS_SANITIZER)
+
+// Disable on ASAN to avoid crashing on failed allocations, see
+// https://crbug.com/1038741.
+TEST_F(ArrayBufferContentsTest, DISABLE_ON_ASAN(AllocationFail)) {
   // This should be an amount of memory that cannot be allocated.
   size_t length = sizeof(size_t) == 4 ? 0x4fffffff : 0x8000000000;
   size_t element_byte_size = 1;
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn
index 800cbb1..94cb7b1 100644
--- a/third_party/blink/renderer/modules/BUILD.gn
+++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -208,6 +208,8 @@
     "peerconnection/testing/internals_rtc_certificate.h",
     "peerconnection/testing/internals_rtc_peer_connection.cc",
     "peerconnection/testing/internals_rtc_peer_connection.h",
+    "permissions/testing/internals_permission.cc",
+    "permissions/testing/internals_permission.h",
     "service_worker/testing/internals_service_worker.cc",
     "service_worker/testing/internals_service_worker.h",
     "speech/testing/internals_speech_synthesis.cc",
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
index f6239c6..0a9be50 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc
@@ -1017,9 +1017,8 @@
 
   SkColor color = LayoutTheme::GetTheme().FocusRingColor().Rgb();
   const int kFocusRingWidth = 5;
-
   DrawPlatformFocusRing(path.GetSkPath(), DrawingCanvas(), color,
-                        kFocusRingWidth);
+                        /*width=*/kFocusRingWidth, /*radius=*/kFocusRingWidth);
 
   // We need to add focusRingWidth to dirtyRect.
   StrokeData stroke_data;
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_source.cc b/third_party/blink/renderer/modules/mediastream/media_stream_video_source.cc
index 0d4561f..344b42e6 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_video_source.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_source.cc
@@ -335,7 +335,6 @@
 void MediaStreamVideoSource::UpdateNumEncodedSinks() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   size_t count = CountEncodedSinks();
-  DCHECK(SupportsEncodedOutput() || count == 0);
   if (count == 1) {
     OnEncodedSinkEnabled();
   } else if (count == 0) {
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_track.cc b/third_party/blink/renderer/modules/mediastream/media_stream_video_track.cc
index 316ba527..9c07383 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_video_track.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_track.cc
@@ -494,7 +494,8 @@
   DCHECK_CALLED_ON_VALID_THREAD(main_render_thread_checker_);
   AddSinkInternal(&encoded_sinks_, sink);
   frame_deliverer_->AddEncodedCallback(sink, std::move(callback));
-  source_->UpdateNumEncodedSinks();
+  if (source_)
+    source_->UpdateNumEncodedSinks();
   UpdateSourceHasConsumers();
 }
 
@@ -514,7 +515,8 @@
   DCHECK_CALLED_ON_VALID_THREAD(main_render_thread_checker_);
   RemoveSinkInternal(&encoded_sinks_, sink);
   frame_deliverer_->RemoveEncodedCallback(sink);
-  source_->UpdateNumEncodedSinks();
+  if (source_)
+    source_->UpdateNumEncodedSinks();
   UpdateSourceHasConsumers();
 }
 
@@ -532,7 +534,8 @@
   // need a new keyframe from the source as we may have dropped data making the
   // stream undecodable.
   bool maybe_await_key_frame = false;
-  if (enabled && source_->SupportsEncodedOutput() && !encoded_sinks_.empty()) {
+  if (enabled && source_ && source_->SupportsEncodedOutput() &&
+      !encoded_sinks_.empty()) {
     source_->RequestRefreshFrame();
     maybe_await_key_frame = true;
   }
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_track_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_video_track_test.cc
index 09011f4b..dc44c95 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_video_track_test.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_track_test.cc
@@ -255,6 +255,22 @@
   sink.DisconnectFromTrack();
 }
 
+TEST_F(MediaStreamVideoTrackTest, SourceDetached) {
+  InitializeSource();
+  WebMediaStreamTrack track = CreateTrack();
+  MockMediaStreamVideoSink sink;
+  auto* video_track = MediaStreamVideoTrack::GetVideoTrack(track);
+  video_track->StopAndNotify(base::BindOnce([] {}));
+  sink.ConnectToTrack(track);
+  sink.ConnectEncodedToTrack(track);
+  video_track->SetEnabled(true);
+  video_track->SetEnabled(false);
+  WebMediaStreamTrack::Settings settings;
+  video_track->GetSettings(settings);
+  sink.DisconnectFromTrack();
+  sink.DisconnectEncodedFromTrack();
+}
+
 TEST_F(MediaStreamVideoTrackTest, SourceStopped) {
   InitializeSource();
   MockMediaStreamVideoSink sink;
diff --git a/third_party/blink/renderer/modules/modules_idl_files.gni b/third_party/blink/renderer/modules/modules_idl_files.gni
index 8232d249..6df19648 100644
--- a/third_party/blink/renderer/modules/modules_idl_files.gni
+++ b/third_party/blink/renderer/modules/modules_idl_files.gni
@@ -912,6 +912,7 @@
                       "serial/serial_input_signals.idl",
                       "serial/serial_options.idl",
                       "serial/serial_output_signals.idl",
+                      "serial/serial_port_filter.idl",
                       "serial/serial_port_request_options.idl",
                     ],
                     "abspath")
@@ -1066,6 +1067,7 @@
                     "netinfo/testing/internals_net_info.idl",
                     "peerconnection/testing/internals_rtc_certificate.idl",
                     "peerconnection/testing/internals_rtc_peer_connection.idl",
+                    "permissions/testing/internals_permission.idl",
                     "service_worker/testing/internals_service_worker.idl",
                     "speech/testing/internals_speech_synthesis.idl",
                     "vibration/testing/internals_vibration.idl",
diff --git a/third_party/blink/renderer/modules/payments/payment_manager.h b/third_party/blink/renderer/modules/payments/payment_manager.h
index 9a083f1..f618f288 100644
--- a/third_party/blink/renderer/modules/payments/payment_manager.h
+++ b/third_party/blink/renderer/modules/payments/payment_manager.h
@@ -25,8 +25,6 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  static PaymentManager* Create(ServiceWorkerRegistration*);
-
   explicit PaymentManager(ServiceWorkerRegistration*);
 
   PaymentInstruments* instruments();
diff --git a/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source.cc b/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source.cc
index 952689f..63d08f1 100644
--- a/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source.cc
+++ b/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source.cc
@@ -407,6 +407,9 @@
 
 bool MediaStreamRemoteVideoSource::SupportsEncodedOutput() const {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  if (!observer_ || !observer_->track()) {
+    return false;
+  }
   scoped_refptr<webrtc::VideoTrackInterface> video_track(
       static_cast<webrtc::VideoTrackInterface*>(observer_->track().get()));
   return video_track->GetSource()->SupportsEncodedOutput();
@@ -414,6 +417,9 @@
 
 void MediaStreamRemoteVideoSource::RequestRefreshFrame() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  if (!observer_ || !observer_->track()) {
+    return;
+  }
   scoped_refptr<webrtc::VideoTrackInterface> video_track(
       static_cast<webrtc::VideoTrackInterface*>(observer_->track().get()));
   if (video_track->GetSource()) {
@@ -423,6 +429,9 @@
 
 void MediaStreamRemoteVideoSource::OnEncodedSinkEnabled() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  if (!observer_ || !observer_->track()) {
+    return;
+  }
   scoped_refptr<webrtc::VideoTrackInterface> video_track(
       static_cast<webrtc::VideoTrackInterface*>(observer_->track().get()));
   video_track->GetSource()->AddEncodedSink(delegate_.get());
@@ -430,7 +439,7 @@
 
 void MediaStreamRemoteVideoSource::OnEncodedSinkDisabled() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  if (!observer_->track()) {
+  if (!observer_ || !observer_->track()) {
     return;
   }
   scoped_refptr<webrtc::VideoTrackInterface> video_track(
diff --git a/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source_test.cc b/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source_test.cc
index 9ea0b42..8b96314 100644
--- a/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source_test.cc
@@ -188,7 +188,31 @@
   track->RemoveSink(&sink);
 }
 
-TEST_F(MediaStreamRemoteVideoSourceTest, RemoteTrackStop) {
+TEST_F(MediaStreamRemoteVideoSourceTest,
+       SourceTerminationWithEncodedSinkAdded) {
+  std::unique_ptr<blink::MediaStreamVideoTrack> track(CreateTrack());
+  blink::MockMediaStreamVideoSink sink;
+  track->AddEncodedSink(&sink, sink.GetDeliverEncodedVideoFrameCB());
+  source()->OnSourceTerminated();
+  track->RemoveEncodedSink(&sink);
+}
+
+TEST_F(MediaStreamRemoteVideoSourceTest,
+       SourceTerminationBeforeEncodedSinkAdded) {
+  std::unique_ptr<blink::MediaStreamVideoTrack> track(CreateTrack());
+  blink::MockMediaStreamVideoSink sink;
+  source()->OnSourceTerminated();
+  track->AddEncodedSink(&sink, sink.GetDeliverEncodedVideoFrameCB());
+  track->RemoveEncodedSink(&sink);
+}
+
+TEST_F(MediaStreamRemoteVideoSourceTest,
+       SourceTerminationBeforeRequestRefreshFrame) {
+  source()->OnSourceTerminated();
+  source()->RequestRefreshFrame();
+}
+
+TEST_F(MediaStreamRemoteVideoSourceTest, SurvivesSourceTermination) {
   std::unique_ptr<blink::MediaStreamVideoTrack> track(CreateTrack());
 
   blink::MockMediaStreamVideoSink sink;
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
index 9cc1e57..4d46233 100644
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
@@ -118,8 +118,8 @@
           create_p2p_socket_dispatcher ? new P2PSocketDispatcher() : nullptr),
       signaling_thread_(nullptr),
       worker_thread_(nullptr),
-      chrome_signaling_thread_("Chrome_libJingle_Signaling"),
-      chrome_worker_thread_("Chrome_libJingle_WorkerThread") {
+      chrome_signaling_thread_("WebRTC_Signaling"),
+      chrome_worker_thread_("WebRTC_Worker") {
   TryScheduleStunProbeTrial();
 }
 
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_ice_candidate.cc b/third_party/blink/renderer/modules/peerconnection/rtc_ice_candidate.cc
index 3ed79ac..a245598 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_ice_candidate.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_ice_candidate.cc
@@ -39,6 +39,7 @@
 #include "third_party/blink/renderer/modules/peerconnection/rtc_ice_candidate_init.h"
 #include "third_party/blink/renderer/platform/bindings/exception_messages.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
+#include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
 
 namespace blink {
@@ -64,9 +65,10 @@
                       WebFeature::kRTCIceCandidateDefaultSdpMLineIndex);
   }
 
-  return MakeGarbageCollected<RTCIceCandidate>(RTCIceCandidatePlatform::Create(
-      candidate_init->candidate(), sdp_mid, std::move(sdp_m_line_index),
-      candidate_init->usernameFragment()));
+  return MakeGarbageCollected<RTCIceCandidate>(
+      MakeGarbageCollected<RTCIceCandidatePlatform>(
+          candidate_init->candidate(), sdp_mid, std::move(sdp_m_line_index),
+          candidate_init->usernameFragment()));
 }
 
 RTCIceCandidate* RTCIceCandidate::Create(
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
index 3790579..b07f80df 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
@@ -23,6 +23,7 @@
 #include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_event.h"
 #include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_event_init.h"
 #include "third_party/blink/renderer/modules/peerconnection/rtc_quic_transport.h"
+#include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
 #include "third_party/webrtc/api/ice_transport_factory.h"
@@ -53,7 +54,7 @@
 }
 
 RTCIceCandidate* ConvertToRtcIceCandidate(const cricket::Candidate& candidate) {
-  return RTCIceCandidate::Create(RTCIceCandidatePlatform::Create(
+  return RTCIceCandidate::Create(MakeGarbageCollected<RTCIceCandidatePlatform>(
       String::FromUTF8(webrtc::SdpSerializeCandidate(candidate)), "", 0));
 }
 
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
index 89aee95..4e28b16 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
@@ -227,7 +227,7 @@
       UseCounter::Count(context,
                         WebFeature::kRTCIceCandidateDefaultSdpMLineIndex);
     }
-    return RTCIceCandidatePlatform::Create(
+    return MakeGarbageCollected<RTCIceCandidatePlatform>(
         ice_candidate_init->candidate(), ice_candidate_init->sdpMid(),
         sdp_m_line_index, ice_candidate_init->usernameFragment());
   }
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
index 5ffcbd0..50c7573 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
@@ -35,6 +35,7 @@
 #include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl.h"
 #include "third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer.h"
 #include "third_party/blink/renderer/modules/webrtc/webrtc_audio_device_impl.h"
+#include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/mediastream/media_constraints.h"
 #include "third_party/blink/renderer/platform/mediastream/webrtc_uma_histograms.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_answer_options_platform.h"
@@ -2447,8 +2448,8 @@
                                               int address_family) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnIceCandidateImpl");
-  auto* platform_candidate =
-      RTCIceCandidatePlatform::Create(sdp, sdp_mid, sdp_mline_index);
+  auto* platform_candidate = MakeGarbageCollected<RTCIceCandidatePlatform>(
+      sdp, sdp_mid, sdp_mline_index);
   if (peer_connection_tracker_) {
     peer_connection_tracker_->TrackAddIceCandidate(
         this, platform_candidate, PeerConnectionTracker::SOURCE_LOCAL, true);
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
index 09c7650..5f193ce 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
@@ -787,8 +787,8 @@
 }
 
 TEST_F(RTCPeerConnectionHandlerTest, addICECandidate) {
-  RTCIceCandidatePlatform* candidate =
-      RTCIceCandidatePlatform::Create(kDummySdp, "sdpMid", 1);
+  auto* candidate =
+      MakeGarbageCollected<RTCIceCandidatePlatform>(kDummySdp, "sdpMid", 1);
 
   EXPECT_CALL(*mock_tracker_.get(),
               TrackAddIceCandidate(pc_handler_.get(), candidate,
diff --git a/third_party/blink/renderer/modules/permissions/permission_utils.cc b/third_party/blink/renderer/modules/permissions/permission_utils.cc
index 6f3c445..5bc3d90 100644
--- a/third_party/blink/renderer/modules/permissions/permission_utils.cc
+++ b/third_party/blink/renderer/modules/permissions/permission_utils.cc
@@ -7,11 +7,20 @@
 #include <utility>
 
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
+#include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h"
+#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_clipboard_permission_descriptor.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_midi_permission_descriptor.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_permission_descriptor.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_push_permission_descriptor.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_wake_lock_permission_descriptor.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/workers/worker_global_scope.h"
 #include "third_party/blink/renderer/core/workers/worker_thread.h"
+#include "third_party/blink/renderer/platform/bindings/exception_state.h"
+#include "third_party/blink/renderer/platform/bindings/script_state.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
 namespace blink {
@@ -81,4 +90,130 @@
   return descriptor;
 }
 
+PermissionDescriptorPtr ParsePermissionDescriptor(
+    ScriptState* script_state,
+    const ScriptValue& raw_descriptor,
+    ExceptionState& exception_state) {
+  PermissionDescriptor* permission =
+      NativeValueTraits<PermissionDescriptor>::NativeValue(
+          script_state->GetIsolate(), raw_descriptor.V8Value(),
+          exception_state);
+
+  if (exception_state.HadException())
+    return nullptr;
+
+  const String& name = permission->name();
+  if (name == "geolocation")
+    return CreatePermissionDescriptor(PermissionName::GEOLOCATION);
+  if (name == "camera")
+    return CreatePermissionDescriptor(PermissionName::VIDEO_CAPTURE);
+  if (name == "microphone")
+    return CreatePermissionDescriptor(PermissionName::AUDIO_CAPTURE);
+  if (name == "notifications")
+    return CreatePermissionDescriptor(PermissionName::NOTIFICATIONS);
+  if (name == "persistent-storage")
+    return CreatePermissionDescriptor(PermissionName::DURABLE_STORAGE);
+  if (name == "push") {
+    PushPermissionDescriptor* push_permission =
+        NativeValueTraits<PushPermissionDescriptor>::NativeValue(
+            script_state->GetIsolate(), raw_descriptor.V8Value(),
+            exception_state);
+    if (exception_state.HadException())
+      return nullptr;
+
+    // Only "userVisibleOnly" push is supported for now.
+    if (!push_permission->userVisibleOnly()) {
+      exception_state.ThrowDOMException(
+          DOMExceptionCode::kNotSupportedError,
+          "Push Permission without userVisibleOnly:true isn't supported yet.");
+      return nullptr;
+    }
+
+    return CreatePermissionDescriptor(PermissionName::NOTIFICATIONS);
+  }
+  if (name == "midi") {
+    MidiPermissionDescriptor* midi_permission =
+        NativeValueTraits<MidiPermissionDescriptor>::NativeValue(
+            script_state->GetIsolate(), raw_descriptor.V8Value(),
+            exception_state);
+    return CreateMidiPermissionDescriptor(midi_permission->sysex());
+  }
+  if (name == "background-sync")
+    return CreatePermissionDescriptor(PermissionName::BACKGROUND_SYNC);
+  if (name == "ambient-light-sensor" || name == "accelerometer" ||
+      name == "gyroscope" || name == "magnetometer") {
+    // ALS requires an extra flag.
+    if (name == "ambient-light-sensor") {
+      if (!RuntimeEnabledFeatures::SensorExtraClassesEnabled()) {
+        exception_state.ThrowTypeError(
+            "GenericSensorExtraClasses flag is not enabled.");
+        return nullptr;
+      }
+    }
+
+    return CreatePermissionDescriptor(PermissionName::SENSORS);
+  }
+  if (name == "accessibility-events") {
+    if (!RuntimeEnabledFeatures::AccessibilityObjectModelEnabled()) {
+      exception_state.ThrowTypeError(
+          "Accessibility Object Model is not enabled.");
+      return nullptr;
+    }
+    return CreatePermissionDescriptor(PermissionName::ACCESSIBILITY_EVENTS);
+  }
+  if (name == "clipboard-read" || name == "clipboard-write") {
+    PermissionName permission_name = PermissionName::CLIPBOARD_READ;
+    if (name == "clipboard-write")
+      permission_name = PermissionName::CLIPBOARD_WRITE;
+
+    ClipboardPermissionDescriptor* clipboard_permission =
+        NativeValueTraits<ClipboardPermissionDescriptor>::NativeValue(
+            script_state->GetIsolate(), raw_descriptor.V8Value(),
+            exception_state);
+    return CreateClipboardPermissionDescriptor(
+        permission_name, clipboard_permission->allowWithoutGesture(),
+        clipboard_permission->allowWithoutSanitization());
+  }
+  if (name == "payment-handler")
+    return CreatePermissionDescriptor(PermissionName::PAYMENT_HANDLER);
+  if (name == "background-fetch")
+    return CreatePermissionDescriptor(PermissionName::BACKGROUND_FETCH);
+  if (name == "idle-detection")
+    return CreatePermissionDescriptor(PermissionName::IDLE_DETECTION);
+  if (name == "periodic-background-sync")
+    return CreatePermissionDescriptor(PermissionName::PERIODIC_BACKGROUND_SYNC);
+  if (name == "wake-lock") {
+    if (!RuntimeEnabledFeatures::WakeLockEnabled(
+            ExecutionContext::From(script_state))) {
+      exception_state.ThrowTypeError("Wake Lock is not enabled.");
+      return nullptr;
+    }
+    WakeLockPermissionDescriptor* wake_lock_permission =
+        NativeValueTraits<WakeLockPermissionDescriptor>::NativeValue(
+            script_state->GetIsolate(), raw_descriptor.V8Value(),
+            exception_state);
+    if (exception_state.HadException())
+      return nullptr;
+    const String& type = wake_lock_permission->type();
+    if (type == "screen") {
+      return CreateWakeLockPermissionDescriptor(
+          mojom::blink::WakeLockType::kScreen);
+    } else if (type == "system") {
+      return CreateWakeLockPermissionDescriptor(
+          mojom::blink::WakeLockType::kSystem);
+    } else {
+      NOTREACHED();
+    }
+  }
+  if (name == "nfc") {
+    if (!RuntimeEnabledFeatures::WebNFCEnabled(
+            ExecutionContext::From(script_state))) {
+      exception_state.ThrowTypeError("Web NFC is not enabled.");
+      return nullptr;
+    }
+    return CreatePermissionDescriptor(PermissionName::NFC);
+  }
+  return nullptr;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/permissions/permission_utils.h b/third_party/blink/renderer/modules/permissions/permission_utils.h
index 50248b2..e790055c 100644
--- a/third_party/blink/renderer/modules/permissions/permission_utils.h
+++ b/third_party/blink/renderer/modules/permissions/permission_utils.h
@@ -7,11 +7,15 @@
 
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h"
+#include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/wtf/forward.h"
 
 namespace blink {
 
 class ExecutionContext;
+class ExceptionState;
+class ScriptState;
+class ScriptValue;
 
 void ConnectToPermissionService(
     ExecutionContext*,
@@ -33,6 +37,18 @@
 mojom::blink::PermissionDescriptorPtr CreateWakeLockPermissionDescriptor(
     mojom::blink::WakeLockType type);
 
+// Parses the raw permission dictionary and returns the Mojo
+// PermissionDescriptor if parsing was successful. If an exception occurs, it
+// will be stored in |exceptionState| and nullptr will be returned.
+//
+// Websites will be able to run code when `name()` is called, changing the
+// current context. The caller should make sure that no assumption is made
+// after this has been called.
+MODULES_EXPORT mojom::blink::PermissionDescriptorPtr ParsePermissionDescriptor(
+    ScriptState*,
+    const ScriptValue& raw_permission,
+    ExceptionState&);
+
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_PERMISSIONS_PERMISSION_UTILS_H_
diff --git a/third_party/blink/renderer/modules/permissions/permissions.cc b/third_party/blink/renderer/modules/permissions/permissions.cc
index f00bb757..511fb0a 100644
--- a/third_party/blink/renderer/modules/permissions/permissions.cc
+++ b/third_party/blink/renderer/modules/permissions/permissions.cc
@@ -11,11 +11,6 @@
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_value.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_clipboard_permission_descriptor.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_midi_permission_descriptor.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_permission_descriptor.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_push_permission_descriptor.h"
-#include "third_party/blink/renderer/bindings/modules/v8/v8_wake_lock_permission_descriptor.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
@@ -36,153 +31,11 @@
 using mojom::blink::PermissionName;
 using mojom::blink::PermissionService;
 
-namespace {
-
-// Parses the raw permission dictionary and returns the Mojo
-// PermissionDescriptor if parsing was successful. If an exception occurs, it
-// will be stored in |exceptionState| and null will be returned. Therefore, the
-// |exceptionState| should be checked before attempting to use the returned
-// permission as the non-null assert will be fired otherwise.
-//
-// Websites will be able to run code when `name()` is called, changing the
-// current context. The caller should make sure that no assumption is made
-// after this has been called.
-PermissionDescriptorPtr ParsePermission(ScriptState* script_state,
-                                        const ScriptValue raw_permission,
-                                        ExceptionState& exception_state) {
-  PermissionDescriptor* permission =
-      NativeValueTraits<PermissionDescriptor>::NativeValue(
-          script_state->GetIsolate(), raw_permission.V8Value(),
-          exception_state);
-
-  if (exception_state.HadException()) {
-    exception_state.ThrowTypeError(exception_state.Message());
-    return nullptr;
-  }
-
-  const String& name = permission->name();
-  if (name == "geolocation")
-    return CreatePermissionDescriptor(PermissionName::GEOLOCATION);
-  if (name == "camera")
-    return CreatePermissionDescriptor(PermissionName::VIDEO_CAPTURE);
-  if (name == "microphone")
-    return CreatePermissionDescriptor(PermissionName::AUDIO_CAPTURE);
-  if (name == "notifications")
-    return CreatePermissionDescriptor(PermissionName::NOTIFICATIONS);
-  if (name == "persistent-storage")
-    return CreatePermissionDescriptor(PermissionName::DURABLE_STORAGE);
-  if (name == "push") {
-    PushPermissionDescriptor* push_permission =
-        NativeValueTraits<PushPermissionDescriptor>::NativeValue(
-            script_state->GetIsolate(), raw_permission.V8Value(),
-            exception_state);
-    if (exception_state.HadException()) {
-      exception_state.ThrowTypeError(exception_state.Message());
-      return nullptr;
-    }
-
-    // Only "userVisibleOnly" push is supported for now.
-    if (!push_permission->userVisibleOnly()) {
-      exception_state.ThrowDOMException(
-          DOMExceptionCode::kNotSupportedError,
-          "Push Permission without userVisibleOnly:true isn't supported yet.");
-      return nullptr;
-    }
-
-    return CreatePermissionDescriptor(PermissionName::NOTIFICATIONS);
-  }
-  if (name == "midi") {
-    MidiPermissionDescriptor* midi_permission =
-        NativeValueTraits<MidiPermissionDescriptor>::NativeValue(
-            script_state->GetIsolate(), raw_permission.V8Value(),
-            exception_state);
-    return CreateMidiPermissionDescriptor(midi_permission->sysex());
-  }
-  if (name == "background-sync")
-    return CreatePermissionDescriptor(PermissionName::BACKGROUND_SYNC);
-  if (name == "ambient-light-sensor" || name == "accelerometer" ||
-      name == "gyroscope" || name == "magnetometer") {
-    // ALS requires an extra flag.
-    if (name == "ambient-light-sensor") {
-      if (!RuntimeEnabledFeatures::SensorExtraClassesEnabled()) {
-        exception_state.ThrowTypeError(
-            "GenericSensorExtraClasses flag is not enabled.");
-        return nullptr;
-      }
-    }
-
-    return CreatePermissionDescriptor(PermissionName::SENSORS);
-  }
-  if (name == "accessibility-events") {
-    if (!RuntimeEnabledFeatures::AccessibilityObjectModelEnabled()) {
-      exception_state.ThrowTypeError(
-          "Accessibility Object Model is not enabled.");
-      return nullptr;
-    }
-    return CreatePermissionDescriptor(PermissionName::ACCESSIBILITY_EVENTS);
-  }
-  if (name == "clipboard-read" || name == "clipboard-write") {
-    PermissionName permission_name = PermissionName::CLIPBOARD_READ;
-    if (name == "clipboard-write")
-      permission_name = PermissionName::CLIPBOARD_WRITE;
-
-    ClipboardPermissionDescriptor* clipboard_permission =
-        NativeValueTraits<ClipboardPermissionDescriptor>::NativeValue(
-            script_state->GetIsolate(), raw_permission.V8Value(),
-            exception_state);
-    return CreateClipboardPermissionDescriptor(
-        permission_name, clipboard_permission->allowWithoutGesture(),
-        clipboard_permission->allowWithoutSanitization());
-  }
-  if (name == "payment-handler")
-    return CreatePermissionDescriptor(PermissionName::PAYMENT_HANDLER);
-  if (name == "background-fetch")
-    return CreatePermissionDescriptor(PermissionName::BACKGROUND_FETCH);
-  if (name == "idle-detection")
-    return CreatePermissionDescriptor(PermissionName::IDLE_DETECTION);
-  if (name == "periodic-background-sync")
-    return CreatePermissionDescriptor(PermissionName::PERIODIC_BACKGROUND_SYNC);
-  if (name == "wake-lock") {
-    if (!RuntimeEnabledFeatures::WakeLockEnabled(
-            ExecutionContext::From(script_state))) {
-      exception_state.ThrowTypeError("Wake Lock is not enabled.");
-      return nullptr;
-    }
-    WakeLockPermissionDescriptor* wake_lock_permission =
-        NativeValueTraits<WakeLockPermissionDescriptor>::NativeValue(
-            script_state->GetIsolate(), raw_permission.V8Value(),
-            exception_state);
-    if (exception_state.HadException())
-      return nullptr;
-    const String& type = wake_lock_permission->type();
-    if (type == "screen") {
-      return CreateWakeLockPermissionDescriptor(
-          mojom::blink::WakeLockType::kScreen);
-    } else if (type == "system") {
-      return CreateWakeLockPermissionDescriptor(
-          mojom::blink::WakeLockType::kSystem);
-    } else {
-      NOTREACHED();
-    }
-  }
-  if (name == "nfc") {
-    if (!RuntimeEnabledFeatures::WebNFCEnabled(
-            ExecutionContext::From(script_state))) {
-      exception_state.ThrowTypeError("Web NFC is not enabled.");
-      return nullptr;
-    }
-    return CreatePermissionDescriptor(PermissionName::NFC);
-  }
-  return nullptr;
-}
-
-}  // anonymous namespace
-
 ScriptPromise Permissions::query(ScriptState* script_state,
                                  const ScriptValue& raw_permission,
                                  ExceptionState& exception_state) {
   PermissionDescriptorPtr descriptor =
-      ParsePermission(script_state, raw_permission, exception_state);
+      ParsePermissionDescriptor(script_state, raw_permission, exception_state);
   if (exception_state.HadException())
     return ScriptPromise();
 
@@ -206,7 +59,7 @@
                                    const ScriptValue& raw_permission,
                                    ExceptionState& exception_state) {
   PermissionDescriptorPtr descriptor =
-      ParsePermission(script_state, raw_permission, exception_state);
+      ParsePermissionDescriptor(script_state, raw_permission, exception_state);
   if (exception_state.HadException())
     return ScriptPromise();
 
@@ -231,7 +84,7 @@
                                   const ScriptValue& raw_permission,
                                   ExceptionState& exception_state) {
   PermissionDescriptorPtr descriptor =
-      ParsePermission(script_state, raw_permission, exception_state);
+      ParsePermissionDescriptor(script_state, raw_permission, exception_state);
   if (exception_state.HadException())
     return ScriptPromise();
 
@@ -261,8 +114,8 @@
   for (wtf_size_t i = 0; i < raw_permissions.size(); ++i) {
     const ScriptValue& raw_permission = raw_permissions[i];
 
-    auto descriptor =
-        ParsePermission(script_state, raw_permission, exception_state);
+    auto descriptor = ParsePermissionDescriptor(script_state, raw_permission,
+                                                exception_state);
     if (exception_state.HadException())
       return ScriptPromise();
 
diff --git a/third_party/blink/renderer/modules/permissions/testing/internals_permission.cc b/third_party/blink/renderer/modules/permissions/testing/internals_permission.cc
new file mode 100644
index 0000000..3e467cb
--- /dev/null
+++ b/third_party/blink/renderer/modules/permissions/testing/internals_permission.cc
@@ -0,0 +1,87 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/permissions/testing/internals_permission.h"
+
+#include <utility>
+
+#include "mojo/public/cpp/bindings/remote.h"
+#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
+#include "third_party/blink/public/common/permissions/permission_utils.h"
+#include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
+#include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h"
+#include "third_party/blink/public/mojom/permissions/permission_automation.mojom-blink.h"
+#include "third_party/blink/public/platform/platform.h"
+#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
+#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
+#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
+#include "third_party/blink/renderer/core/dom/dom_exception.h"
+#include "third_party/blink/renderer/core/testing/internals.h"
+#include "third_party/blink/renderer/modules/permissions/permission_utils.h"
+#include "third_party/blink/renderer/platform/bindings/exception_state.h"
+#include "third_party/blink/renderer/platform/bindings/script_state.h"
+#include "third_party/blink/renderer/platform/testing/url_test_helpers.h"
+#include "third_party/blink/renderer/platform/weborigin/kurl.h"
+#include "third_party/blink/renderer/platform/wtf/functional.h"
+#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+
+namespace blink {
+
+// static
+ScriptPromise InternalsPermission::setPermission(
+    ScriptState* script_state,
+    Internals&,
+    const ScriptValue& raw_descriptor,
+    const String& state,
+    const String& origin,
+    const String& embedding_origin,
+    ExceptionState& exception_state) {
+  mojom::blink::PermissionDescriptorPtr descriptor =
+      ParsePermissionDescriptor(script_state, raw_descriptor, exception_state);
+  if (exception_state.HadException())
+    return ScriptPromise();
+
+  KURL url = url_test_helpers::ToKURL(origin.Utf8());
+  if (!url.IsValid()) {
+    exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,
+                                      "'" + origin + "' is not a valid URL.");
+    return ScriptPromise();
+  }
+
+  KURL embedding_url = url_test_helpers::ToKURL(embedding_origin.Utf8());
+  if (!embedding_url.IsValid()) {
+    exception_state.ThrowDOMException(
+        DOMExceptionCode::kSyntaxError,
+        "'" + embedding_origin + "' is not a valid URL.");
+    return ScriptPromise();
+  }
+
+  mojo::Remote<test::mojom::blink::PermissionAutomation> permission_automation;
+  Platform::Current()->GetBrowserInterfaceBroker()->GetInterface(
+      permission_automation.BindNewPipeAndPassReceiver());
+  DCHECK(permission_automation.is_bound());
+
+  auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
+  ScriptPromise promise = resolver->Promise();
+  auto* raw_permission_automation = permission_automation.get();
+  raw_permission_automation->SetPermission(
+      std::move(descriptor), ToPermissionStatus(state.Utf8()), url,
+      embedding_url,
+      WTF::Bind(
+          // While we only really need |resolver|, we also take the
+          // mojo::Remote<> so that it remains alive after this function exits.
+          [](ScriptPromiseResolver* resolver,
+             mojo::Remote<test::mojom::blink::PermissionAutomation>,
+             bool success) {
+            if (success)
+              resolver->Resolve();
+            else
+              resolver->Reject();
+          },
+          WrapPersistent(resolver), std::move(permission_automation)));
+
+  return promise;
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/permissions/testing/internals_permission.h b/third_party/blink/renderer/modules/permissions/testing/internals_permission.h
new file mode 100644
index 0000000..59fd0f0
--- /dev/null
+++ b/third_party/blink/renderer/modules/permissions/testing/internals_permission.h
@@ -0,0 +1,34 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PERMISSIONS_TESTING_INTERNALS_PERMISSION_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_PERMISSIONS_TESTING_INTERNALS_PERMISSION_H_
+
+#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
+#include "third_party/blink/renderer/platform/wtf/forward.h"
+
+namespace blink {
+
+class ExceptionState;
+class Internals;
+class ScriptPromise;
+class ScriptState;
+class ScriptValue;
+
+class InternalsPermission {
+  STATIC_ONLY(InternalsPermission);
+
+ public:
+  static ScriptPromise setPermission(ScriptState*,
+                                     Internals&,
+                                     const ScriptValue&,
+                                     const String& state,
+                                     const String& origin,
+                                     const String& embedding_origin,
+                                     ExceptionState&);
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_PERMISSIONS_TESTING_INTERNALS_PERMISSION_H_
diff --git a/third_party/blink/renderer/modules/permissions/testing/internals_permission.idl b/third_party/blink/renderer/modules/permissions/testing/internals_permission.idl
new file mode 100644
index 0000000..5fe940b
--- /dev/null
+++ b/third_party/blink/renderer/modules/permissions/testing/internals_permission.idl
@@ -0,0 +1,9 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    ImplementedAs=InternalsPermission
+] partial interface Internals {
+    [CallWith=ScriptState, RaisesException] Promise<void> setPermission(object descriptor, PermissionState state, USVString url, USVString embedding_url);
+};
diff --git a/third_party/blink/renderer/modules/serial/serial.cc b/third_party/blink/renderer/modules/serial/serial.cc
index 29abf84..9061201 100644
--- a/third_party/blink/renderer/modules/serial/serial.cc
+++ b/third_party/blink/renderer/modules/serial/serial.cc
@@ -18,6 +18,8 @@
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/modules/event_target_modules_names.h"
 #include "third_party/blink/renderer/modules/serial/serial_port.h"
+#include "third_party/blink/renderer/modules/serial/serial_port_filter.h"
+#include "third_party/blink/renderer/modules/serial/serial_port_request_options.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
 
 namespace blink {
@@ -102,11 +104,40 @@
     return ScriptPromise();
   }
 
+  Vector<mojom::blink::SerialPortFilterPtr> filters;
+  if (options && options->hasFilters()) {
+    for (const auto& filter : options->filters()) {
+      auto mojo_filter = mojom::blink::SerialPortFilter::New();
+
+      mojo_filter->has_vendor_id = filter->hasUsbVendorId();
+      if (mojo_filter->has_vendor_id) {
+        mojo_filter->vendor_id = filter->usbVendorId();
+      } else {
+        exception_state.ThrowTypeError(
+            "A filter must provide a property to filter by.");
+        return ScriptPromise();
+      }
+
+      mojo_filter->has_product_id = filter->hasUsbProductId();
+      if (mojo_filter->has_product_id) {
+        if (!mojo_filter->has_vendor_id) {
+          exception_state.ThrowTypeError(
+              "A filter containing a usbProductId must also specify a "
+              "usbVendorId.");
+          return ScriptPromise();
+        }
+        mojo_filter->product_id = filter->usbProductId();
+      }
+
+      filters.push_back(std::move(mojo_filter));
+    }
+  }
+
   auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
   request_port_promises_.insert(resolver);
 
   EnsureServiceConnection();
-  service_->RequestPort(Vector<mojom::blink::SerialPortFilterPtr>(),
+  service_->RequestPort(std::move(filters),
                         WTF::Bind(&Serial::OnRequestPort, WrapPersistent(this),
                                   WrapPersistent(resolver)));
 
diff --git a/third_party/blink/renderer/modules/serial/serial_port_filter.idl b/third_party/blink/renderer/modules/serial/serial_port_filter.idl
new file mode 100644
index 0000000..d173cdd9
--- /dev/null
+++ b/third_party/blink/renderer/modules/serial/serial_port_filter.idl
@@ -0,0 +1,10 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://wicg.github.io/serial
+
+dictionary SerialPortFilter {
+  unsigned short usbVendorId;
+  unsigned short usbProductId;
+};
diff --git a/third_party/blink/renderer/modules/serial/serial_port_request_options.idl b/third_party/blink/renderer/modules/serial/serial_port_request_options.idl
index 8e9c05c..8a58d20 100644
--- a/third_party/blink/renderer/modules/serial/serial_port_request_options.idl
+++ b/third_party/blink/renderer/modules/serial/serial_port_request_options.idl
@@ -5,4 +5,5 @@
 // https://wicg.github.io/serial
 
 dictionary SerialPortRequestOptions {
+  sequence<SerialPortFilter> filters;
 };
diff --git a/third_party/blink/renderer/platform/exported/web_url_response.cc b/third_party/blink/renderer/platform/exported/web_url_response.cc
index e8eca6af..2d15fb3 100644
--- a/third_party/blink/renderer/platform/exported/web_url_response.cc
+++ b/third_party/blink/renderer/platform/exported/web_url_response.cc
@@ -244,6 +244,10 @@
   resource_response_->SetIsLegacyTLSVersion(value);
 }
 
+void WebURLResponse::SetTimingAllowPassed(bool value) {
+  resource_response_->SetTimingAllowPassed(value);
+}
+
 void WebURLResponse::SetSecurityStyle(SecurityStyle security_style) {
   resource_response_->SetSecurityStyle(security_style);
 }
diff --git a/third_party/blink/renderer/platform/graphics/DEPS b/third_party/blink/renderer/platform/graphics/DEPS
index a41c151c8..23ab5079 100644
--- a/third_party/blink/renderer/platform/graphics/DEPS
+++ b/third_party/blink/renderer/platform/graphics/DEPS
@@ -63,4 +63,5 @@
   ".*_test.cc": [
     "+components/viz/test",
   ],
+  "(graphics_context|skia_utils)\.cc" : [ "+ui/base/ui_base_features.h" ]
 }
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image.cc b/third_party/blink/renderer/platform/graphics/bitmap_image.cc
index 493eaf1..e7faefdc 100644
--- a/third_party/blink/renderer/platform/graphics/bitmap_image.cc
+++ b/third_party/blink/renderer/platform/graphics/bitmap_image.cc
@@ -156,6 +156,11 @@
   return size_respecting_orientation_;
 }
 
+bool BitmapImage::HasDefaultOrientation() const {
+  ImageOrientation orientation = CurrentFrameOrientation();
+  return orientation == kDefaultImageOrientation;
+}
+
 bool BitmapImage::GetHotSpot(IntPoint& hot_spot) const {
   return decoder_ && decoder_->HotSpot(hot_spot);
 }
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image.h b/third_party/blink/renderer/platform/graphics/bitmap_image.h
index b73b4ca..44cc102 100644
--- a/third_party/blink/renderer/platform/graphics/bitmap_image.h
+++ b/third_party/blink/renderer/platform/graphics/bitmap_image.h
@@ -66,6 +66,7 @@
 
   IntSize Size() const override;
   IntSize SizeRespectingOrientation() const;
+  bool HasDefaultOrientation() const override;
   bool GetHotSpot(IntPoint&) const override;
   String FilenameExtension() const override;
 
diff --git a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer_test_helpers.h b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer_test_helpers.h
index 1159bfb..4f965678 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer_test_helpers.h
+++ b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer_test_helpers.h
@@ -279,9 +279,9 @@
 
   // ImplementationBase implementation
   void GenSyncTokenCHROMIUM(GLbyte* sync_token) override {
-    static uint64_t unique_id = 1;
-    gpu::SyncToken source(
-        gpu::GPU_IO, gpu::CommandBufferId::FromUnsafeValue(unique_id++), 2);
+    static gpu::CommandBufferId::Generator command_buffer_id_generator;
+    gpu::SyncToken source(gpu::GPU_IO,
+                          command_buffer_id_generator.GenerateNextId(), 2);
     memcpy(sync_token, &source, sizeof(source));
   }
 
diff --git a/third_party/blink/renderer/platform/graphics/graphics_context.cc b/third_party/blink/renderer/platform/graphics/graphics_context.cc
index 7ae6844..3acefef 100644
--- a/third_party/blink/renderer/platform/graphics/graphics_context.cc
+++ b/third_party/blink/renderer/platform/graphics/graphics_context.cc
@@ -58,6 +58,7 @@
 #include "third_party/skia/include/effects/SkTableColorFilter.h"
 #include "third_party/skia/include/pathops/SkPathOps.h"
 #include "third_party/skia/include/utils/SkNullCanvas.h"
+#include "ui/base/ui_base_features.h"
 
 namespace blink {
 
@@ -370,6 +371,10 @@
 namespace {
 
 int AdjustedFocusRingOffset(int offset, int width, bool is_outset) {
+  if (::features::IsFormControlsRefreshEnabled()) {
+    return 0;
+  }
+
 #if defined(OS_MACOSX)
   return offset + 2;
 #else
@@ -387,29 +392,37 @@
   // Unlike normal outlines (whole width is outside of the offset), focus
   // rings can be drawn with the center of the path aligned with the offset, so
   // only half of the width is outside of the offset.
+  if (::features::IsFormControlsRefreshEnabled()) {
+    // For FormControlsRefresh 2/3 of the width is outside of the offset.
+    return AdjustedFocusRingOffset(offset, width, is_outset) +
+           std::ceil(width / 3.f) * 2;
+  }
+
   return AdjustedFocusRingOffset(offset, width, is_outset) + (width + 1) / 2;
 }
 
 void GraphicsContext::DrawFocusRingPath(const SkPath& path,
                                         const Color& color,
-                                        float width) {
+                                        float width,
+                                        float border_radius) {
   DrawPlatformFocusRing(
       path, canvas_,
       dark_mode_filter_
           .InvertColorIfNeeded(color, DarkModeFilter::ElementRole::kBackground)
           .Rgb(),
-      width);
+      width, border_radius);
 }
 
 void GraphicsContext::DrawFocusRingRect(const SkRect& rect,
                                         const Color& color,
-                                        float width) {
+                                        float width,
+                                        float border_radius) {
   DrawPlatformFocusRing(
       rect, canvas_,
       dark_mode_filter_
           .InvertColorIfNeeded(color, DarkModeFilter::ElementRole::kBackground)
           .Rgb(),
-      width);
+      width, border_radius);
 }
 
 void GraphicsContext::DrawFocusRing(const Path& focus_ring_path,
@@ -420,12 +433,14 @@
   if (ContextDisabled())
     return;
 
-  DrawFocusRingPath(focus_ring_path.GetSkPath(), color, width);
+  DrawFocusRingPath(focus_ring_path.GetSkPath(), color, /*width=*/width,
+                    /*radius=*/width);
 }
 
 void GraphicsContext::DrawFocusRingInternal(const Vector<IntRect>& rects,
                                             float width,
                                             int offset,
+                                            float border_radius,
                                             const Color& color,
                                             bool is_outset) {
   if (ContextDisabled())
@@ -436,7 +451,11 @@
     return;
 
   SkRegion focus_ring_region;
-  offset = AdjustedFocusRingOffset(offset, std::ceil(width), is_outset);
+  if (!::features::IsFormControlsRefreshEnabled()) {
+    // For FormControlsRefresh the offset is already adjusted by
+    // GraphicsContext::DrawFocusRing.
+    offset = AdjustedFocusRingOffset(offset, std::ceil(width), is_outset);
+  }
   for (unsigned i = 0; i < rect_count; i++) {
     SkIRect r = rects[i];
     if (r.isEmpty())
@@ -449,12 +468,12 @@
     return;
 
   if (focus_ring_region.isRect()) {
-    DrawFocusRingRect(SkRect::Make(focus_ring_region.getBounds()), color,
-                      width);
+    DrawFocusRingRect(SkRect::Make(focus_ring_region.getBounds()), color, width,
+                      border_radius);
   } else {
     SkPath path;
     if (focus_ring_region.getBoundaryPath(&path))
-      DrawFocusRingPath(path, color, width);
+      DrawFocusRingPath(path, color, width, border_radius);
   }
 }
 
@@ -478,22 +497,46 @@
 void GraphicsContext::DrawFocusRing(const Vector<IntRect>& rects,
                                     float width,
                                     int offset,
+                                    float border_radius,
+                                    float min_border_width,
                                     const Color& color,
                                     bool is_outset) {
-  // If a focus ring is outset and the color is dark, it may be hard to see on
-  // dark backgrounds. In this case, we'll actually draw two focus rings, the
-  // outset focus ring with a white inner ring for contrast.
-  if (ShouldDrawInnerFocusRingForContrast(is_outset, width, color)) {
-    int contrast_offset = static_cast<int>(std::floor(width * 0.5));
-    // We create a 1px gap for the contrast ring. The contrast ring is drawn
-    // first, and we overdraw by a pixel to ensure no gaps or AA artifacts.
-    DrawFocusRingInternal(rects, contrast_offset, offset, SK_ColorWHITE,
-                          is_outset);
-    DrawFocusRingInternal(rects, width - contrast_offset,
-                          offset + contrast_offset, color, is_outset);
+  if (::features::IsFormControlsRefreshEnabled()) {
+    // The focus ring is made of two borders which have a 2:1 ratio.
+    const float first_border_width = (width / 3) * 2;
+    const float second_border_width = width - first_border_width;
 
+    offset = AdjustedFocusRingOffset(offset, std::ceil(width), is_outset);
+    // How much space the focus ring would like to take from the actual border.
+    const float inside_border_width = 1;
+    if (min_border_width >= inside_border_width) {
+      offset -= inside_border_width;
+    }
+    // The white ring is drawn first, and we overdraw to ensure no gaps or AA
+    // artifacts.
+    DrawFocusRingInternal(rects, first_border_width,
+                          offset + std::ceil(second_border_width),
+                          border_radius, SK_ColorWHITE, is_outset);
+    DrawFocusRingInternal(rects, first_border_width, offset, border_radius,
+                          color, is_outset);
   } else {
-    DrawFocusRingInternal(rects, width, offset, color, is_outset);
+    // If a focus ring is outset and the color is dark, it may be hard to see on
+    // dark backgrounds. In this case, we'll actually draw two focus rings, the
+    // outset focus ring with a white inner ring for contrast.
+    if (ShouldDrawInnerFocusRingForContrast(is_outset, width, color)) {
+      int contrast_offset = static_cast<int>(std::floor(width * 0.5));
+      // We create a 1px gap for the contrast ring. The contrast ring is drawn
+      // first, and we overdraw by a pixel to ensure no gaps or AA artifacts.
+      DrawFocusRingInternal(rects, contrast_offset, offset, border_radius,
+                            SK_ColorWHITE, is_outset);
+      DrawFocusRingInternal(rects, width - contrast_offset,
+                            offset + contrast_offset, border_radius, color,
+                            is_outset);
+
+    } else {
+      DrawFocusRingInternal(rects, width, offset, border_radius, color,
+                            is_outset);
+    }
   }
 }
 
@@ -978,7 +1021,8 @@
                                               &image_flags);
 
   bool use_shader = (visible_src == src_rect) &&
-                    (respect_orientation == kDoNotRespectImageOrientation);
+                    (respect_orientation == kDoNotRespectImageOrientation ||
+                     image->HasDefaultOrientation());
   if (use_shader) {
     const SkMatrix local_matrix = SkMatrix::MakeRectToRect(
         visible_src, dest.Rect(), SkMatrix::kFill_ScaleToFit);
diff --git a/third_party/blink/renderer/platform/graphics/graphics_context.h b/third_party/blink/renderer/platform/graphics/graphics_context.h
index 0e7b1135..5c1954d 100644
--- a/third_party/blink/renderer/platform/graphics/graphics_context.h
+++ b/third_party/blink/renderer/platform/graphics/graphics_context.h
@@ -371,6 +371,8 @@
   void DrawFocusRing(const Vector<IntRect>&,
                      float width,
                      int offset,
+                     float border_radius,
+                     float min_border_width,
                      const Color&,
                      bool is_outset);
   void DrawFocusRing(const Path&, float width, int offset, const Color&);
@@ -462,12 +464,19 @@
   void RestoreLayer();
 
   // Helpers for drawing a focus ring (drawFocusRing)
-  void DrawFocusRingPath(const SkPath&, const Color&, float width);
-  void DrawFocusRingRect(const SkRect&, const Color&, float width);
+  void DrawFocusRingPath(const SkPath&,
+                         const Color&,
+                         float width,
+                         float border_radius);
+  void DrawFocusRingRect(const SkRect&,
+                         const Color&,
+                         float width,
+                         float border_radius);
 
   void DrawFocusRingInternal(const Vector<IntRect>&,
                              float width,
                              int offset,
+                             float border_radius,
                              const Color&,
                              bool is_outset);
 
diff --git a/third_party/blink/renderer/platform/graphics/image.h b/third_party/blink/renderer/platform/graphics/image.h
index 165d4ee2..56aff7b 100644
--- a/third_party/blink/renderer/platform/graphics/image.h
+++ b/third_party/blink/renderer/platform/graphics/image.h
@@ -114,6 +114,9 @@
   IntRect Rect() const { return IntRect(IntPoint(), Size()); }
   int width() const { return Size().Width(); }
   int height() const { return Size().Height(); }
+
+  virtual bool HasDefaultOrientation() const { return true; }
+
   virtual bool GetHotSpot(IntPoint&) const { return false; }
 
   enum SizeAvailability {
diff --git a/third_party/blink/renderer/platform/graphics/skia/skia_utils.cc b/third_party/blink/renderer/platform/graphics/skia/skia_utils.cc
index 1e8ae93..bb51adf 100644
--- a/third_party/blink/renderer/platform/graphics/skia/skia_utils.cc
+++ b/third_party/blink/renderer/platform/graphics/skia/skia_utils.cc
@@ -38,6 +38,7 @@
 #include "third_party/blink/renderer/platform/wtf/allocator/partitions.h"
 #include "third_party/skia/include/effects/SkCornerPathEffect.h"
 #include "third_party/skia/include/third_party/skcms/skcms.h"
+#include "ui/base/ui_base_features.h"
 
 #include <algorithm>
 #include <cmath>
@@ -374,7 +375,8 @@
 void DrawPlatformFocusRing(const PrimitiveType& primitive,
                            cc::PaintCanvas* canvas,
                            SkColor color,
-                           float width) {
+                           float width,
+                           float border_radius) {
   PaintFlags flags;
   flags.setAntiAlias(true);
   flags.setStyle(PaintFlags::kStroke_Style);
@@ -388,6 +390,11 @@
   const float corner_radius = width;
 #endif
 
+  if (::features::IsFormControlsRefreshEnabled()) {
+    DrawFocusRingPrimitive(primitive, canvas, flags, border_radius);
+    return;
+  }
+
   DrawFocusRingPrimitive(primitive, canvas, flags, corner_radius);
 
 #if defined(OS_MACOSX)
@@ -398,14 +405,18 @@
 #endif
 }
 
-template void PLATFORM_EXPORT DrawPlatformFocusRing<SkRect>(const SkRect&,
-                                                            cc::PaintCanvas*,
-                                                            SkColor,
-                                                            float width);
-template void PLATFORM_EXPORT DrawPlatformFocusRing<SkPath>(const SkPath&,
-                                                            cc::PaintCanvas*,
-                                                            SkColor,
-                                                            float width);
+template void PLATFORM_EXPORT
+DrawPlatformFocusRing<SkRect>(const SkRect&,
+                              cc::PaintCanvas*,
+                              SkColor,
+                              float width,
+                              float border_radius);
+template void PLATFORM_EXPORT
+DrawPlatformFocusRing<SkPath>(const SkPath&,
+                              cc::PaintCanvas*,
+                              SkColor,
+                              float width,
+                              float border_radius);
 
 sk_sp<SkData> TryAllocateSkData(size_t size) {
   void* buffer = WTF::Partitions::BufferPartition()->AllocFlags(
diff --git a/third_party/blink/renderer/platform/graphics/skia/skia_utils.h b/third_party/blink/renderer/platform/graphics/skia/skia_utils.h
index b5f81ee..b35b6ce 100644
--- a/third_party/blink/renderer/platform/graphics/skia/skia_utils.h
+++ b/third_party/blink/renderer/platform/graphics/skia/skia_utils.h
@@ -144,7 +144,8 @@
 void DrawPlatformFocusRing(const PrimitiveType&,
                            cc::PaintCanvas*,
                            SkColor,
-                           float width);
+                           float width,
+                           float border_radius);
 
 // TODO(fmalita): remove in favor of direct SrcRectConstraint use.
 inline cc::PaintCanvas::SrcRectConstraint
diff --git a/third_party/blink/renderer/platform/heap/heap_page.cc b/third_party/blink/renderer/platform/heap/heap_page.cc
index 5084bd05..083e6a8 100644
--- a/third_party/blink/renderer/platform/heap/heap_page.cc
+++ b/third_party/blink/renderer/platform/heap/heap_page.cc
@@ -268,7 +268,7 @@
   if (GetThreadState()->SweepForbidden())
     return nullptr;
 
-  ThreadHeapStatsCollector::Scope stats_scope(
+  ThreadHeapStatsCollector::EnabledScope stats_scope(
       GetThreadState()->Heap().stats_collector(),
       ThreadHeapStatsCollector::kLazySweepOnAllocation);
   ThreadState::SweepForbiddenScope sweep_forbidden(GetThreadState());
diff --git a/third_party/blink/renderer/platform/heap/thread_state.cc b/third_party/blink/renderer/platform/heap/thread_state.cc
index 7842798b..08d102eb 100644
--- a/third_party/blink/renderer/platform/heap/thread_state.cc
+++ b/third_party/blink/renderer/platform/heap/thread_state.cc
@@ -1620,7 +1620,7 @@
 }
 
 void ThreadState::MarkPhaseVisitRoots() {
-  ThreadHeapStatsCollector::Scope stats_scope(
+  ThreadHeapStatsCollector::EnabledScope stats_scope(
       Heap().stats_collector(), ThreadHeapStatsCollector::kVisitRoots);
 
   Visitor* visitor = current_gc_data_.visitor.get();
diff --git a/third_party/blink/renderer/platform/heap/unified_heap_controller.cc b/third_party/blink/renderer/platform/heap/unified_heap_controller.cc
index 78c8242..c7f17541d 100644
--- a/third_party/blink/renderer/platform/heap/unified_heap_controller.cc
+++ b/third_party/blink/renderer/platform/heap/unified_heap_controller.cc
@@ -124,7 +124,7 @@
   ThreadHeapStatsCollector::BlinkGCInV8Scope nested_scope(
       thread_state_->Heap().stats_collector());
   if (!thread_state_->in_atomic_pause()) {
-    ThreadHeapStatsCollector::Scope advance_tracing_scope(
+    ThreadHeapStatsCollector::EnabledScope advance_tracing_scope(
         thread_state_->Heap().stats_collector(),
         ThreadHeapStatsCollector::kUnifiedMarkingStep);
     // V8 calls into embedder tracing from its own marking to ensure
diff --git a/third_party/blink/renderer/platform/loader/cors/cors.cc b/third_party/blink/renderer/platform/loader/cors/cors.cc
index d82ae65..68c569f0 100644
--- a/third_party/blink/renderer/platform/loader/cors/cors.cc
+++ b/third_party/blink/renderer/platform/loader/cors/cors.cc
@@ -160,12 +160,11 @@
 
 base::Optional<network::CorsErrorStatus> CheckAccess(
     const KURL& response_url,
-    const int response_status_code,
     const HTTPHeaderMap& response_header,
     network::mojom::CredentialsMode credentials_mode,
     const SecurityOrigin& origin) {
   return network::cors::CheckAccess(
-      response_url, response_status_code,
+      response_url,
       GetHeaderValue(response_header, http_names::kAccessControlAllowOrigin),
       GetHeaderValue(response_header,
                      http_names::kAccessControlAllowCredentials),
@@ -201,11 +200,6 @@
       url, request_mode, origin_to_pass, cors_flag == CorsFlag::Set, false);
 }
 
-base::Optional<network::mojom::CorsError> CheckPreflight(
-    const int preflight_response_status_code) {
-  return network::cors::CheckPreflight(preflight_response_status_code);
-}
-
 base::Optional<network::CorsErrorStatus> CheckExternalPreflight(
     const HTTPHeaderMap& response_header) {
   return network::cors::CheckExternalPreflight(
diff --git a/third_party/blink/renderer/platform/loader/cors/cors.h b/third_party/blink/renderer/platform/loader/cors/cors.h
index 7b1eef1..610c2c75 100644
--- a/third_party/blink/renderer/platform/loader/cors/cors.h
+++ b/third_party/blink/renderer/platform/loader/cors/cors.h
@@ -35,7 +35,6 @@
 // be removed.
 PLATFORM_EXPORT base::Optional<network::CorsErrorStatus> CheckAccess(
     const KURL&,
-    const int response_status_code,
     const HTTPHeaderMap&,
     network::mojom::CredentialsMode,
     const SecurityOrigin&);
@@ -53,9 +52,6 @@
     const SecurityOrigin*,
     CorsFlag);
 
-PLATFORM_EXPORT base::Optional<network::mojom::CorsError> CheckPreflight(
-    const int preflight_response_status_code);
-
 PLATFORM_EXPORT base::Optional<network::CorsErrorStatus> CheckExternalPreflight(
     const HTTPHeaderMap&);
 
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
index 5e6db27..07629c1c 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
@@ -756,9 +756,9 @@
               new_url, request_mode, origin.get(),
               GetCorsFlag() ? CorsFlag::Set : CorsFlag::Unset);
       if (!cors_error && GetCorsFlag()) {
-        cors_error = cors::CheckAccess(
-            new_url, redirect_response.HttpStatusCode(),
-            redirect_response.HttpHeaderFields(), credentials_mode, *origin);
+        cors_error =
+            cors::CheckAccess(new_url, redirect_response.HttpHeaderFields(),
+                              credentials_mode, *origin);
       }
       if (cors_error) {
         HandleError(
@@ -1021,9 +1021,8 @@
       !(resource_->IsCacheValidator() && response.HttpStatusCode() == 304)) {
     if (GetCorsFlag()) {
       base::Optional<network::CorsErrorStatus> cors_error = cors::CheckAccess(
-          response.CurrentRequestUrl(), response.HttpStatusCode(),
-          response.HttpHeaderFields(), initial_request.GetCredentialsMode(),
-          *resource_->GetOrigin());
+          response.CurrentRequestUrl(), response.HttpHeaderFields(),
+          initial_request.GetCredentialsMode(), *resource_->GetOrigin());
       if (cors_error) {
         HandleError(ResourceError(response.CurrentRequestUrl(), *cors_error));
         return;
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_response.h b/third_party/blink/renderer/platform/loader/fetch/resource_response.h
index 9ba1090..bf3846b 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_response.h
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_response.h
@@ -282,6 +282,9 @@
   bool IsLegacyTLSVersion() const { return is_legacy_tls_version_; }
   void SetIsLegacyTLSVersion(bool value) { is_legacy_tls_version_ = value; }
 
+  bool TimingAllowPassed() const { return timing_allow_passed_; }
+  void SetTimingAllowPassed(bool value) { timing_allow_passed_ = value; }
+
   SecurityStyle GetSecurityStyle() const { return security_style_; }
   void SetSecurityStyle(SecurityStyle security_style) {
     security_style_ = security_style;
@@ -504,6 +507,10 @@
   // will be removed in the future.
   bool is_legacy_tls_version_ = false;
 
+  // True if the Timing-Allow-Origin check passes.
+  // https://fetch.spec.whatwg.org/#concept-response-timing-allow-passed
+  bool timing_allow_passed_ = false;
+
   // The time at which the resource's certificate expires. Null if there was no
   // certificate.
   base::Time cert_validity_start_;
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_ice_candidate_platform.cc b/third_party/blink/renderer/platform/peerconnection/rtc_ice_candidate_platform.cc
index 2e510b3..e9cbb3e 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_ice_candidate_platform.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_ice_candidate_platform.cc
@@ -40,26 +40,6 @@
 
 }  // namespace
 
-// static
-RTCIceCandidatePlatform* RTCIceCandidatePlatform::Create(
-    String candidate,
-    String sdp_mid,
-    base::Optional<uint16_t> sdp_m_line_index,
-    String username_fragment) {
-  return MakeGarbageCollected<RTCIceCandidatePlatform>(
-      std::move(candidate), std::move(sdp_mid), std::move(sdp_m_line_index),
-      std::move(username_fragment));
-}
-
-RTCIceCandidatePlatform* RTCIceCandidatePlatform::Create(String candidate,
-                                                         String sdp_mid,
-                                                         int sdp_m_line_index) {
-  return MakeGarbageCollected<RTCIceCandidatePlatform>(
-      std::move(candidate), std::move(sdp_mid),
-      sdp_m_line_index < 0 ? base::Optional<uint16_t>()
-                           : base::Optional<uint16_t>(sdp_m_line_index));
-}
-
 RTCIceCandidatePlatform::RTCIceCandidatePlatform(
     String candidate,
     String sdp_mid,
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_ice_candidate_platform.h b/third_party/blink/renderer/platform/peerconnection/rtc_ice_candidate_platform.h
index 0c7bb50..2751f57 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_ice_candidate_platform.h
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_ice_candidate_platform.h
@@ -44,21 +44,12 @@
   // Creates a new RTCIceCandidatePlatform using |candidate|, |sdp_mid| and
   // |sdp_m_line_index|. If |sdp_m_line_index| is negative, it is
   // considered as having no value.
-  static RTCIceCandidatePlatform* Create(String candidate,
-                                         String sdp_mid,
-                                         int sdp_m_line_index);
-
-  // Creates a new RTCIceCandidatePlatform using |candidate|, |sdp_mid|,
-  // |sdp_m_line_index|, and |username_fragment|.
-  static RTCIceCandidatePlatform* Create(
-      String candidate,
-      String sdp_mid,
-      base::Optional<uint16_t> sdp_m_line_index,
-      String username_fragment);
-
   RTCIceCandidatePlatform(String candidate,
                           String sdp_mid,
                           base::Optional<uint16_t> sdp_m_line_index);
+
+  // Creates a new RTCIceCandidatePlatform using |candidate|, |sdp_mid|,
+  // |sdp_m_line_index|, and |username_fragment|.
   RTCIceCandidatePlatform(String candidate,
                           String sdp_mid,
                           base::Optional<uint16_t> sdp_m_line_index,
diff --git a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
index f7088043..30a099a 100755
--- a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
+++ b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
@@ -866,6 +866,7 @@
             'third_party/blink/renderer/core/layout/layout_theme.cc',
             'third_party/blink/renderer/core/paint/fallback_theme.cc',
             'third_party/blink/renderer/core/paint/fallback_theme.h',
+            'third_party/blink/renderer/core/paint/object_painter_base.cc',
             'third_party/blink/renderer/core/paint/theme_painter.cc',
         ],
         'allowed': ['ui::NativeTheme.*'],
diff --git a/third_party/blink/web_tests/FlagExpectations/composite-after-paint b/third_party/blink/web_tests/FlagExpectations/composite-after-paint
index a8de3af..14e1e874 100644
--- a/third_party/blink/web_tests/FlagExpectations/composite-after-paint
+++ b/third_party/blink/web_tests/FlagExpectations/composite-after-paint
@@ -57,8 +57,6 @@
 virtual/android/url-bar/bottom-fixed-adjusted-when-showing-url-bar.html [ Crash ]
 
 # Composited filters are not working.
-crbug.com/1008501 compositing/culling/filter-occlusion-blur-large.html [ Failure ]
-crbug.com/1008501 compositing/culling/filter-occlusion-blur.html [ Failure ]
 crbug.com/1008501 compositing/reflections/deeply-nested-reflections.html [ Failure ]
 
 # Wrong contentsOpaque or background color.
@@ -238,3 +236,41 @@
 crbug.com/1039401 virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125.html [ Failure ]
 crbug.com/1039401 virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance.html [ Failure ]
 crbug.com/1039401 virtual/scroll_customization/fast/scrolling/scrollbar-mousedown-mouseup.html [ Failure Pass ]
+
+# TODO(iopopesc) these need to be rebaselined for FormControlsRefresh focus ring.
+crbug.com/1035582 fast/css/focus-ring-detached.html [ Skip ]
+crbug.com/1035582 fast/events/sequential-focus-navigation-starting-point.html [ Skip ]
+crbug.com/1035582 fast/inline/continuation-outlines-with-layers.html [ Skip ]
+crbug.com/1035582 fast/inline/continuation-outlines.html [ Skip ]
+crbug.com/1035582 paint/invalidation/4776765.html [ Skip ]
+crbug.com/1035582 paint/invalidation/clip/caret-ancestor-clip-change.html [ Skip ]
+crbug.com/1035582 paint/invalidation/invalidate-caret-before-text-node-update.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/focus-continuations.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/focus-enable-continuations.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/focus-ring-on-child-move.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/focus-ring-on-continuation-move.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/focus-ring-on-inline-continuation-move.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/outline-become-affected-by-descendant.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/outline-become-not-affected-by-descendant.html [ Skip ]
+crbug.com/1035582 paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container.html [ Skip ]
+crbug.com/1035582 paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container.html [ Skip ]
+crbug.com/1035582 paint/invalidation/svg/focus-element.html [ Skip ]
+crbug.com/1035582 paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem.html [ Skip ]
+crbug.com/1035582 paint/invalidation/svg/transform-focus-ring-repaint.html [ Skip ]
+crbug.com/1035582 paint/invalidation/table/caret-contenteditable-content-after.html [ Skip ]
+crbug.com/1035582 virtual/controls-refresh/focus-rect/focus-ring-detached.html [ Skip ]
+crbug.com/1035582 virtual/mouseevent_fractional/fast/events/sequential-focus-navigation-starting-point.html [ Skip ]
+crbug.com/1035582 external/wpt/css/css-pseudo/selection-text-shadow-016.html [ Skip ]
+crbug.com/1035582 external/wpt/css/css-text-decor/text-decoration-subelements-001.html [ Skip ]
+crbug.com/1035582 paint/background/background-clip-text-descendants.html [ Skip ]
+crbug.com/1035582 tables/mozilla/bugs/bug2479-3.html [ Skip ]
+crbug.com/1035582 virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic.html [ Skip ]
+crbug.com/1035582 virtual/composite-after-paint/paint/background/background-clip-text-descendants.html [ Skip ]
+crbug.com/1035582 virtual/forced-high-contrast-cascade/external/wpt/forced-colors-mode/forced-colors-mode-14.html [ Skip ]
+crbug.com/1035582 virtual/form-controls-refresh-disabled/fast/forms/select-popup/popup-menu-appearance-zoom.html [ Skip ]
+crbug.com/1035582 virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance.html [ Skip ]
+crbug.com/1035582 fast/hidpi/scrollbar-appearance-increase-device-scale-factor.html [ Skip ]
+crbug.com/1035582 paint/invalidation/overflow/float-overflow-right.html [ Skip ]
+crbug.com/1035582 virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations.html [ Skip ]
+crbug.com/1035582 virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance.html [ Skip ]
+crbug.com/1035582 paint/invalidation/forms/submit-focus-by-mouse-then-keydown.html [ Skip ]
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index e3e8ba09..018a9f0 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -425,7 +425,6 @@
 virtual/text-antialias/ellipsis-with-self-painting-layer.html [ Failure ]
 virtual/text-antialias/zwnj-disables-kerning.html [ Failure ]
 virtual/text-antialias/international/shape-across-elements-simple.html [ Failure ]
-paint/invalidation/overflow/float-overflow-right.html [ Failure ]
 paint/invalidation/overflow/float-overflow.html [ Failure ]
 scrollingcoordinator/non-fast-scrollable-transform-changed.html [ Crash ]
 svg/zoom/text/zoom-svg-float-border-padding.xml [ Failure ]
@@ -456,3 +455,41 @@
 crbug.com/6606 external/wpt/mathml/* [ Skip ]
 
 crbug.com/1034944 webexposed/global-interface-listing.html [ Skip ]
+
+# TODO(iopopesc) these need to be rebaselined for FormControlsRefresh focus ring.
+crbug.com/1035582 fast/css/focus-ring-detached.html [ Skip ]
+crbug.com/1035582 fast/events/sequential-focus-navigation-starting-point.html [ Skip ]
+crbug.com/1035582 fast/inline/continuation-outlines-with-layers.html [ Skip ]
+crbug.com/1035582 fast/inline/continuation-outlines.html [ Skip ]
+crbug.com/1035582 paint/invalidation/4776765.html [ Skip ]
+crbug.com/1035582 paint/invalidation/clip/caret-ancestor-clip-change.html [ Skip ]
+crbug.com/1035582 paint/invalidation/invalidate-caret-before-text-node-update.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/focus-continuations.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/focus-enable-continuations.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/focus-ring-on-child-move.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/focus-ring-on-continuation-move.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/focus-ring-on-inline-continuation-move.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/outline-become-affected-by-descendant.html [ Skip ]
+crbug.com/1035582 paint/invalidation/outline/outline-become-not-affected-by-descendant.html [ Skip ]
+crbug.com/1035582 paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container.html [ Skip ]
+crbug.com/1035582 paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container.html [ Skip ]
+crbug.com/1035582 paint/invalidation/svg/focus-element.html [ Skip ]
+crbug.com/1035582 paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem.html [ Skip ]
+crbug.com/1035582 paint/invalidation/svg/transform-focus-ring-repaint.html [ Skip ]
+crbug.com/1035582 paint/invalidation/table/caret-contenteditable-content-after.html [ Skip ]
+crbug.com/1035582 virtual/controls-refresh/focus-rect/focus-ring-detached.html [ Skip ]
+crbug.com/1035582 virtual/mouseevent_fractional/fast/events/sequential-focus-navigation-starting-point.html [ Skip ]
+crbug.com/1035582 external/wpt/css/css-pseudo/selection-text-shadow-016.html [ Skip ]
+crbug.com/1035582 external/wpt/css/css-text-decor/text-decoration-subelements-001.html [ Skip ]
+crbug.com/1035582 paint/background/background-clip-text-descendants.html [ Skip ]
+crbug.com/1035582 tables/mozilla/bugs/bug2479-3.html [ Skip ]
+crbug.com/1035582 virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic.html [ Skip ]
+crbug.com/1035582 virtual/composite-after-paint/paint/background/background-clip-text-descendants.html [ Skip ]
+crbug.com/1035582 virtual/forced-high-contrast-cascade/external/wpt/forced-colors-mode/forced-colors-mode-14.html [ Skip ]
+crbug.com/1035582 virtual/form-controls-refresh-disabled/fast/forms/select-popup/popup-menu-appearance-zoom.html [ Skip ]
+crbug.com/1035582 virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance.html [ Skip ]
+crbug.com/1035582 fast/hidpi/scrollbar-appearance-increase-device-scale-factor.html [ Skip ]
+crbug.com/1035582 paint/invalidation/overflow/float-overflow-right.html [ Skip ]
+crbug.com/1035582 virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations.html [ Skip ]
+crbug.com/1035582 virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance.html [ Skip ]
+crbug.com/1035582 http/tests/devtools/sources/debugger-breakpoints/disable-breakpoints.js [ Skip ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 771fbf70..629fa67 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -2650,6 +2650,10 @@
 crbug.com/1035582 external/wpt/css/css-pseudo/spelling-error-003-manual.html [ Skip ]
 crbug.com/1035582 external/wpt/css/css-transforms/transform-input-015.html [ Skip ]
 
+# Focus ring related
+crbug.com/1035582 fast/forms/text/input-appearance-autocomplete-very-long-value.html [ Skip ]
+crbug.com/1035582 virtual/text-antialias/selection/mixed-directionality-selection.html [ Skip ]
+
 # ======
 # ====== End of rebaselines for crbug.com/1035582 ======
 # ======
@@ -3692,6 +3696,7 @@
 crbug.com/626703 [ Mac ] external/wpt/service-workers/service-worker/ready.https.window.html [ Timeout ]
 crbug.com/626703 [ Win ] external/wpt/service-workers/service-worker/ready.https.window.html [ Timeout ]
 crbug.com/626703 [ Win7 ] external/wpt/pointerevents/pointerevent_touch-action-pan-x-css_touch.html [ Timeout ]
+crbug.com/1040874 [ Mac ] external/wpt/pointerevents/pointerevent_pointercapture_in_frame.html [ Pass Failure ]
 crbug.com/626703 [ Linux ] external/wpt/css/motion/offset-anchor-transform-box-fill-box-003.html [ Failure ]
 crbug.com/626703 [ Mac ] external/wpt/css/motion/offset-anchor-transform-box-fill-box-003.html [ Failure ]
 crbug.com/626703 [ Win ] external/wpt/css/motion/offset-anchor-transform-box-fill-box-003.html [ Failure ]
@@ -6761,10 +6766,6 @@
 crbug.com/994692 [ Linux ] compositing/reflections/nested-reflection-anchor-point.html [ Pass Failure ]
 crbug.com/994692 [ Win ] compositing/reflections/nested-reflection-anchor-point.html [ Pass Failure ]
 
-crbug.com/1003943 external/wpt/element-timing/multi-redirect-image.html [ Failure ]
-crbug.com/1003943 virtual/scalefactor200/external/wpt/element-timing/multi-redirect-image.html [ Failure ]
-crbug.com/1003943 virtual/scalefactor200withoutzoom/external/wpt/element-timing/multi-redirect-image.html [ Failure ]
-
 # Video flakily not being being rendered on Mac
 crbug.com/979298 [ Mac ] media/controls/captions-menu-always-visible.html [ Pass Failure ]
 crbug.com/979298 [ Mac ] media/controls/overflow-menu-always-visible.html [ Pass Failure ]
@@ -7106,7 +7107,7 @@
 crbug.com/1034492 http/tests/devtools/unit/soft-drop-down.js [ Pass Failure ]
 
 # Sheriff 2019-12-17
-crbug.com/1034789 [ Mac10.13 ] http/tests/security/frameNavigation/xss-ALLOWED-parent-navigation-change-async.html [ Pass Timeout ]
+crbug.com/1034789 [ Mac ] http/tests/security/frameNavigation/xss-ALLOWED-parent-navigation-change-async.html [ Pass Timeout ]
 crbug.com/1034789 [ Mac10.13 ] virtual/threaded/fast/scroll-snap/snap-to-target-on-layout-change.html [ Pass Timeout ]
 crbug.com/1034789 [ Mac10.13 ] external/wpt/pointerevents/pointerevent_coalesced_events_attributes.html [ Pass Failure ]
 crbug.com/1034839 css3/filters/effect-reference-image.html [ Pass Failure ]
@@ -7174,7 +7175,6 @@
 crbug.com/1039401 [ Linux ] external/wpt/css/css-images/image-orientation/image-orientation-none.html [ Failure ]
 crbug.com/1039401 [ Linux ] external/wpt/css/css-text-decor/text-decoration-subelements-002.html [ Failure ]
 crbug.com/1039401 [ Linux ] external/wpt/css/css-text-decor/text-decoration-subelements-003.html [ Failure ]
-crbug.com/1039401 [ Linux ] fast/backgrounds/background-svg-scaling.html [ Failure ]
 crbug.com/1039401 [ Linux ] fast/backgrounds/size/contain-and-cover.html [ Failure ]
 crbug.com/1039401 [ Linux ] fast/dom/HTMLMeterElement/meter-boundary-values.html [ Failure ]
 crbug.com/1039401 [ Linux ] fast/dom/HTMLMeterElement/meter-optimums.html [ Failure ]
@@ -7183,7 +7183,6 @@
 crbug.com/1039401 [ Linux ] paint/invalidation/forms/range-focus-by-mouse-then-keydown.html [ Failure ]
 crbug.com/1039401 [ Linux ] svg/W3C-SVG-1.1/filters-turb-01-f.svg [ Failure ]
 crbug.com/1039401 [ Linux ] svg/as-background-image/background-image-preserveaspectRatio-support.html [ Failure ]
-crbug.com/1039401 [ Linux ] svg/as-image/image-respects-deviceScaleFactor.html [ Failure ]
 crbug.com/1039401 [ Linux ] svg/zoom/page/zoom-background-image-tiled.html [ Failure ]
 crbug.com/1039401 [ Linux ] svg/zoom/page/zoom-background-images.html [ Failure ]
 crbug.com/1039401 [ Linux ] svg/zoom/page/zoom-img-preserveAspectRatio-support-1.html [ Failure ]
@@ -7236,3 +7235,6 @@
 
 # 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
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index e37f8df..344f801 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -68,13 +68,15 @@
     "prefix": "gpu-rasterization",
     "bases": ["images"],
     "args": ["--force-gpu-rasterization",
-             "--enable-features=DecodeLossyWebPImagesToYUV"]
+             "--enable-features=DecodeLossyWebPImagesToYUV",
+             "--enable-features=DecodeJpeg420ImagesToYUV"]
   },
   {
     "prefix": "gpu-rasterization-disable-yuv",
     "bases": ["images/yuv-decode-eligible"],
     "args": ["--force-gpu-rasterization",
-             "--disable-features=DecodeLossyWebPImagesToYUV"]
+             "--disable-features=DecodeLossyWebPImagesToYUV",
+             "--disable-features=DecodeJpeg420ImagesToYUV"]
   },
   {
     "prefix": "exotic-color-space",
diff --git a/third_party/blink/web_tests/WPTOverrideExpectations b/third_party/blink/web_tests/WPTOverrideExpectations
index cf1ca2c..85f79c1 100644
--- a/third_party/blink/web_tests/WPTOverrideExpectations
+++ b/third_party/blink/web_tests/WPTOverrideExpectations
@@ -847,6 +847,7 @@
 # Here are tests that were failing on WPT waterfall as of Dec. 2, 2019. They are triaged.
 # ---
 # Reftest with pixel diff. Fails locally. Fails on wpt.fyi
+external/wpt/compat/webkit-box-rtl-flex.html [ Failure ]
 external/wpt/css/css-fonts/font-display/font-display-change.html [ Failure ]
 external/wpt/css/css-layout-api/fallback-layout/constructor-error.https.html [ Failure ]
 external/wpt/mathml/presentation-markup/direction/direction-007.html [ Failure ]
diff --git a/third_party/blink/web_tests/WebDriverExpectations b/third_party/blink/web_tests/WebDriverExpectations
index 913d0a4e..3a89302 100644
--- a/third_party/blink/web_tests/WebDriverExpectations
+++ b/third_party/blink/web_tests/WebDriverExpectations
@@ -161,3 +161,4 @@
 crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/new_session/default_values.py>>test_desired [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/take_screenshot/user_prompts.py>>test_dismiss_and_notify[capabilities0-alert] [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/take_element_screenshot/user_prompts.py>>test_ignore[capabilities0-alert] [ Failure ]
+crbug.com/1023255 [ Linux ] external/wpt/webdriver/tests/take_element_screenshot/iframe.py>>test_frame_element [ Failure Pass ]
diff --git a/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur-expected.png b/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur-expected.png
index 46428a3..ed6192a 100644
--- a/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur-expected.png
+++ b/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur-large-expected.png b/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur-large-expected.png
index 644f773..5338936 100644
--- a/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur-large-expected.png
+++ b/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur-large-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur-large.html b/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur-large.html
index 55743da..6ec4431 100644
--- a/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur-large.html
+++ b/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur-large.html
@@ -10,8 +10,6 @@
     will-change: transform;
   }
   .yellow-parent {
-    width: 800px;
-    height:  800px;
     -webkit-filter: blur(10px);
   }
   .centered {
diff --git a/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur.html b/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur.html
index ded27518..6512f22a 100644
--- a/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur.html
+++ b/third_party/blink/web_tests/compositing/culling/filter-occlusion-blur.html
@@ -6,8 +6,6 @@
     will-change: transform;
   }
   .yellow-parent {
-    width: 600px;
-    height:  600px;
     -webkit-filter: blur(10px);
   }
   .centered {
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 8075d947..e33352b 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
@@ -251161,6 +251161,12 @@
      }
     ]
    ],
+   "html/cross-origin-opener-policy/popup-meta-http-equiv.https.html": [
+    [
+     "html/cross-origin-opener-policy/popup-meta-http-equiv.https.html",
+     {}
+    ]
+   ],
    "html/cross-origin-opener-policy/popup-redirect-cache.https.html": [
     [
      "html/cross-origin-opener-policy/popup-redirect-cache.https.html",
@@ -457367,6 +457373,10 @@
    "46ad58d83bf6e98913ca4c564b7acb8f19fa0093",
    "support"
   ],
+  "html/cross-origin-opener-policy/popup-meta-http-equiv.https.html": [
+   "e36b5190aafc0b42b043802422dd411a831a20a5",
+   "testharness"
+  ],
   "html/cross-origin-opener-policy/popup-meta-http-equiv.https.html.headers": [
    "46ad58d83bf6e98913ca4c564b7acb8f19fa0093",
    "support"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-overflow/overflow-recalc-001.html b/third_party/blink/web_tests/external/wpt/css/css-overflow/overflow-recalc-001.html
new file mode 100644
index 0000000..9c5919a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-overflow/overflow-recalc-001.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<title>CSS Overflow: Overflow recalc after font-size change</title>
+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow/">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1036644">
+<link rel="match" href="reference/overflow-recalc-001-ref.html">
+<meta name="assert" content="Checks that overflow of an inline element is properly recomputed after changes on the descendants.">
+<script src="/common/reftest-wait.js"></script>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+#scroller {
+  height: 200px;
+  overflow: scroll;
+  position: relative;
+}
+#wrapper {
+  margin-top: 100px;
+  width: 200px;
+  height: 200px;
+  overflow: hidden;
+  font-family: Ahem;
+  line-height: 1;
+  color: green;
+}
+#red {
+  background: red;
+  width: 200px;
+  height: 200px;
+  position: absolute;
+  top: 100px;
+  z-index: -1;
+}
+</style>
+<p>Test passes if there is <strong>no red</strong>.</p>
+<div id="scroller">
+  <div id="wrapper">
+    <span id="inlineouter">
+      <span id="inlineinner">X</span>
+    </span>
+  </div>
+  <div id="red"></div>
+</div>
+
+<script>
+  requestAnimationFrame(() => requestAnimationFrame(() => {
+    inlineinner.style.fontSize = "200px";
+    takeScreenshot();
+  }));
+</script>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-overflow/reference/overflow-recalc-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-overflow/reference/overflow-recalc-001-ref.html
new file mode 100644
index 0000000..b18dee8c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-overflow/reference/overflow-recalc-001-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: Reference Overflow recalc after font-size change</title>
+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
+<style>
+#scroller {
+  height: 200px;
+  overflow: scroll;
+}
+#wrapper {
+  margin-top: 100px;
+  width: 200px;
+  height: 200px;
+  background: green;
+}
+</style>
+<p>Test passes if there is <strong>no red</strong>.</p>
+<div id="scroller">
+  <div id="wrapper"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/element-timing/multi-redirect-image.html b/third_party/blink/web_tests/external/wpt/element-timing/multi-redirect-image.html
index c2f570f..2a12c5f 100644
--- a/third_party/blink/web_tests/external/wpt/element-timing/multi-redirect-image.html
+++ b/third_party/blink/web_tests/external/wpt/element-timing/multi-redirect-image.html
@@ -18,7 +18,7 @@
             + '/resource-timing/resources/multi_redirect.py?';
     destUrl += 'page_origin=' +  get_host_info().HTTP_ORIGIN;
     destUrl += '&cross_origin=' + get_host_info().HTTP_REMOTE_ORIGIN;
-    destUrl += '&final_resource=' + '/images/blue.png';
+    destUrl += '&final_resource=' + '/element-timing/resources/circle.svg';
     destUrl += '&timing_allow=1';
     destUrl += '&tao_steps=';
     for (let taoSteps=0; taoSteps < 4; taoSteps++) {
diff --git a/third_party/blink/web_tests/external/wpt/element-timing/resources/circle.svg.headers b/third_party/blink/web_tests/external/wpt/element-timing/resources/circle.svg.headers
new file mode 100644
index 0000000..7296361
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/element-timing/resources/circle.svg.headers
@@ -0,0 +1 @@
+Timing-Allow-Origin: *
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-meta-http-equiv.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-meta-http-equiv.https.html
new file mode 100644
index 0000000..e36b519
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-meta-http-equiv.https.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<meta http-equiv="Cross-Origin-Opener-Policy" content="same-origin"><!-- should not be supported -->
+<meta charset=utf-8>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="resources/common.js"></script>
+
+<div id=log></div>
+<script>
+
+let tests = [
+  // popup Origin, popup COOP, expect opener
+  [SAME_ORIGIN, "", true],
+];
+
+run_coop_tests("same-origin", tests);
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/largest-contentful-paint/multi-redirects-TAO.html b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/multi-redirects-TAO.html
new file mode 100644
index 0000000..4e462c7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/largest-contentful-paint/multi-redirects-TAO.html
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf-8" />
+<title>This test validates LargestContenfulPaint information for cross-origin redirect chain images.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/largest-contentful-paint-helpers.js"></script>
+<script src=/common/get-host-info.sub.js></script>
+</head>
+<body>
+<script>
+async_test(t => {
+    if (!window.LargestContentfulPaint) {
+      assert_unreached("LargestContentfulPaint is not implemented");
+    }
+    let destUrl = get_host_info().HTTP_REMOTE_ORIGIN
+            + '/resource-timing/resources/multi_redirect.py?';
+    destUrl += 'page_origin=' +  get_host_info().HTTP_ORIGIN;
+    destUrl += '&cross_origin=' + get_host_info().HTTP_REMOTE_ORIGIN;
+    destUrl += '&final_resource=' + '/element-timing/resources/circle.svg';
+    destUrl += '&timing_allow=1';
+    destUrl += '&tao_steps=';
+
+    const image = document.createElement('img');
+    image.src = destUrl + '0';
+    image.setAttribute('id', 'id');
+    document.body.appendChild(image);
+
+    let numObserved = 0;
+    let beforeLoad = performance.now();
+
+    new PerformanceObserver(t.step_func(entries => {
+        assert_equals(entries.getEntries().length, 1);
+        const entry = entries.getEntries()[0];
+        const options = numObserved === 3 ? [] : ['renderTimeIs0'];
+        checkImage(entry, destUrl + numObserved, 'id', 200 * 200, beforeLoad, options);
+        numObserved++;
+        if (numObserved === 4)
+            t.done();
+        else {
+            // Change the image to trigger a new LCP entry.
+            const img = document.getElementById('id');
+            image.src = destUrl + numObserved;
+            beforeLoad = performance.now();
+        }
+    })).observe({type: 'largest-contentful-paint'});
+}, 'Cross-origin image without TAO should not have its renderTime set, with full TAO it should.');
+</script>
+</body>
+</html>
+
diff --git a/third_party/blink/web_tests/fast/overflow/visual-overflow-recalc-expected.html b/third_party/blink/web_tests/fast/overflow/visual-overflow-recalc-expected.html
deleted file mode 100644
index 58b1d2d3..0000000
--- a/third_party/blink/web_tests/fast/overflow/visual-overflow-recalc-expected.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html>
-<style>
-#scroller {
-  height: 200px;
-  overflow: scroll;
-}
-#wrapper {
-  margin-top: 100px;
-  width: 200px;
-  height: 200px;
-  background: green;
-}
-</style>
-<p>Test passes if there is <strong>no red</strong>.</p>
-<div id="scroller">
-  <div id="wrapper">
-</div>
diff --git a/third_party/blink/web_tests/fast/overflow/visual-overflow-recalc.html b/third_party/blink/web_tests/fast/overflow/visual-overflow-recalc.html
deleted file mode 100644
index d9e6ae8..0000000
--- a/third_party/blink/web_tests/fast/overflow/visual-overflow-recalc.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html>
-<script src="../../resources/run-after-layout-and-paint.js"></script>
-<style>
-#scroller {
-  height: 200px;
-  overflow: scroll;
-  position: relative;
-}
-#wrapper {
-  margin-top: 100px;
-  width: 200px;
-  height: 200px;
-  overflow: hidden;
-  font-family: Ahem;
-  color: green;
-}
-#red {
-  background: red;
-  width: 200px;
-  height: 200px;
-  position: absolute;
-  top: 100px;
-  z-index: -1;
-}
-</style>
-<p>Test passes if there is <strong>no red</strong>.</p>
-<div id="scroller">
-  <div id="wrapper">
-    <span id="inlineouter">
-      <span id="inlineinner">X</span>
-    </span>
-  </div>
-  <div id="red"></div>
-</div>
-
-<script>
-  runAfterLayoutAndPaint(function() {
-    inlineinner.style.fontSize = "200px";
-  }, true);
-</script>
diff --git a/third_party/blink/web_tests/http/tests/push_messaging/subscribe-success-in-document.html b/third_party/blink/web_tests/http/tests/push_messaging/subscribe-success-in-document.html
index 9c64e1f..ee744e8 100644
--- a/third_party/blink/web_tests/http/tests/push_messaging/subscribe-success-in-document.html
+++ b/third_party/blink/web_tests/http/tests/push_messaging/subscribe-success-in-document.html
@@ -18,10 +18,13 @@
             swRegistration = serviceWorkerRegistration;
             return wait_for_state(test, swRegistration.installing, 'activated');
         })
-        .then(function() {
+        .then(async function() {
             // If running manually, grant permission when prompted.
-            if (window.testRunner)
-                testRunner.setPermission('push-messaging', 'granted', location.origin, location.origin);
+            if (window.internals) {
+                await window.internals.setPermission(
+                    {name: 'push', userVisibleOnly: true}, 'granted',
+                    location.origin, location.origin);
+            }
             return swRegistration.pushManager.subscribe({ userVisibleOnly: true });
         })
         .then(function(pushSubscription) {
diff --git a/third_party/blink/web_tests/http/tests/resources/permissions-helper.js b/third_party/blink/web_tests/http/tests/resources/permissions-helper.js
index 7e513aa..5ffc949 100644
--- a/third_party/blink/web_tests/http/tests/resources/permissions-helper.js
+++ b/third_party/blink/web_tests/http/tests/resources/permissions-helper.js
@@ -1,5 +1,5 @@
 // This file provides a PermissionsHelper object which can be used by
-// LayoutTests using testRunner to handle permissions. The methods in the object
+// LayoutTests to handle permissions. The methods in the object
 // return promises so can be used to write idiomatic, race-free code.
 //
 // The current available methods are:
@@ -46,21 +46,7 @@
 
   return {
     setPermission: function(name, state) {
-      return new Promise(function(resolver, reject) {
-        navigator.permissions.query(nameToObject(name)).then(function(result) {
-            if (result.state == state) {
-                resolver()
-                return;
-            }
-
-            result.onchange = function() {
-                result.onchange = null;
-                resolver();
-            };
-
-            testRunner.setPermission(name, state, location.origin, location.origin);
-        });
-      });
+      return internals.setPermission(nameToObject(name), state, location.origin, location.origin);
     }
   }
 })();
diff --git a/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-001-expected.png b/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-001-expected.png
new file mode 100644
index 0000000..cabbc51
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-002-expected.png b/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-002-expected.png
new file mode 100644
index 0000000..cabbc51
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-003-expected.png b/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-003-expected.png
new file mode 100644
index 0000000..cabbc51
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-004-expected.png b/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-004-expected.png
new file mode 100644
index 0000000..cabbc51
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-005-expected.png b/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-005-expected.png
new file mode 100644
index 0000000..cabbc51
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/editing/pasteboard/paste-line-endings-005-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/editing/selection/6476-expected.png b/third_party/blink/web_tests/platform/fuchsia/editing/selection/6476-expected.png
new file mode 100644
index 0000000..ceb400f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/editing/selection/6476-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/editing/selection/leave-requested-block-expected.png b/third_party/blink/web_tests/platform/fuchsia/editing/selection/leave-requested-block-expected.png
new file mode 100644
index 0000000..37487384
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/editing/selection/leave-requested-block-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/editing/selection/previous-line-position-expected.png b/third_party/blink/web_tests/platform/fuchsia/editing/selection/previous-line-position-expected.png
new file mode 100644
index 0000000..d340897
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/editing/selection/previous-line-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/editing/style/block-styles-007-expected.png b/third_party/blink/web_tests/platform/fuchsia/editing/style/block-styles-007-expected.png
new file mode 100644
index 0000000..5dc9b6a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/editing/style/block-styles-007-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/fast/css/focus-ring-multiline-expected.png b/third_party/blink/web_tests/platform/fuchsia/fast/css/focus-ring-multiline-expected.png
new file mode 100644
index 0000000..ca124578
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/fast/css/focus-ring-multiline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/fast/events/reveal-link-when-focused-expected.png b/third_party/blink/web_tests/platform/fuchsia/fast/events/reveal-link-when-focused-expected.png
new file mode 100644
index 0000000..512dd18
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/fast/events/reveal-link-when-focused-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/fast/inline/inline-focus-ring-expected.png b/third_party/blink/web_tests/platform/fuchsia/fast/inline/inline-focus-ring-expected.png
new file mode 100644
index 0000000..5c8370d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/fast/inline/inline-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/fuchsia/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
new file mode 100644
index 0000000..f5dd483e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/paint/invalidation/outline/focus-layers-expected.png b/third_party/blink/web_tests/platform/fuchsia/paint/invalidation/outline/focus-layers-expected.png
new file mode 100644
index 0000000..1b85754
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/paint/invalidation/outline/focus-layers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/transforms/transformed-caret-expected.png b/third_party/blink/web_tests/platform/fuchsia/transforms/transformed-caret-expected.png
new file mode 100644
index 0000000..6f79b58
--- /dev/null
+++ b/third_party/blink/web_tests/platform/fuchsia/transforms/transformed-caret-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/custom-elements/form-validation-bubble-appearance-expected.png b/third_party/blink/web_tests/platform/linux/custom-elements/form-validation-bubble-appearance-expected.png
index 7c270a6..0b5af35 100644
--- a/third_party/blink/web_tests/platform/linux/custom-elements/form-validation-bubble-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/custom-elements/form-validation-bubble-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-011-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-011-expected.png
index 6287f9eb..edb2289 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-011-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-011-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-014-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-014-expected.png
index 621b583c..0c7c5d97 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-014-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-014-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-015-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-015-expected.png
index 1671265..070f97a3 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-015-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-015-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-expected.png
index 9cdecd9..e19d66a4 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/caret/caret-painting-low-dpi-expected.png b/third_party/blink/web_tests/platform/linux/editing/caret/caret-painting-low-dpi-expected.png
index 7d80646..8cfdafa 100644
--- a/third_party/blink/web_tests/platform/linux/editing/caret/caret-painting-low-dpi-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/caret/caret-painting-low-dpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/deleting/5369009-expected.png b/third_party/blink/web_tests/platform/linux/editing/deleting/5369009-expected.png
index 908be8f..c0179f9 100644
--- a/third_party/blink/web_tests/platform/linux/editing/deleting/5369009-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/deleting/5369009-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/deleting/5433862-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/deleting/5433862-2-expected.png
index bf088a7..0c8e29b 100644
--- a/third_party/blink/web_tests/platform/linux/editing/deleting/5433862-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/deleting/5433862-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/deleting/5483370-expected.png b/third_party/blink/web_tests/platform/linux/editing/deleting/5483370-expected.png
index 154409f..0b4b05a3 100644
--- a/third_party/blink/web_tests/platform/linux/editing/deleting/5483370-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/deleting/5483370-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/deleting/delete-at-paragraph-boundaries-011-expected.png b/third_party/blink/web_tests/platform/linux/editing/deleting/delete-at-paragraph-boundaries-011-expected.png
index 5c1dec1..74846b4f 100644
--- a/third_party/blink/web_tests/platform/linux/editing/deleting/delete-at-paragraph-boundaries-011-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/deleting/delete-at-paragraph-boundaries-011-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/deleting/delete-br-013-expected.png b/third_party/blink/web_tests/platform/linux/editing/deleting/delete-br-013-expected.png
index 6072475..3b17d20 100644
--- a/third_party/blink/web_tests/platform/linux/editing/deleting/delete-br-013-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/deleting/delete-br-013-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/deleting/delete-line-015-expected.png b/third_party/blink/web_tests/platform/linux/editing/deleting/delete-line-015-expected.png
index 5f1d676..e016ab1 100644
--- a/third_party/blink/web_tests/platform/linux/editing/deleting/delete-line-015-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/deleting/delete-line-015-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/deleting/delete-line-016-expected.png b/third_party/blink/web_tests/platform/linux/editing/deleting/delete-line-016-expected.png
index 88f879f..3544d82 100644
--- a/third_party/blink/web_tests/platform/linux/editing/deleting/delete-line-016-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/deleting/delete-line-016-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/deleting/delete-line-017-expected.png b/third_party/blink/web_tests/platform/linux/editing/deleting/delete-line-017-expected.png
index 4b823b34..99aefac 100644
--- a/third_party/blink/web_tests/platform/linux/editing/deleting/delete-line-017-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/deleting/delete-line-017-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/deleting/merge-different-styles-expected.png b/third_party/blink/web_tests/platform/linux/editing/deleting/merge-different-styles-expected.png
index 1aa2738b..dac87cd 100644
--- a/third_party/blink/web_tests/platform/linux/editing/deleting/merge-different-styles-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/deleting/merge-different-styles-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/deleting/merge-endOfParagraph-expected.png b/third_party/blink/web_tests/platform/linux/editing/deleting/merge-endOfParagraph-expected.png
index fd915560..8cf15d7b 100644
--- a/third_party/blink/web_tests/platform/linux/editing/deleting/merge-endOfParagraph-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/deleting/merge-endOfParagraph-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/deleting/merge-no-br-expected.png b/third_party/blink/web_tests/platform/linux/editing/deleting/merge-no-br-expected.png
index 486d4190..bdef124 100644
--- a/third_party/blink/web_tests/platform/linux/editing/deleting/merge-no-br-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/deleting/merge-no-br-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/deleting/table-cells-expected.png b/third_party/blink/web_tests/platform/linux/editing/deleting/table-cells-expected.png
index c4b7c0d..132f8e5 100644
--- a/third_party/blink/web_tests/platform/linux/editing/deleting/table-cells-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/deleting/table-cells-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/execCommand/4916541-expected.png b/third_party/blink/web_tests/platform/linux/editing/execCommand/4916541-expected.png
index 2893d58..83a9972 100644
--- a/third_party/blink/web_tests/platform/linux/editing/execCommand/4916541-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/execCommand/4916541-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/execCommand/5142012-1-expected.png b/third_party/blink/web_tests/platform/linux/editing/execCommand/5142012-1-expected.png
index b63d9d3..cb313fe 100644
--- a/third_party/blink/web_tests/platform/linux/editing/execCommand/5142012-1-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/execCommand/5142012-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/execCommand/format-block-with-trailing-br-expected.png b/third_party/blink/web_tests/platform/linux/editing/execCommand/format-block-with-trailing-br-expected.png
index 5754aab..2cf9db2 100644
--- a/third_party/blink/web_tests/platform/linux/editing/execCommand/format-block-with-trailing-br-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/execCommand/format-block-with-trailing-br-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/execCommand/insertImage-expected.png b/third_party/blink/web_tests/platform/linux/editing/execCommand/insertImage-expected.png
index e5dfa5c..5a02ded 100644
--- a/third_party/blink/web_tests/platform/linux/editing/execCommand/insertImage-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/execCommand/insertImage-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/input/caret-at-the-edge-of-contenteditable-expected.png b/third_party/blink/web_tests/platform/linux/editing/input/caret-at-the-edge-of-contenteditable-expected.png
index f604dbf3..f9c956f 100644
--- a/third_party/blink/web_tests/platform/linux/editing/input/caret-at-the-edge-of-contenteditable-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/input/caret-at-the-edge-of-contenteditable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/input/caret-read-only-after-editable-expected.png b/third_party/blink/web_tests/platform/linux/editing/input/caret-read-only-after-editable-expected.png
index 9f90d05..9d8b375a 100644
--- a/third_party/blink/web_tests/platform/linux/editing/input/caret-read-only-after-editable-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/input/caret-read-only-after-editable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/input/reveal-caret-of-multiline-contenteditable-expected.png b/third_party/blink/web_tests/platform/linux/editing/input/reveal-caret-of-multiline-contenteditable-expected.png
index 4769629..079b87a 100644
--- a/third_party/blink/web_tests/platform/linux/editing/input/reveal-caret-of-multiline-contenteditable-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/input/reveal-caret-of-multiline-contenteditable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/4278698-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/4278698-expected.png
index ab1b7c9..b7e0dee 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/4278698-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/4278698-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/4840662-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/4840662-expected.png
index b5b7c6e1..a254abb9 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/4840662-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/4840662-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/5002441-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/5002441-expected.png
index abb47489..399c98d 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/5002441-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/5002441-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/5058163-1-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/5058163-1-expected.png
index f710358..afd6350b 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/5058163-1-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/5058163-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/5058163-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/5058163-2-expected.png
index 72a64f3..6ca324d 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/5058163-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/5058163-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/5549929-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/5549929-2-expected.png
index 3f1eed6..c3d1a59 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/5549929-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/5549929-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/5549929-3-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/5549929-3-expected.png
index 86e8a4e0..1a0fda1 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/5549929-3-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/5549929-3-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/insert-3800346-fix-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/insert-3800346-fix-expected.png
index 92aac43..bc24fddaf 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/insert-3800346-fix-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/insert-3800346-fix-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/insert-space-in-empty-doc-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/insert-space-in-empty-doc-expected.png
index fe4a0fec..d1a114b 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/insert-space-in-empty-doc-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/insert-space-in-empty-doc-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/insert-text-at-tabspan-001-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/insert-text-at-tabspan-001-expected.png
index 1b332e25..3a9333c 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/insert-text-at-tabspan-001-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/insert-text-at-tabspan-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/insert-text-at-tabspan-003-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/insert-text-at-tabspan-003-expected.png
index 707c3ed4..410816e 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/insert-text-at-tabspan-003-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/insert-text-at-tabspan-003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/line-break-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/line-break-expected.png
index 4dadd33d..3c61a0f 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/line-break-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/line-break-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/paragraph-separator-in-table-1-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/paragraph-separator-in-table-1-expected.png
index 5ac9b69..738176f 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/paragraph-separator-in-table-1-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/paragraph-separator-in-table-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/inserting/paragraph-separator-in-table-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/inserting/paragraph-separator-in-table-2-expected.png
index 959d8227..494e770d 100644
--- a/third_party/blink/web_tests/platform/linux/editing/inserting/paragraph-separator-in-table-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/inserting/paragraph-separator-in-table-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/4631972-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/4631972-expected.png
index 9c6f9fa..e97f8ca 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/4631972-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/4631972-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/4947130-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/4947130-expected.png
index bc66a4c..ef0db17d 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/4947130-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/4947130-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/5071074-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/5071074-2-expected.png
index 738f1c11..b9c0e3b 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/5071074-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/5071074-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/5071074-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/5071074-expected.png
index 6861a46..0f0aace 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/5071074-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/5071074-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/5134759-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/5134759-expected.png
index dd7aa45f..7836a61 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/5134759-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/5134759-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/5156401-1-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/5156401-1-expected.png
index 944e986..c084263 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/5156401-1-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/5156401-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/5478250-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/5478250-expected.png
index ce61ee5..31f03d4 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/5478250-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/5478250-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/5601583-1-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/5601583-1-expected.png
index 53a6327..d9d7582 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/5601583-1-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/5601583-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/bad-placeholder-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/bad-placeholder-expected.png
index cf0243ac..7604934 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/bad-placeholder-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/bad-placeholder-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/copy-standalone-image-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/copy-standalone-image-expected.png
index 3d95990..30b711d 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/copy-standalone-image-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/copy-standalone-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/drag-selected-image-to-contenteditable-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/drag-selected-image-to-contenteditable-expected.png
index fffa07e..46840e4 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/drag-selected-image-to-contenteditable-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/drag-selected-image-to-contenteditable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-blockquote-after-blockquote-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-blockquote-after-blockquote-expected.png
index 545d155..0af3046a 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-blockquote-after-blockquote-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-blockquote-after-blockquote-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-blockquote-into-blockquote-4-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-blockquote-into-blockquote-4-expected.png
index 0d72d2c..65145cdb 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-blockquote-into-blockquote-4-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-blockquote-into-blockquote-4-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-001-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-001-expected.png
index cabbc51..a4dd637 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-001-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-002-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-002-expected.png
index cabbc51..a4dd637 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-002-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-003-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-003-expected.png
index cabbc51..a4dd637 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-003-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-004-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-004-expected.png
index cabbc51..a4dd637 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-004-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-005-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-005-expected.png
index cabbc51..a4dd637 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-005-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-line-endings-005-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-text-at-tabspan-003-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-text-at-tabspan-003-expected.png
index 113897aa..dc8527bd 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-text-at-tabspan-003-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/paste-text-at-tabspan-003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/quirks-mode-br-1-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/quirks-mode-br-1-expected.png
index 16d9a5b..317a4b0 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/quirks-mode-br-1-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/quirks-mode-br-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/styled-element-markup-expected.png b/third_party/blink/web_tests/platform/linux/editing/pasteboard/styled-element-markup-expected.png
index f4901196..b41ae26 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/styled-element-markup-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/styled-element-markup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/5099303-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/5099303-expected.png
index b0f5110..d9444071 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/5099303-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/5099303-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/5195166-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/5195166-2-expected.png
index 964bcea2..09b682e 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/5195166-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/5195166-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/6476-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/6476-expected.png
index ceb400f..b0f78410 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/6476-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/6476-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-2-expected.png
index 9980886..14bcc3c 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-2-left-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-2-left-expected.png
index 2677329..9fc79ef3 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-2-left-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-2-left-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-expected.png
index a0d9b7c..421f3e36 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-right-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-right-expected.png
index d37411e9..29518e2 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-right-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/caret-ltr-right-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-2-expected.png
index 101db49d..635fe4f 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-2-left-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-2-left-expected.png
index 231bc4c..5b84dbf 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-2-left-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-2-left-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-expected.png
index 606f3b2..67c9037 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-right-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-right-expected.png
index 077f221..1d62fbf7 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-right-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/caret-rtl-right-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/click-start-of-line-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/click-start-of-line-expected.png
index 6fa774d..631c0d2 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/click-start-of-line-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/click-start-of-line-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/contains-boundaries-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/contains-boundaries-expected.png
index 9267e4d..31ae102e 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/contains-boundaries-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/contains-boundaries-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/contenteditable-click-inside-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/contenteditable-click-inside-expected.png
index 143a3a0..7208dc5c 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/contenteditable-click-inside-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/contenteditable-click-inside-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/extend-selection-bidi-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/extend-selection-bidi-expected.png
index 234af63..dc923d6 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/extend-selection-bidi-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/extend-selection-bidi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/leave-requested-block-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/leave-requested-block-expected.png
index 37487384..a12be89 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/leave-requested-block-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/leave-requested-block-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/move-backwords-by-word-001-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/move-backwords-by-word-001-expected.png
index 68fd791..311d2f1 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/move-backwords-by-word-001-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/move-backwords-by-word-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/move-by-line-002-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/move-by-line-002-expected.png
index 4a5cd68..389048e 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/move-by-line-002-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/move-by-line-002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/move-by-sentence-001-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/move-by-sentence-001-expected.png
index 14b374d..81e48e4 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/move-by-sentence-001-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/move-by-sentence-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/move-past-trailing-space-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/move-past-trailing-space-expected.png
index 9d740dc..1562b1f6 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/move-past-trailing-space-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/move-past-trailing-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/previous-line-position-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/previous-line-position-expected.png
index d340897..433bdfc 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/previous-line-position-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/previous-line-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/replaced-boundaries-1-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/replaced-boundaries-1-expected.png
index f3d3829..c18f18f6 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/replaced-boundaries-1-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/replaced-boundaries-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/replaced-boundaries-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/replaced-boundaries-2-expected.png
index 303f7bb..488971e 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/replaced-boundaries-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/replaced-boundaries-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/replaced-boundaries-3-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/replaced-boundaries-3-expected.png
index efe8bfaf..e5f1042 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/replaced-boundaries-3-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/replaced-boundaries-3-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/select-missing-image-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/select-missing-image-expected.png
index ca7a2a52..018166a 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/select-missing-image-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/select-missing-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/triple-click-in-pre-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/triple-click-in-pre-expected.png
index 570d8b0..fe15f64 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/triple-click-in-pre-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/triple-click-in-pre-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/wrapped-line-caret-1-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/wrapped-line-caret-1-expected.png
index 8f5e543..e833f153 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/wrapped-line-caret-1-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/wrapped-line-caret-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/selection/wrapped-line-caret-2-expected.png b/third_party/blink/web_tests/platform/linux/editing/selection/wrapped-line-caret-2-expected.png
index 7c15dab..92ed0f1 100644
--- a/third_party/blink/web_tests/platform/linux/editing/selection/wrapped-line-caret-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/selection/wrapped-line-caret-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/style/4916887-expected.png b/third_party/blink/web_tests/platform/linux/editing/style/4916887-expected.png
index 08653bd6..1c11189 100644
--- a/third_party/blink/web_tests/platform/linux/editing/style/4916887-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/style/4916887-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/style/5065910-expected.png b/third_party/blink/web_tests/platform/linux/editing/style/5065910-expected.png
index a912e1a..827a0544 100644
--- a/third_party/blink/web_tests/platform/linux/editing/style/5065910-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/style/5065910-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/style/5084241-expected.png b/third_party/blink/web_tests/platform/linux/editing/style/5084241-expected.png
index 75de4d96..b400b8e 100644
--- a/third_party/blink/web_tests/platform/linux/editing/style/5084241-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/style/5084241-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/style/5228141-expected.png b/third_party/blink/web_tests/platform/linux/editing/style/5228141-expected.png
index 1101be18..3012b0c2 100644
--- a/third_party/blink/web_tests/platform/linux/editing/style/5228141-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/style/5228141-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/style/5279521-expected.png b/third_party/blink/web_tests/platform/linux/editing/style/5279521-expected.png
index 8be20a7..bb9a6f4 100644
--- a/third_party/blink/web_tests/platform/linux/editing/style/5279521-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/style/5279521-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/style/block-styles-007-expected.png b/third_party/blink/web_tests/platform/linux/editing/style/block-styles-007-expected.png
index 5dc9b6a..1ca1996 100644
--- a/third_party/blink/web_tests/platform/linux/editing/style/block-styles-007-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/style/block-styles-007-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/style/highlight-expected.png b/third_party/blink/web_tests/platform/linux/editing/style/highlight-expected.png
index 26d53e3e..03564b35 100644
--- a/third_party/blink/web_tests/platform/linux/editing/style/highlight-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/style/highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-delete-001-expected.png b/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-delete-001-expected.png
index 7d6441b..c75e0f0 100644
--- a/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-delete-001-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-delete-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-delete-003-expected.png b/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-delete-003-expected.png
index a590f30..4b7790e 100644
--- a/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-delete-003-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-delete-003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-type-after-expected.png b/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-type-after-expected.png
index 8c83ee5d..1c59a9e 100644
--- a/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-type-after-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-type-after-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-type-before-expected.png b/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-type-before-expected.png
index e411dae..613e9247 100644
--- a/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-type-before-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/unsupported-content/list-type-before-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/unsupported-content/table-type-after-expected.png b/third_party/blink/web_tests/platform/linux/editing/unsupported-content/table-type-after-expected.png
index 66dcb7cc..91d224e 100644
--- a/third_party/blink/web_tests/platform/linux/editing/unsupported-content/table-type-after-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/unsupported-content/table-type-after-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/editing/unsupported-content/table-type-before-expected.png b/third_party/blink/web_tests/platform/linux/editing/unsupported-content/table-type-before-expected.png
index e96ab959..a139ec1 100644
--- a/third_party/blink/web_tests/platform/linux/editing/unsupported-content/table-type-before-expected.png
+++ b/third_party/blink/web_tests/platform/linux/editing/unsupported-content/table-type-before-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/backgrounds/background-svg-scaling-expected.png b/third_party/blink/web_tests/platform/linux/fast/backgrounds/background-svg-scaling-expected.png
deleted file mode 100644
index e43aef8..0000000
--- a/third_party/blink/web_tests/platform/linux/fast/backgrounds/background-svg-scaling-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-continuations-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-continuations-expected.png
index 2f95ba9a..146a698 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-continuations-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-continuations-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-detached-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-detached-expected.png
index 5d68d50..3f40e03 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-detached-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-detached-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-multiline-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-multiline-expected.png
index ca124578..b1a79e1f 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-multiline-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-multiline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-multiline-writingmode-vertical-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-multiline-writingmode-vertical-expected.png
index 3a083bd..c3c1d9a8 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-multiline-writingmode-vertical-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-multiline-writingmode-vertical-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-outline-color-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-outline-color-expected.png
index 557e569..0b631b5 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-outline-color-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-outline-offset-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-outline-offset-expected.png
index b267d947..f16c9c3 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-outline-offset-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-outline-offset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-outline-width-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-outline-width-expected.png
index b250eaa..5955278 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-outline-width-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/focus-ring-outline-width-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/ignore-empty-focus-ring-rects-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/ignore-empty-focus-ring-rects-expected.png
index 5710296..7a6a117 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/ignore-empty-focus-ring-rects-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/ignore-empty-focus-ring-rects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/outline-auto-empty-rects-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/outline-auto-empty-rects-expected.png
index 64a34f5b..7ed0967 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/outline-auto-empty-rects-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/outline-auto-empty-rects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/css/outline-auto-location-expected.png b/third_party/blink/web_tests/platform/linux/fast/css/outline-auto-location-expected.png
index 76cd155..aeb0a15 100644
--- a/third_party/blink/web_tests/platform/linux/fast/css/outline-auto-location-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/css/outline-auto-location-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/dom/52776-expected.png b/third_party/blink/web_tests/platform/linux/fast/dom/52776-expected.png
index 42ba6bf..8ada27b 100644
--- a/third_party/blink/web_tests/platform/linux/fast/dom/52776-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/dom/52776-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/dom/focus-contenteditable-expected.png b/third_party/blink/web_tests/platform/linux/fast/dom/focus-contenteditable-expected.png
index ad8f854..2300b2f 100644
--- a/third_party/blink/web_tests/platform/linux/fast/dom/focus-contenteditable-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/dom/focus-contenteditable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/events/reveal-link-when-focused-expected.png b/third_party/blink/web_tests/platform/linux/fast/events/reveal-link-when-focused-expected.png
index 512dd18..1b3a91e 100644
--- a/third_party/blink/web_tests/platform/linux/fast/events/reveal-link-when-focused-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/events/reveal-link-when-focused-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/text/input-placeholder-paint-order-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/text/input-placeholder-paint-order-expected.png
index 11c9346..6965322 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/text/input-placeholder-paint-order-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/text/input-placeholder-paint-order-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/text/textfield-outline-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/text/textfield-outline-expected.png
index 9e1a79f..d8770c5 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/text/textfield-outline-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/text/textfield-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/textarea/textarea-placeholder-paint-order-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
index 3efbf27..0c8c4a71 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/inline/25277-2-expected.png b/third_party/blink/web_tests/platform/linux/fast/inline/25277-2-expected.png
index 4c55675..9029bf0 100644
--- a/third_party/blink/web_tests/platform/linux/fast/inline/25277-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/inline/25277-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/inline/25277-expected.png b/third_party/blink/web_tests/platform/linux/fast/inline/25277-expected.png
index 4c55675..9029bf0 100644
--- a/third_party/blink/web_tests/platform/linux/fast/inline/25277-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/inline/25277-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/inline/continuation-outlines-expected.png b/third_party/blink/web_tests/platform/linux/fast/inline/continuation-outlines-expected.png
index 0becce9d..838b491f 100644
--- a/third_party/blink/web_tests/platform/linux/fast/inline/continuation-outlines-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/inline/continuation-outlines-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/inline/continuation-outlines-with-layers-2-expected.png b/third_party/blink/web_tests/platform/linux/fast/inline/continuation-outlines-with-layers-2-expected.png
index c2f92d85f..d6320f5 100644
--- a/third_party/blink/web_tests/platform/linux/fast/inline/continuation-outlines-with-layers-2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/inline/continuation-outlines-with-layers-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/inline/continuation-outlines-with-layers-expected.png b/third_party/blink/web_tests/platform/linux/fast/inline/continuation-outlines-with-layers-expected.png
index ea72ca4b..20334da 100644
--- a/third_party/blink/web_tests/platform/linux/fast/inline/continuation-outlines-with-layers-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/inline/continuation-outlines-with-layers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/inline/inline-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/fast/inline/inline-focus-ring-expected.png
index 5c8370d..2032eef 100644
--- a/third_party/blink/web_tests/platform/linux/fast/inline/inline-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/inline/inline-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/fast/overflow/overflow-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/fast/overflow/overflow-focus-ring-expected.png
index 4c9875b..732f573 100644
--- a/third_party/blink/web_tests/platform/linux/fast/overflow/overflow-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/fast/overflow/overflow-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-1-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-1-and-click-expected.png
index c70bcc8..f45d7fb 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-1-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-1-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-10-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-10-and-click-expected.png
index 95fad259..35222a8 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-10-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-10-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-2-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-2-and-click-expected.png
index 8576ebb..c15fc31 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-2-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-2-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-3-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-3-and-click-expected.png
index 4b0f82f..77c04f9 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-3-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-3-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-4-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-4-and-click-expected.png
index 1e678c8..8353760a 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-4-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-4-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-5-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-5-and-click-expected.png
index ec66c3b..f3699d6 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-5-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-5-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-6-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-6-and-click-expected.png
index 95fad259..35222a8 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-6-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-6-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-7-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-7-and-click-expected.png
index 95fad259..35222a8 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-7-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-7-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-8-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-8-and-click-expected.png
index 066a9fe..9e084c7 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-8-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-8-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-9-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-9-and-click-expected.png
index 953e9e4e..7d65c180 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-9-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-add-summary-9-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-1-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-1-and-click-expected.png
index b2258be..358d84c 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-1-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-1-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-2-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-2-and-click-expected.png
index e2067f35..88fb71b 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-2-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-2-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-3-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-3-and-click-expected.png
index 70b4d8b..b30847f 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-3-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-3-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-4-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-4-and-click-expected.png
index dbefaf51..2a25f58 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-4-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-4-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-5-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-5-and-click-expected.png
index ada869f..d3bdec4c 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-5-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-5-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-6-and-click-expected.png b/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-6-and-click-expected.png
index 136b37a..b79c81a 100644
--- a/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-6-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/html/details_summary/details-remove-summary-6-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/imagemap-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/images/imagemap-circle-focus-ring-expected.png
index a2e1995..88701e5 100644
--- a/third_party/blink/web_tests/platform/linux/images/imagemap-circle-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/imagemap-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-expected.png
index e8abbf0d..9a5875d4 100644
--- a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-in-positioned-container-expected.png b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-in-positioned-container-expected.png
index 121bfce2..69cec8e 100644
--- a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-in-positioned-container-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-in-positioned-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-outline-color-expected.png b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-outline-color-expected.png
index 0ba3b51..9e496c0 100644
--- a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-outline-color-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
index 4566a28..5eb3037 100644
--- a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
index f5dd483e..b6a42b5c 100644
--- a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-with-paint-root-offset-expected.png b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-with-paint-root-offset-expected.png
index fae588f2..bbb68ca6 100644
--- a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-with-paint-root-offset-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-with-paint-root-offset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-with-scale-transform-expected.png b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-with-scale-transform-expected.png
index cdbcf0e36..674bf05 100644
--- a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-with-scale-transform-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-with-scale-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-zoom-expected.png
index 33e3512..f7b90275 100644
--- a/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-zoom-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/imagemap-focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/imagemap-overflowing-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/images/imagemap-overflowing-circle-focus-ring-expected.png
index 2bd1b4d..9da1992 100644
--- a/third_party/blink/web_tests/platform/linux/images/imagemap-overflowing-circle-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/imagemap-overflowing-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/images/imagemap-overflowing-polygon-focus-ring-expected.png
index 644ae3f..f282522 100644
--- a/third_party/blink/web_tests/platform/linux/images/imagemap-overflowing-polygon-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/imagemap-overflowing-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/images/imagemap-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/images/imagemap-polygon-focus-ring-expected.png
index 8328cf6..9c9427b5 100644
--- a/third_party/blink/web_tests/platform/linux/images/imagemap-polygon-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/images/imagemap-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/4776765-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/4776765-expected.png
index f4a1fab..3883762 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/4776765-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/4776765-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/delete-into-nested-block-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/delete-into-nested-block-expected.png
index a216988..e470d42d 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/delete-into-nested-block-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/delete-into-nested-block-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
index 870aa92..896752dd 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
index 23da500..c2ce56e 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
@@ -8,12 +8,12 @@
       "paintInvalidations": [
         {
           "object": "LayoutButton INPUT",
-          "rect": [7, 7, 59, 24],
+          "rect": [6, 6, 61, 26],
           "reason": "subtree"
         },
         {
           "object": "LayoutButton INPUT",
-          "rect": [7, 7, 59, 24],
+          "rect": [6, 6, 61, 26],
           "reason": "chunk appeared"
         },
         {
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-continuations-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-continuations-expected.txt
index ea00e5c..7025df3 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-continuations-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-continuations-expected.txt
@@ -8,7 +8,7 @@
       "paintInvalidations": [
         {
           "object": "NGPhysicalBoxFragment LayoutInline SPAN id='outer'",
-          "rect": [7, 87, 88, 22],
+          "rect": [6, 86, 90, 24],
           "reason": "disappeared"
         }
       ]
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-enable-continuations-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-enable-continuations-expected.png
index 34f5876..b8ff8f2 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-enable-continuations-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-enable-continuations-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-enable-continuations-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-enable-continuations-expected.txt
index 0adbadc..0167d17 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-enable-continuations-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-enable-continuations-expected.txt
@@ -8,7 +8,7 @@
       "paintInvalidations": [
         {
           "object": "NGPhysicalBoxFragment LayoutInline SPAN id='outer'",
-          "rect": [7, 87, 88, 22],
+          "rect": [6, 86, 90, 24],
           "reason": "appeared"
         }
       ]
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-layers-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-layers-expected.png
index 1b85754..85cbe44 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-layers-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/outline/focus-layers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt
index a93af0c..c4fcde5 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt
@@ -8,13 +8,13 @@
     },
     {
       "name": "LayoutTextControl INPUT id='root'",
-      "position": [-1, -1],
-      "bounds": [63, 24],
+      "position": [-2, -2],
+      "bounds": [65, 26],
       "backgroundColor": "#FFFFFF",
       "paintInvalidations": [
         {
           "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 63, 24],
+          "rect": [0, 0, 65, 26],
           "reason": "full layer"
         },
         {
@@ -24,7 +24,7 @@
         },
         {
           "object": "Caret",
-          "rect": [58, 4, 1, 16],
+          "rect": [59, 5, 1, 16],
           "reason": "caret"
         }
       ],
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt
index a93af0c..c4fcde5 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt
@@ -8,13 +8,13 @@
     },
     {
       "name": "LayoutTextControl INPUT id='root'",
-      "position": [-1, -1],
-      "bounds": [63, 24],
+      "position": [-2, -2],
+      "bounds": [65, 26],
       "backgroundColor": "#FFFFFF",
       "paintInvalidations": [
         {
           "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 63, 24],
+          "rect": [0, 0, 65, 26],
           "reason": "full layer"
         },
         {
@@ -24,7 +24,7 @@
         },
         {
           "object": "Caret",
-          "rect": [58, 4, 1, 16],
+          "rect": [59, 5, 1, 16],
           "reason": "caret"
         }
       ],
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
index 6612fa82..fc040c62 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
index ae577667..b2df0cd 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -18,7 +18,7 @@
         },
         {
           "object": "NGPhysicalBoxFragment LayoutInline A",
-          "rect": [383, 971, 42, 21],
+          "rect": [382, 970, 44, 23],
           "reason": "appeared"
         },
         {
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/table/caret-contenteditable-content-after-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/table/caret-contenteditable-content-after-expected.png
index 87a6a23..70b65bd 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/table/caret-contenteditable-content-after-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/table/caret-contenteditable-content-after-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/table/caret-contenteditable-content-after-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/table/caret-contenteditable-content-after-expected.txt
index ad1e3d3..b14e9e1 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/table/caret-contenteditable-content-after-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/table/caret-contenteditable-content-after-expected.txt
@@ -8,22 +8,22 @@
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
+          "rect": [6, 46, 788, 24],
           "reason": "geometry"
         },
         {
           "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
+          "rect": [6, 46, 788, 24],
           "reason": "geometry"
         },
         {
           "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
+          "rect": [6, 46, 788, 24],
           "reason": "geometry"
         },
         {
           "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
+          "rect": [6, 46, 788, 24],
           "reason": "appeared"
         },
         {
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/transform/caret-with-transformation-expected.png b/third_party/blink/web_tests/platform/linux/paint/invalidation/transform/caret-with-transformation-expected.png
index b514d81e..9d704ff 100644
--- a/third_party/blink/web_tests/platform/linux/paint/invalidation/transform/caret-with-transformation-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/transform/caret-with-transformation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-expected.png
index 38bac42..6a2883e 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-64px-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-64px-expected.png
index 74427c5..6071420 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-64px-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-64px-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-8px-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-8px-expected.png
index 65bcaba0..c5e6129 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-8px-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-font-8px-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-125-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-125-expected.png
index 7fa29aa..070a433 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-125-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-150-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-150-expected.png
index 36c9433..dc2299e 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-150-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-175-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-175-expected.png
index 9f48668e..5331c8f 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-175-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-175-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-200-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-200-expected.png
index 7ad97609..afe077f 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-200-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-2000-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-2000-expected.png
index 271982b..841f07e 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-2000-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-2000-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-250-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-250-expected.png
index bf26630..342e61f 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-250-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/document-markers-zoom-250-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/focus-ring-expected.png
index 6c30cf5..c1065fb 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/focus-ring-text-expected.png b/third_party/blink/web_tests/platform/linux/svg/custom/focus-ring-text-expected.png
index 6f197e5..1919c56 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/focus-ring-text-expected.png
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/focus-ring-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/transforms/transformed-caret-expected.png b/third_party/blink/web_tests/platform/linux/transforms/transformed-caret-expected.png
index 6f79b58..be729393 100644
--- a/third_party/blink/web_tests/platform/linux/transforms/transformed-caret-expected.png
+++ b/third_party/blink/web_tests/platform/linux/transforms/transformed-caret-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/color/color-suggestion-picker-appearance-expected.png
index 0502a01..5a3651e 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
index 64fe9ab..8c6d644f 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
index 79b6e0e1..a88f446e 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png
index b6f6340..c5d32807 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
index e4b8540..ddb816f 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
index 7b1d119..4aa94ce 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
index 2524885..87a81a47 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
index a546fe80..4727f166 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
index 6dc623b..c18a0f9 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index 1edbb01..bddd5eb3 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
index 6911fdf..b5f56c64 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
index de6ea58..9a166b1e0 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
index 133d888..7687e46e 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
index 8babe498..9bc65c9 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
index bbdc9d0..071c4c04 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
index a2aef80..6bbc139 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
index b1f1372a..fb16b17 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
index 023ccb2f..47a86c73 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
index 9746b9d8..bbc5eaf 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
index 7a99bf5..ccf2509 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
index 75a220e..a0668a5c 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
index 8cec821..5c159bf6 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index 8344972..a2450ad 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
index 66f21ee..89928d54 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
index ad52197..df50a29a 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
index ae8c53a8..651f5c70 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index 25d9623..28c29b3b 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
index 4b89f778..058d39bb 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
index 479e2be..83c6ee88 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
index 1bad19f..d4c6e63 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
index a252df00..0a9ceec3a 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
index 803e8ac..42372c5 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
index df0a50e..6f98f25 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
index 351b500..7a79f643 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
index e5bedcd..48885e8 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
index 388f216..7a23828a 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index 6c81cce2..19424d84 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png
index 769d4d1..9b648e3e 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png
index 740bb2f..3d7762f 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png
index 646c4ba..14799ef 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png
index 769d4d1..9b648e3e 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png
index 2d1d977..c1d8ed5 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png
index c9401392..150732e6 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png
index 3d2a7e7..885269d 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png
index aa8d65d..ea37ff8c 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png
index edee1e2..5010a5b 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png
index 2b0342b..3d28ba9 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png
index b82223be..5b9664b 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png
index e6f4b7e..6307cb8 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png
index ffe957ed..ac19185 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png
index 2e8fedb..b6f359f 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png
index 620d5c1..8e291af 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png
index 620d5c1..8e291af 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png
index 58280c8..15d1ac3 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png
index e2e039b..6a4f2a9d 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png
index 0794555..800ba82 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png
index 03cecbd..fc9e650 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png
index 30f2afb..8b27282 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png
index 262b2f7..ab10dfc 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png
index 6a95095..17733c7 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png
index 5d72b31..011a03c4 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png
index b48a52d..b00d37c 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png
index ad15d91..7a48f33 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png
index 4c05da1..784c4da 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png
index 3908463..bb1693e3 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png
index 24b8180..f41ce1a3 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom125-expected.png
index 6c91446..7829f8b 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png
index 7dcf103..fc888be8 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
index 69e1d36..77091f572 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-border-radius-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-border-radius-expected.png
new file mode 100644
index 0000000..1edcf6a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-border-radius-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-border-width-changed-expected.png
similarity index 71%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png
copy to third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-border-width-changed-expected.png
index b19ef2d5..d1bee74 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-border-width-changed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-detached-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-detached-expected.png
new file mode 100644
index 0000000..724205e8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-detached-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-multiline-link-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-multiline-link-expected.png
new file mode 100644
index 0000000..5fc802f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-multiline-link-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-multiline-writingmode-vertical-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-multiline-writingmode-vertical-expected.png
new file mode 100644
index 0000000..9a9c04b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-multiline-writingmode-vertical-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-outline-color-expected.png
similarity index 61%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-outline-color-expected.png
index ef426e5..4e767f02 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-zoom-expected.png
new file mode 100644
index 0000000..9671fbac
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring-expected.png
new file mode 100644
index 0000000..9ad2e32
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/textfield-focus-ring-expected.png
similarity index 65%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png
copy to third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/textfield-focus-ring-expected.png
index b19ef2d5..cbfc716 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/focus-rect/textfield-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
index 6e0f8cfd..49584d1 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-alt-f8-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-alt-f8-expected.png
index 4b89f778..058d39bb 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-alt-f8-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-alt-f8-twice-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
index 4b89f778..058d39bb 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
index 184e4e95..b8d107f 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
index 671e318..3545952 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
index 0c6c878..6dd3c3197 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
index 71b1d9c..7cc44858 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-mismatched_glyph-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
index 4b89f778..058d39bb 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
index d3e5474..a4877ec 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
index 53dd09c..2c41229 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
index 5e2a7b472..64e86d1 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
index 4cd4a90..11e1ed81 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
index 6a0804e..cf7646f 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
index d0ab457..a21a5e8 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
index 2fac4ca..0b723c22 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
index a393957..2912de6 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png
index d18d15c..7d234a11 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-expected.png
index 9e0c2cc..c1c1849 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png
index 8521d6ba..5b26cbe 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-expected.png
index c7dbd7d..d12ffdf 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
index 7db3caa..cf51bbc 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
index 7bc1471..57d7ce8 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png
index 80ae5b78..2f03248 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png
index 6e0a7aa..6860e7ef 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png
index 8535695..9ec7245 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png
index 97253a14..b7ff189 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png
index aada43e..3e2d777 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png
index db6cafd..1fbc038b 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/input-placeholder-paint-order-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/input-placeholder-paint-order-expected.png
new file mode 100644
index 0000000..11c9346
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/input-placeholder-paint-order-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/textfield-outline-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/textfield-outline-expected.png
new file mode 100644
index 0000000..9e1a79f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/text/textfield-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-placeholder-paint-order-expected.png b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
new file mode 100644
index 0000000..3efbf27
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png
index 6bbc239..369f27c 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png
index c2cd58b..960913d 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png
index 4121391..e2b54b9 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png
index b467bfa..dc892c2 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
index bbba817..d97cffc9 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png
index 1d63322..4f7f83e9 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png
index 978eca6..2c1e99a8 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
index ece997c..6ef557a 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png
index 1d2b2b8..ff291a3 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png
index ffc5c92..8eb3531 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png
index 9bab829..9bac769 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/mouseevent_fractional/fast/events/reveal-link-when-focused-expected.png b/third_party/blink/web_tests/platform/linux/virtual/mouseevent_fractional/fast/events/reveal-link-when-focused-expected.png
index 512dd18..1b3a91e 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/mouseevent_fractional/fast/events/reveal-link-when-focused-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/mouseevent_fractional/fast/events/reveal-link-when-focused-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png b/third_party/blink/web_tests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
index 5682c73..f8c749d 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/prefer_compositing_to_lcd_text/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/virtual/prefer_compositing_to_lcd_text/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png b/third_party/blink/web_tests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
index 206c123..b17d1832 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/prefer_compositing_to_lcd_text/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/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
index 823bb72..f9589a7f7 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png
index 64c0772..0dd7fa1 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/popup-menu-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/popup-menu-appearance-expected.png
index d39f73f..25875b8d 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/popup-menu-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/popup-menu-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
index 2c32e3a..3781904 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png
index 59867dc..4d3a997 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png
index f14e395..e425a26 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png
index 59867dc..4d3a997 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance-expected.png
index 392b838b..5f18008 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
index a8ed943f..7abbed0 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/caps-lock-indicator-disabled-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/caps-lock-indicator-disabled-expected.png
index 0bb0fb7..72976bf 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/caps-lock-indicator-disabled-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/caps-lock-indicator-disabled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/caps-lock-indicator-enabled-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/caps-lock-indicator-enabled-expected.png
index 0fdfaee..c6d60dd 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/caps-lock-indicator-enabled-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/caps-lock-indicator-enabled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/caps-lock-indicator-enabled-rtl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/caps-lock-indicator-enabled-rtl-expected.png
index a26105a..94a1aeebe 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/caps-lock-indicator-enabled-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/caps-lock-indicator-enabled-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-ltr-text-in-ltr-flow-underline-composition-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-ltr-text-in-ltr-flow-underline-composition-expected.png
index 52a92ed..707e181 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-ltr-text-in-ltr-flow-underline-composition-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-ltr-text-in-ltr-flow-underline-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-ltr-text-in-rtl-flow-underline-composition-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-ltr-text-in-rtl-flow-underline-composition-expected.png
index ccafa11..8ce6012 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-ltr-text-in-rtl-flow-underline-composition-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-ltr-text-in-rtl-flow-underline-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-rtl-text-in-ltr-flow-underline-composition-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-rtl-text-in-ltr-flow-underline-composition-expected.png
index ec808df..62cd40b 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-rtl-text-in-ltr-flow-underline-composition-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-rtl-text-in-ltr-flow-underline-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-rtl-text-in-rtl-flow-underline-composition-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-rtl-text-in-rtl-flow-underline-composition-expected.png
index 4d59ce14..d3fc153e 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-rtl-text-in-rtl-flow-underline-composition-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/ellipsis-rtl-text-in-rtl-flow-underline-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/delete-hard-break-character-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/delete-hard-break-character-expected.png
index cb4a694..9f3ca21 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/delete-hard-break-character-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/delete-hard-break-character-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/mixed-directionality-selection-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/mixed-directionality-selection-expected.png
index e2603aa..dfac66b 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/mixed-directionality-selection-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/mixed-directionality-selection-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/rtl-caret-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/rtl-caret-expected.png
index 1b1c65f..df8d298 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/rtl-caret-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/rtl-caret-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/select-new-line-with-line-break-normal-expected.png b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/select-new-line-with-line-break-normal-expected.png
index 94503faa..2a7634f 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/select-new-line-with-line-break-normal-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/text-antialias/selection/select-new-line-with-line-break-normal-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/fast/dom/52776-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/fast/dom/52776-expected.png
new file mode 100644
index 0000000..8ada27b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/fast/dom/52776-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/fast/dom/focus-contenteditable-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/fast/dom/focus-contenteditable-expected.png
new file mode 100644
index 0000000..2300b2f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/fast/dom/focus-contenteditable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-1-and-click-expected.png
similarity index 63%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png
copy to third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-1-and-click-expected.png
index b19ef2d5..f45d7fb 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-1-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-10-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-10-and-click-expected.png
new file mode 100644
index 0000000..35222a8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-10-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-2-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-2-and-click-expected.png
new file mode 100644
index 0000000..c15fc31
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-2-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-3-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-3-and-click-expected.png
new file mode 100644
index 0000000..77c04f9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-3-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-4-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-4-and-click-expected.png
new file mode 100644
index 0000000..8353760a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-4-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-5-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-5-and-click-expected.png
new file mode 100644
index 0000000..f3699d6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-5-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-6-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-6-and-click-expected.png
new file mode 100644
index 0000000..35222a8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-6-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-7-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-7-and-click-expected.png
new file mode 100644
index 0000000..35222a8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-7-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-8-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-8-and-click-expected.png
new file mode 100644
index 0000000..9e084c7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-8-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-9-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-9-and-click-expected.png
new file mode 100644
index 0000000..7d65c180
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-9-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-1-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-1-and-click-expected.png
new file mode 100644
index 0000000..358d84c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-1-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-2-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-2-and-click-expected.png
new file mode 100644
index 0000000..88fb71b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-2-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-3-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-3-and-click-expected.png
new file mode 100644
index 0000000..b30847f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-3-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-4-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-4-and-click-expected.png
new file mode 100644
index 0000000..2a25f58
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-4-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-5-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-5-and-click-expected.png
new file mode 100644
index 0000000..d3bdec4c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-5-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-6-and-click-expected.png b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-6-and-click-expected.png
new file mode 100644
index 0000000..b79c81a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-6-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
index 2a9071c7..ad300402 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
index 3f745c0..1782596 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
index 6695ec70..43fba0e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
index 61ea59e..1ae0fb7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
index a693b5a..36b7765 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index f0cf2da..3141ce2 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
index b484b14..27bee9e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
index 75ab4a72..0b3da5f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
index d84db45..c631b31 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
similarity index 76%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
copy to third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
index 527065b..1c3b3793 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
new file mode 100644
index 0000000..2b3cb380
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
index 0cba7cb..2f090a1 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
index cec2c10..41deb149 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
index 750e488..7d9301a 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
index 63f680b..8f88db3b 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
index 3194a49..d09b69cc 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
index 7d9c829..a8da296 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
index 905f519..321550d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index 3c86c2fe..026ce3d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
index dfe7c6c..e682a79 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
index d86a0c03..32b9b8e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
index fbf152f..724bb50d2 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
index daa4ab7..d55ee6d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
index e189651..ff351d55 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
index 97b7b2e..642b630 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
index dfe7c6c..e682a79 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
index 33cde42..885ef33 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
deleted file mode 100644
index a673450..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index 1d815442..f679eaa 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
index 452ae4b..dd5f84b 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
index 57f8e7c..5c73dcd0 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
index 04f7c84..7adb35c9 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
index 2c4f5820..9590fd4 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
index 47cd928..96e78eb 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
index 3441c5d0..8221f65d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
index e4bd6bb..5183b15 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
index f4a6682..33e433307 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index 878fbf3..34400152 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
index 8d1e798a..964bf740 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring-expected.png
new file mode 100644
index 0000000..f3443bd
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
index 07cc94fb..368dad92 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
index 9f5f148..696393e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
index 3ed5b30..c8272f0 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
index 6141d554..a8ca7ee6 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-twice-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
deleted file mode 100644
index b19ef2d5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-mismatched_glyph-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
deleted file mode 100644
index b19ef2d5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
index 0762f76..1510a01e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
index c34c03da..2027978 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png
index 7a380f0d..3be1077 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
index aa5720c..0884c4b5 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
index 4c2d734a..45032f0 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
index e6209d2..1ee49e6 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
index 23097ab..2890e10 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
index 5979919..8ed372f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
new file mode 100644
index 0000000..207864c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
new file mode 100644
index 0000000..f731eff
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
index 6695ec70..43fba0e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..1ae0fb7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
new file mode 100644
index 0000000..36b7765
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index 109b1c015..b65ca43 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
new file mode 100644
index 0000000..7edb77a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
new file mode 100644
index 0000000..5f3eca9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
new file mode 100644
index 0000000..e937d29
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
similarity index 76%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
copy to third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
index 527065b..1c3b3793 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
new file mode 100644
index 0000000..2b3cb380
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
index 0cba7cb..2f090a1 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
index cec2c10..41deb149 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..7d5a794f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..441fd878
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..63f1e8e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..4b96d55
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..9caeeca
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index 14ad2959..ccaeb9d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
deleted file mode 100644
index a673450..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-alt-f8-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-alt-f8-expected.png
deleted file mode 100644
index b19ef2d5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-alt-f8-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-alt-f8-twice-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
deleted file mode 100644
index b19ef2d5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
deleted file mode 100644
index ef426e5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
deleted file mode 100644
index 527065b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
deleted file mode 100644
index 7912dfd..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
deleted file mode 100644
index c84cbdd..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-mismatched_glyph-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
deleted file mode 100644
index b19ef2d5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
deleted file mode 100644
index a3c2b66e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
index a467e8a..207864c 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
index e33b00c..f731eff 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
index 6695ec70..43fba0e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
index 61ea59e..1ae0fb7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
index a693b5a..36b7765 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index 109b1c015..b65ca43 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
index b15e2d4..7edb77a 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
index fa776ba..5f3eca9 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
index 2f83522..e937d29 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
similarity index 76%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
copy to third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
index 527065b..1c3b3793 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
new file mode 100644
index 0000000..2b3cb380
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
index 0cba7cb..2f090a1 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
index cec2c10..41deb149 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..7d5a794f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..441fd878
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..63f1e8e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..4b96d55
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..9caeeca
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index 14ad2959..ccaeb9d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
index e3bd113..68bb49f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
index 41a93c6..a127856 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
index c503e2e..e758fa7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
index 3c92b16..9cf99df 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
index 1586c37..7afaa50 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
index f14ccb3..a00da9a 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
index e3bd113..68bb49f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
index bd5249b..ed27b69 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
index 1221349..8e76b668 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
index a673450..8e75642 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
index 8531eb63b5..d4f71d6 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index 9772416..2e161a6 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
index 21ab713..8020723 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
index 85ab889..f76214d7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
index 30a84bf..33d4c37 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index 1aefab9..05200e1e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png
index c18f1c6a..2ddaa8d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png
index e558a6f..df3ea751 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png
index a3bc7785..7f1111a 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png
index c18f1c6a..2ddaa8d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png
index 0df61e8..32d4a07 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png
index a2ebf3aa..0b115448 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png
index 673b7d9..b0cc89b 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png
index 1934d5f..f9440c4 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png
index b7023a1..10373c8 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png
index c97b53e8..20828ab 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png
index 365e8e9..64437e22 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png
index 976df5f..12a82796 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png
index 78d9117..b990472 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png
index d5e7852..3ea8814 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png
index 5a72d10..87248ed 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png
index 5a72d10..87248ed 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png
index 744026d..7be4494 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png
index 6fbf45a..0e84c68 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png
index 2b63d63e..cfb4f7d5 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png
index 430ad28..3d855e2 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png
index 4989767..085e56a 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png
index 18412aa5..522a3a8d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png
index 47cc3f7..dc3555b 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png
index cacbc05..4f9ba8bc 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png
index c4565d5..53c4f6d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png
index 3cd1234..fc7c01b 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png
index 186af6d..27e7918 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png
index 0be013e4..2acbf6d 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png
index 7180578..8fdb449 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png
index 7e31921..9f782388 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
index 0a39750..ba37d19 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
index 32ee326..f382d169 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
index a765e08..7216f414 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
index 81a445c..8037960 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
index 1bcc044..6a036282 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-alt-f8-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-alt-f8-expected.png
deleted file mode 100644
index b19ef2d5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-alt-f8-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-alt-f8-twice-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
deleted file mode 100644
index b19ef2d5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
deleted file mode 100644
index ef426e5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
deleted file mode 100644
index 527065b..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
deleted file mode 100644
index 7912dfd..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
deleted file mode 100644
index c84cbdd..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-mismatched_glyph-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
deleted file mode 100644
index b19ef2d5..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
deleted file mode 100644
index a3c2b66e..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
index 08b68fc..96ab29c 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
index 917caa9..6923411 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png
index 9b31142..419bcba 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
index a709c9d6..ca537fb 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
index 6b33b56..8774cbb 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
index 2147d33..1385197a 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
index 784ddc3b..5f57ca3 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
index b1600612..643747e 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
new file mode 100644
index 0000000..369ddd6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
new file mode 100644
index 0000000..71e041b35
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
new file mode 100644
index 0000000..9d9e6f4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..84ff2c2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
new file mode 100644
index 0000000..4f61399
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index c0ba1d03..9799d32 100644
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
new file mode 100644
index 0000000..ac8d5a4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
new file mode 100644
index 0000000..def75be
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
new file mode 100644
index 0000000..9fa2f7c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
similarity index 76%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
copy to third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
index 527065b..1c3b3793 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
new file mode 100644
index 0000000..2b3cb380
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
index 0cba7cb..2f090a1 100644
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
index cec2c10..41deb149 100644
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..7d5a794f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..441fd878
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..63f1e8e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..4b96d55
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..9caeeca
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index d3eef40..b32fb4f 100644
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
deleted file mode 100644
index ef0ecd6..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-alt-f8-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-alt-f8-expected.png
deleted file mode 100644
index b19ef2d5..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-alt-f8-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-alt-f8-twice-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
deleted file mode 100644
index b19ef2d5..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
deleted file mode 100644
index ef426e5..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
deleted file mode 100644
index 527065b..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
deleted file mode 100644
index 7912dfd..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
deleted file mode 100644
index c84cbdd..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-mismatched_glyph-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
deleted file mode 100644
index b19ef2d5..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
deleted file mode 100644
index a3c2b66e..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/backgrounds/background-svg-scaling-expected.png b/third_party/blink/web_tests/platform/mac/fast/backgrounds/background-svg-scaling-expected.png
index 027a214..3a7ef208 100644
--- a/third_party/blink/web_tests/platform/mac/fast/backgrounds/background-svg-scaling-expected.png
+++ b/third_party/blink/web_tests/platform/mac/fast/backgrounds/background-svg-scaling-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/svg/as-image/image-respects-deviceScaleFactor-expected.png b/third_party/blink/web_tests/platform/mac/svg/as-image/image-respects-deviceScaleFactor-expected.png
index 73135f9..775efc4 100644
--- a/third_party/blink/web_tests/platform/mac/svg/as-image/image-respects-deviceScaleFactor-expected.png
+++ b/third_party/blink/web_tests/platform/mac/svg/as-image/image-respects-deviceScaleFactor-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
index db833b07..369ddd6 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
index 4dc69b5e..71e041b35 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
index 0506476..9d9e6f4 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
index 3f1a166..84ff2c2 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
index f3d54e6..4f61399 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index c0ba1d03..9799d32 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
index 78b9b8d5..ac8d5a4 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
index 5e8fe0d..def75be 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
index b54f638..9fa2f7c 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
index 35b59d4d..1c3b3793 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
index 975f0ce..2b3cb380 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
index 0cba7cb..2f090a1 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
index cec2c10..41deb149 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
index 9b2bfee..7d5a794f 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
index 208ae4c..441fd878 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
index fca7b15..63f1e8e 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
index 29d3959..4b96d55 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
index 0fcdee3..9caeeca 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index d3eef40..b32fb4f 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
index 4a8d4dd..93325947 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
index e9aa6f7..18dfa4f 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
index 9398c57..80f060c 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
index 0545139..14c5996 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
index dceaeab..3096cbb 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
index 009a6dda..d00431a 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
index 4a8d4dd..93325947 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
index ffc336a..d64e114 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
index d76ad62..8473e1f 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
index ef0ecd6..fc491e4 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
index e5179ef..ce8ea31 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index e11ba70eb..55d6754 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
index 4aa3fe5..0305e187 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
index 90f019e..fa02738b 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
index 44f123d..0afffa82 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
index b19ef2d5..b11a008 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
index 7cb61c8..6c4de7a 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
index 4dab192..d068b03 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
index 60d93a46..f4f503d8 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
index cb5e9fe..1dab0aa 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
index c9bbf1d3..470e234 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
index dafce97..d6fc450 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
index 149f93e..5050a88 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
index c50d655..d493b1aa 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index c7e9fc6..80da636 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png
index 472b7cbb..29f3e17 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png
index 2777e5e..0a842d6c 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png
index 3a771b5..c9034fb 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png
index 472b7cbb..29f3e17 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png
index d7224dd..66d34db 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png
index d4c7f47..7e7ab829 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png
index 8dc58ec..2e38a15 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png
index 8380ffd7..c292281d 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png
index 236fb85..3fa2cca 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png
index 4d7a46a..4d0266f 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png
index b2b9877..c0dae31 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png
index 2266fbee..997dc45 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png
index 1331ff29..15dbe57 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png
index 8b06bcf..231ac3ba 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png
index 2bf6e04b..ec6b623 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png
index 2bf6e04b..ec6b623 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png
index 307468f7..0d61d62 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png
index f3dd485..5f12e75 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png
index 130d9bc..a0f7914 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png
index 896918f..18c70ac 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png
index cd8e63ea..2c81cf4 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png
index 6acfe9c3..138bfda 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png
index b4d50022..a4b54a8 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png
index 1ae83c7..ae4fdefd 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png
index 9ea95f9..4ef2969 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png
index 5734410..7929635 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png
index 83899c26..cb29008 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png
index 1ee83f0..ba6facf 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png
index ff3a2e5..705381d 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom125-expected.png
index bbd3e2e..3c5cfd4 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png
index eaa2c3c..f0496ed 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
index a49b64b4..52d618b 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/checkbox-zoom-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/checkbox-zoom-focus-ring-expected.png
new file mode 100644
index 0000000..006eb49c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/checkbox-zoom-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-border-radius-expected.png
similarity index 60%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-border-radius-expected.png
index 7912dfd..38aa417 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-border-radius-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-border-width-changed-expected.png
similarity index 66%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-border-width-changed-expected.png
index c84cbdd..1a91a2e2 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-border-width-changed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-detached-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-detached-expected.png
new file mode 100644
index 0000000..77945681
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-detached-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-multiline-link-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-multiline-link-expected.png
new file mode 100644
index 0000000..4565aca
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-multiline-link-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-multiline-writingmode-vertical-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-multiline-writingmode-vertical-expected.png
new file mode 100644
index 0000000..69713ba
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-multiline-writingmode-vertical-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-outline-color-expected.png
similarity index 66%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
copy to third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-outline-color-expected.png
index c84cbdd..933eb6c 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-zoom-expected.png
new file mode 100644
index 0000000..119698a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/radio-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/radio-focus-ring-expected.png
new file mode 100644
index 0000000..66b2597
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/radio-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring-expected.png
new file mode 100644
index 0000000..b3fff1fc
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/textfield-focus-ring-expected.png
similarity index 70%
rename from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
rename to third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/textfield-focus-ring-expected.png
index ef426e5..79408a3 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/focus-rect/textfield-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
index 891f91c..5f8c17d1 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
index 7ab112e..756d91e 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
index 8a8e4d8d..16af8346 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
index ca458d99..6f758c1 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-alt-f8-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-alt-f8-expected.png
index b19ef2d5..b11a008 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-alt-f8-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-alt-f8-twice-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
index b19ef2d5..b11a008 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
index ef426e5..29718168 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
index 527065b..7fe0612 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
index 7912dfd..21d611d 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
index c84cbdd..7d3e81e 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-mismatched_glyph-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
index b19ef2d5..b11a008 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
index a3c2b66e..3bda168 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
index b3dc43a..eae63e9 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
index ec4e4562..f395faa 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png
index d6c995e1..2ea12043e 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
index 6ab2c36..2f3694e 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
index 54c5c6b..3aa39ec 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
index b742421..4a92f27 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
index 79ae69fd..88529d1 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
index a83cf8d..5967d90da 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/custom-elements/form-validation-bubble-appearance-expected.png b/third_party/blink/web_tests/platform/win/custom-elements/form-validation-bubble-appearance-expected.png
index 02ec64ac..a0d94fd 100644
--- a/third_party/blink/web_tests/platform/win/custom-elements/form-validation-bubble-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/custom-elements/form-validation-bubble-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-011-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-011-expected.png
index e7d65e9..bf816f6 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-011-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-011-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-014-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-014-expected.png
index d434f2d..d8b98b6f 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-014-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-014-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-015-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-015-expected.png
index c0c0f49..d4fec29 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-015-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-015-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-expected.png
index a2c66bb..19de141 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-color-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/caret/caret-painting-low-dpi-expected.png b/third_party/blink/web_tests/platform/win/editing/caret/caret-painting-low-dpi-expected.png
index 1e738c4..9df9327 100644
--- a/third_party/blink/web_tests/platform/win/editing/caret/caret-painting-low-dpi-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/caret/caret-painting-low-dpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/deleting/5369009-expected.png b/third_party/blink/web_tests/platform/win/editing/deleting/5369009-expected.png
index 0051f12..af99469 100644
--- a/third_party/blink/web_tests/platform/win/editing/deleting/5369009-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/deleting/5369009-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/deleting/5433862-2-expected.png b/third_party/blink/web_tests/platform/win/editing/deleting/5433862-2-expected.png
index 7d1ad28..774368e 100644
--- a/third_party/blink/web_tests/platform/win/editing/deleting/5433862-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/deleting/5433862-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/deleting/5483370-expected.png b/third_party/blink/web_tests/platform/win/editing/deleting/5483370-expected.png
index 116001a..1d08934 100644
--- a/third_party/blink/web_tests/platform/win/editing/deleting/5483370-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/deleting/5483370-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/deleting/delete-at-paragraph-boundaries-011-expected.png b/third_party/blink/web_tests/platform/win/editing/deleting/delete-at-paragraph-boundaries-011-expected.png
index 14a4fbf..97a6c25 100644
--- a/third_party/blink/web_tests/platform/win/editing/deleting/delete-at-paragraph-boundaries-011-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/deleting/delete-at-paragraph-boundaries-011-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/deleting/delete-br-013-expected.png b/third_party/blink/web_tests/platform/win/editing/deleting/delete-br-013-expected.png
index 19abe1b..5907d225 100644
--- a/third_party/blink/web_tests/platform/win/editing/deleting/delete-br-013-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/deleting/delete-br-013-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/deleting/delete-line-015-expected.png b/third_party/blink/web_tests/platform/win/editing/deleting/delete-line-015-expected.png
index a214151..8249388 100644
--- a/third_party/blink/web_tests/platform/win/editing/deleting/delete-line-015-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/deleting/delete-line-015-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/deleting/delete-line-016-expected.png b/third_party/blink/web_tests/platform/win/editing/deleting/delete-line-016-expected.png
index 7471a84c..5406c3d 100644
--- a/third_party/blink/web_tests/platform/win/editing/deleting/delete-line-016-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/deleting/delete-line-016-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/deleting/delete-line-017-expected.png b/third_party/blink/web_tests/platform/win/editing/deleting/delete-line-017-expected.png
index 221af90..bb5c23b8 100644
--- a/third_party/blink/web_tests/platform/win/editing/deleting/delete-line-017-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/deleting/delete-line-017-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/deleting/merge-different-styles-expected.png b/third_party/blink/web_tests/platform/win/editing/deleting/merge-different-styles-expected.png
index 9bfdb6c..b4397da 100644
--- a/third_party/blink/web_tests/platform/win/editing/deleting/merge-different-styles-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/deleting/merge-different-styles-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/deleting/merge-endOfParagraph-expected.png b/third_party/blink/web_tests/platform/win/editing/deleting/merge-endOfParagraph-expected.png
index 76e9e4b..1a42d8d 100644
--- a/third_party/blink/web_tests/platform/win/editing/deleting/merge-endOfParagraph-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/deleting/merge-endOfParagraph-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/deleting/merge-no-br-expected.png b/third_party/blink/web_tests/platform/win/editing/deleting/merge-no-br-expected.png
index 9de3ccc..f2fb648 100644
--- a/third_party/blink/web_tests/platform/win/editing/deleting/merge-no-br-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/deleting/merge-no-br-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/deleting/table-cells-expected.png b/third_party/blink/web_tests/platform/win/editing/deleting/table-cells-expected.png
index 828c784..22dec02 100644
--- a/third_party/blink/web_tests/platform/win/editing/deleting/table-cells-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/deleting/table-cells-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/execCommand/4916541-expected.png b/third_party/blink/web_tests/platform/win/editing/execCommand/4916541-expected.png
index 0d64ee4..b29ba36 100644
--- a/third_party/blink/web_tests/platform/win/editing/execCommand/4916541-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/execCommand/4916541-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/execCommand/5142012-1-expected.png b/third_party/blink/web_tests/platform/win/editing/execCommand/5142012-1-expected.png
index af105d2..1607b3b8 100644
--- a/third_party/blink/web_tests/platform/win/editing/execCommand/5142012-1-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/execCommand/5142012-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/execCommand/format-block-with-trailing-br-expected.png b/third_party/blink/web_tests/platform/win/editing/execCommand/format-block-with-trailing-br-expected.png
index dd6bf82..48e8cee 100644
--- a/third_party/blink/web_tests/platform/win/editing/execCommand/format-block-with-trailing-br-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/execCommand/format-block-with-trailing-br-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/execCommand/insertImage-expected.png b/third_party/blink/web_tests/platform/win/editing/execCommand/insertImage-expected.png
index b7157ee..cce0af8 100644
--- a/third_party/blink/web_tests/platform/win/editing/execCommand/insertImage-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/execCommand/insertImage-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/input/caret-at-the-edge-of-contenteditable-expected.png b/third_party/blink/web_tests/platform/win/editing/input/caret-at-the-edge-of-contenteditable-expected.png
index 64e80a97..99f9a34d 100644
--- a/third_party/blink/web_tests/platform/win/editing/input/caret-at-the-edge-of-contenteditable-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/input/caret-at-the-edge-of-contenteditable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/input/caret-read-only-after-editable-expected.png b/third_party/blink/web_tests/platform/win/editing/input/caret-read-only-after-editable-expected.png
index f197421..8d78464 100644
--- a/third_party/blink/web_tests/platform/win/editing/input/caret-read-only-after-editable-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/input/caret-read-only-after-editable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/input/reveal-caret-of-multiline-contenteditable-expected.png b/third_party/blink/web_tests/platform/win/editing/input/reveal-caret-of-multiline-contenteditable-expected.png
index 474b9294..d480448 100644
--- a/third_party/blink/web_tests/platform/win/editing/input/reveal-caret-of-multiline-contenteditable-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/input/reveal-caret-of-multiline-contenteditable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/4278698-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/4278698-expected.png
index 9dd2945a..4a654412 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/4278698-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/4278698-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/4840662-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/4840662-expected.png
index e211ce6..a4c4e0e 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/4840662-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/4840662-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/5002441-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/5002441-expected.png
index 630335b..a126e06 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/5002441-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/5002441-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/5058163-1-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/5058163-1-expected.png
index d8f7c4d6..fb031eab 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/5058163-1-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/5058163-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/5058163-2-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/5058163-2-expected.png
index 39a7a45..1866747 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/5058163-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/5058163-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/5549929-2-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/5549929-2-expected.png
index 0797fa6a..f9a3bfa 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/5549929-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/5549929-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/5549929-3-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/5549929-3-expected.png
index 56fc645..0d13102 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/5549929-3-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/5549929-3-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/insert-3800346-fix-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/insert-3800346-fix-expected.png
index 59496afd..128372c 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/insert-3800346-fix-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/insert-3800346-fix-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/insert-space-in-empty-doc-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/insert-space-in-empty-doc-expected.png
index cc4b563..fafa674e 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/insert-space-in-empty-doc-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/insert-space-in-empty-doc-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/insert-text-at-tabspan-001-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/insert-text-at-tabspan-001-expected.png
index 0be08a7..3343e6fb 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/insert-text-at-tabspan-001-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/insert-text-at-tabspan-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/insert-text-at-tabspan-003-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/insert-text-at-tabspan-003-expected.png
index f139006..f0f0467 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/insert-text-at-tabspan-003-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/insert-text-at-tabspan-003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/line-break-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/line-break-expected.png
index 2b8b3ce..017db59 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/line-break-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/line-break-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/paragraph-separator-in-table-1-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/paragraph-separator-in-table-1-expected.png
index 1e8704c..77f8d883 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/paragraph-separator-in-table-1-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/paragraph-separator-in-table-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/inserting/paragraph-separator-in-table-2-expected.png b/third_party/blink/web_tests/platform/win/editing/inserting/paragraph-separator-in-table-2-expected.png
index 02296d39..f0a33fd 100644
--- a/third_party/blink/web_tests/platform/win/editing/inserting/paragraph-separator-in-table-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/inserting/paragraph-separator-in-table-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/4631972-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/4631972-expected.png
index a8059e3..d55a3f8 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/4631972-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/4631972-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/4947130-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/4947130-expected.png
index e0e0137..793d9a2d 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/4947130-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/4947130-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/5071074-2-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/5071074-2-expected.png
index 9638ace..b9df7a0 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/5071074-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/5071074-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/5071074-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/5071074-expected.png
index 2d07465..1851566 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/5071074-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/5071074-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/5134759-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/5134759-expected.png
index 09f8ccb..8617fcf 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/5134759-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/5134759-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/5156401-1-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/5156401-1-expected.png
index f5d5588..990cbd3f 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/5156401-1-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/5156401-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/5478250-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/5478250-expected.png
index 2e5999e..ce1fa22 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/5478250-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/5478250-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/5601583-1-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/5601583-1-expected.png
index 48cff63..b426585 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/5601583-1-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/5601583-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/bad-placeholder-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/bad-placeholder-expected.png
index 7f21a9c..5479e0f 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/bad-placeholder-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/bad-placeholder-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/copy-standalone-image-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/copy-standalone-image-expected.png
index 543524ea..34bc9a4 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/copy-standalone-image-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/copy-standalone-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/drag-selected-image-to-contenteditable-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/drag-selected-image-to-contenteditable-expected.png
index 14108a8..bfcdf5c 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/drag-selected-image-to-contenteditable-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/drag-selected-image-to-contenteditable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/input-field-1-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/input-field-1-expected.png
index a5e3c30f..f78a9be 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/input-field-1-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/input-field-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-blockquote-after-blockquote-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-blockquote-after-blockquote-expected.png
index 5434d792..276fca7 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-blockquote-after-blockquote-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-blockquote-after-blockquote-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-blockquote-into-blockquote-4-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-blockquote-into-blockquote-4-expected.png
index e72e371..a0049e98 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-blockquote-into-blockquote-4-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-blockquote-into-blockquote-4-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-001-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-001-expected.png
index 44a62f4..ab9ac0d 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-001-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-002-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-002-expected.png
index 44a62f4..ab9ac0d 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-002-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-003-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-003-expected.png
index 44a62f4..ab9ac0d 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-003-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-004-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-004-expected.png
index 44a62f4..ab9ac0d 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-004-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-004-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-005-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-005-expected.png
index 44a62f4..ab9ac0d 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-005-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-line-endings-005-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-text-at-tabspan-003-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-text-at-tabspan-003-expected.png
index 838fe586..0266cf0 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-text-at-tabspan-003-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/paste-text-at-tabspan-003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/pasting-tabs-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/pasting-tabs-expected.png
index 932ba6b..4c608c5 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/pasting-tabs-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/pasting-tabs-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/quirks-mode-br-1-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/quirks-mode-br-1-expected.png
index ddd4109..031f890 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/quirks-mode-br-1-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/quirks-mode-br-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/styled-element-markup-expected.png b/third_party/blink/web_tests/platform/win/editing/pasteboard/styled-element-markup-expected.png
index 754f853..1a34ba7 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/styled-element-markup-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/styled-element-markup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/5099303-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/5099303-expected.png
index 0c16f955..b3d434e 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/5099303-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/5099303-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/5195166-2-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/5195166-2-expected.png
index 39fdf35..19c5b8b 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/5195166-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/5195166-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/6476-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/6476-expected.png
index fe5421c..54aac6d 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/6476-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/6476-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-2-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-2-expected.png
index b718838..b7003f3 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-2-left-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-2-left-expected.png
index 3cfa390..98b1381c 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-2-left-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-2-left-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-expected.png
index f0952b8..aba612ba 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-right-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-right-expected.png
index 27e465e..142eb8d3 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-right-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/caret-ltr-right-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-2-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-2-expected.png
index c09e543..7a22f25f 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-2-left-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-2-left-expected.png
index eead280..98eb2f1ad 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-2-left-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-2-left-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-expected.png
index 8462902..ec96dec6 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-right-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-right-expected.png
index 20b3411..3444f8d 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-right-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/caret-rtl-right-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/click-start-of-line-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/click-start-of-line-expected.png
index 08da0b3..3ddcec2a3 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/click-start-of-line-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/click-start-of-line-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/contains-boundaries-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/contains-boundaries-expected.png
index 981a60f1..9a68607 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/contains-boundaries-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/contains-boundaries-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/contenteditable-click-inside-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/contenteditable-click-inside-expected.png
index 76b4860..9d8b8d6 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/contenteditable-click-inside-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/contenteditable-click-inside-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/extend-selection-bidi-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/extend-selection-bidi-expected.png
index e159b73..48870b8 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/extend-selection-bidi-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/extend-selection-bidi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/leave-requested-block-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/leave-requested-block-expected.png
index 7065b14..8d0d7a08 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/leave-requested-block-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/leave-requested-block-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/move-backwords-by-word-001-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/move-backwords-by-word-001-expected.png
index c00de72..2d60be03 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/move-backwords-by-word-001-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/move-backwords-by-word-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/move-by-line-002-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/move-by-line-002-expected.png
index 78d5645..da2dc9a 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/move-by-line-002-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/move-by-line-002-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/move-by-sentence-001-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/move-by-sentence-001-expected.png
index 61293fd..ff6a050 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/move-by-sentence-001-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/move-by-sentence-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/move-past-trailing-space-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/move-past-trailing-space-expected.png
index 865e455..2bd6b573 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/move-past-trailing-space-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/move-past-trailing-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/previous-line-position-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/previous-line-position-expected.png
index d94329a..ca354c7 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/previous-line-position-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/previous-line-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/replaced-boundaries-1-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/replaced-boundaries-1-expected.png
index 6b111b3..6a47b5f 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/replaced-boundaries-1-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/replaced-boundaries-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/replaced-boundaries-2-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/replaced-boundaries-2-expected.png
index 1bfa9cbb..62ed8c06 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/replaced-boundaries-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/replaced-boundaries-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/replaced-boundaries-3-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/replaced-boundaries-3-expected.png
index ebefac1..bd89c14 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/replaced-boundaries-3-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/replaced-boundaries-3-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/select-box-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/select-box-expected.png
index 2edf8cfb..9313574 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/select-box-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/select-box-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/select-element-paragraph-boundary-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/select-element-paragraph-boundary-expected.png
index c831b82..7177d7aa 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/select-element-paragraph-boundary-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/select-element-paragraph-boundary-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/select-missing-image-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/select-missing-image-expected.png
index aed3f80..f206014d 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/select-missing-image-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/select-missing-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/triple-click-in-pre-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/triple-click-in-pre-expected.png
index 261857f..3cf8c0e 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/triple-click-in-pre-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/triple-click-in-pre-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/wrapped-line-caret-1-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/wrapped-line-caret-1-expected.png
index a30c703..b09c5cc 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/wrapped-line-caret-1-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/wrapped-line-caret-1-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/wrapped-line-caret-2-expected.png b/third_party/blink/web_tests/platform/win/editing/selection/wrapped-line-caret-2-expected.png
index 5dfc8c2..f0b5028e 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/wrapped-line-caret-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/selection/wrapped-line-caret-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/style/4916887-expected.png b/third_party/blink/web_tests/platform/win/editing/style/4916887-expected.png
index a785d82..21fe771 100644
--- a/third_party/blink/web_tests/platform/win/editing/style/4916887-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/style/4916887-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/style/5065910-expected.png b/third_party/blink/web_tests/platform/win/editing/style/5065910-expected.png
index daa7314..db15b80 100644
--- a/third_party/blink/web_tests/platform/win/editing/style/5065910-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/style/5065910-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/style/5084241-expected.png b/third_party/blink/web_tests/platform/win/editing/style/5084241-expected.png
index 99ac039..af5c24f 100644
--- a/third_party/blink/web_tests/platform/win/editing/style/5084241-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/style/5084241-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/style/5228141-expected.png b/third_party/blink/web_tests/platform/win/editing/style/5228141-expected.png
index 2a0444a..521e25f5 100644
--- a/third_party/blink/web_tests/platform/win/editing/style/5228141-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/style/5228141-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/style/5279521-expected.png b/third_party/blink/web_tests/platform/win/editing/style/5279521-expected.png
index f38f46b..b2fd9e3f 100644
--- a/third_party/blink/web_tests/platform/win/editing/style/5279521-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/style/5279521-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/style/block-styles-007-expected.png b/third_party/blink/web_tests/platform/win/editing/style/block-styles-007-expected.png
index 7343583..80d98d0 100644
--- a/third_party/blink/web_tests/platform/win/editing/style/block-styles-007-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/style/block-styles-007-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/style/highlight-expected.png b/third_party/blink/web_tests/platform/win/editing/style/highlight-expected.png
index dc39a42..6221c47 100644
--- a/third_party/blink/web_tests/platform/win/editing/style/highlight-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/style/highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-delete-001-expected.png b/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-delete-001-expected.png
index d449cb3..90f4956 100644
--- a/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-delete-001-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-delete-001-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-delete-003-expected.png b/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-delete-003-expected.png
index a44a2f8..e214804 100644
--- a/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-delete-003-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-delete-003-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-type-after-expected.png b/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-type-after-expected.png
index 737e07d..39ada64 100644
--- a/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-type-after-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-type-after-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-type-before-expected.png b/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-type-before-expected.png
index 2d825d43..0d06be4 100644
--- a/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-type-before-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/unsupported-content/list-type-before-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/unsupported-content/table-type-after-expected.png b/third_party/blink/web_tests/platform/win/editing/unsupported-content/table-type-after-expected.png
index cef4e4a5..257bec7 100644
--- a/third_party/blink/web_tests/platform/win/editing/unsupported-content/table-type-after-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/unsupported-content/table-type-after-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/editing/unsupported-content/table-type-before-expected.png b/third_party/blink/web_tests/platform/win/editing/unsupported-content/table-type-before-expected.png
index db77879e..8ed2d5b 100644
--- a/third_party/blink/web_tests/platform/win/editing/unsupported-content/table-type-before-expected.png
+++ b/third_party/blink/web_tests/platform/win/editing/unsupported-content/table-type-before-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/backgrounds/background-svg-scaling-expected.png b/third_party/blink/web_tests/platform/win/fast/backgrounds/background-svg-scaling-expected.png
index 8bbd523..e43aef8 100644
--- a/third_party/blink/web_tests/platform/win/fast/backgrounds/background-svg-scaling-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/backgrounds/background-svg-scaling-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-continuations-expected.png b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-continuations-expected.png
index 173bdaba..4d69b45 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-continuations-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-continuations-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-detached-expected.png b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-detached-expected.png
index ea26655..1d9ea8a 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-detached-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-detached-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-multiline-expected.png b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-multiline-expected.png
index 50ff4990..4ad5bbf 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-multiline-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-multiline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-multiline-writingmode-vertical-expected.png b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-multiline-writingmode-vertical-expected.png
index f9cdc58..3a9a760a 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-multiline-writingmode-vertical-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-multiline-writingmode-vertical-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-outline-color-expected.png b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-outline-color-expected.png
index 077a275b..23d466b 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-outline-color-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-outline-offset-expected.png b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-outline-offset-expected.png
index cf6cb1d..5b79e8e 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-outline-offset-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-outline-offset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-outline-width-expected.png b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-outline-width-expected.png
index 9ac4c19..6d2863c 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/focus-ring-outline-width-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/focus-ring-outline-width-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/ignore-empty-focus-ring-rects-expected.png b/third_party/blink/web_tests/platform/win/fast/css/ignore-empty-focus-ring-rects-expected.png
index f542018..f1474e9 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/ignore-empty-focus-ring-rects-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/ignore-empty-focus-ring-rects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/outline-auto-empty-rects-expected.png b/third_party/blink/web_tests/platform/win/fast/css/outline-auto-empty-rects-expected.png
index 44bbbff..ba9a2e8 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/outline-auto-empty-rects-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/outline-auto-empty-rects-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/css/outline-auto-location-expected.png b/third_party/blink/web_tests/platform/win/fast/css/outline-auto-location-expected.png
index ffb37c0..7663337 100644
--- a/third_party/blink/web_tests/platform/win/fast/css/outline-auto-location-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/css/outline-auto-location-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/52776-expected.png b/third_party/blink/web_tests/platform/win/fast/dom/52776-expected.png
index 745540df..3913cc5 100644
--- a/third_party/blink/web_tests/platform/win/fast/dom/52776-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/dom/52776-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/dom/focus-contenteditable-expected.png b/third_party/blink/web_tests/platform/win/fast/dom/focus-contenteditable-expected.png
index 52c185e..56f1cd7 100644
--- a/third_party/blink/web_tests/platform/win/fast/dom/focus-contenteditable-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/dom/focus-contenteditable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/events/reveal-link-when-focused-expected.png b/third_party/blink/web_tests/platform/win/fast/events/reveal-link-when-focused-expected.png
index 8a3696f..7149f78 100644
--- a/third_party/blink/web_tests/platform/win/fast/events/reveal-link-when-focused-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/events/reveal-link-when-focused-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/text/input-placeholder-paint-order-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/text/input-placeholder-paint-order-expected.png
index 6c13269..3106e77a 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/text/input-placeholder-paint-order-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/text/input-placeholder-paint-order-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/text/textfield-outline-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/text/textfield-outline-expected.png
index 8518a76..0f6f155 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/text/textfield-outline-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/text/textfield-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/textarea/textarea-placeholder-paint-order-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
index d706709..7150d3b 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/hidpi/focus-rings-expected.png b/third_party/blink/web_tests/platform/win/fast/hidpi/focus-rings-expected.png
index 0bbf160..35b1bfe 100644
--- a/third_party/blink/web_tests/platform/win/fast/hidpi/focus-rings-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/hidpi/focus-rings-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/inline/25277-2-expected.png b/third_party/blink/web_tests/platform/win/fast/inline/25277-2-expected.png
index 205cbbc..e54c774 100644
--- a/third_party/blink/web_tests/platform/win/fast/inline/25277-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/inline/25277-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/inline/25277-expected.png b/third_party/blink/web_tests/platform/win/fast/inline/25277-expected.png
index 205cbbc..e54c774 100644
--- a/third_party/blink/web_tests/platform/win/fast/inline/25277-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/inline/25277-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/inline/continuation-outlines-expected.png b/third_party/blink/web_tests/platform/win/fast/inline/continuation-outlines-expected.png
index acaf2a5..ed9dee31 100644
--- a/third_party/blink/web_tests/platform/win/fast/inline/continuation-outlines-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/inline/continuation-outlines-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/inline/continuation-outlines-with-layers-2-expected.png b/third_party/blink/web_tests/platform/win/fast/inline/continuation-outlines-with-layers-2-expected.png
index e61fe5f9..4d1e4c98 100644
--- a/third_party/blink/web_tests/platform/win/fast/inline/continuation-outlines-with-layers-2-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/inline/continuation-outlines-with-layers-2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/inline/continuation-outlines-with-layers-expected.png b/third_party/blink/web_tests/platform/win/fast/inline/continuation-outlines-with-layers-expected.png
index a4713b8..f250101a 100644
--- a/third_party/blink/web_tests/platform/win/fast/inline/continuation-outlines-with-layers-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/inline/continuation-outlines-with-layers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/inline/inline-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/fast/inline/inline-focus-ring-expected.png
index 3fea33a..4a4148e 100644
--- a/third_party/blink/web_tests/platform/win/fast/inline/inline-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/inline/inline-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/overflow/overflow-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/fast/overflow/overflow-focus-ring-expected.png
index a9318de..333ce0c 100644
--- a/third_party/blink/web_tests/platform/win/fast/overflow/overflow-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/overflow/overflow-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/table/table-row-focus-ring-paint-expected.png b/third_party/blink/web_tests/platform/win/fast/table/table-row-focus-ring-paint-expected.png
index 3ff3e4f..4fafa80 100644
--- a/third_party/blink/web_tests/platform/win/fast/table/table-row-focus-ring-paint-expected.png
+++ b/third_party/blink/web_tests/platform/win/fast/table/table-row-focus-ring-paint-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-1-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-1-and-click-expected.png
index 406c1d0..73bbd9f 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-1-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-1-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-10-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-10-and-click-expected.png
index f33d4ce0..1dce990 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-10-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-10-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-2-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-2-and-click-expected.png
index 1d5821d..25e150ed 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-2-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-2-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-3-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-3-and-click-expected.png
index b8e54bb..1f08ccb 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-3-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-3-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-4-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-4-and-click-expected.png
index b706406..e7cac614 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-4-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-4-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-5-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-5-and-click-expected.png
index eabedfe..4beb78f 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-5-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-5-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-6-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-6-and-click-expected.png
index f33d4ce0..1dce990 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-6-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-6-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-7-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-7-and-click-expected.png
index f33d4ce0..1dce990 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-7-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-7-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-8-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-8-and-click-expected.png
index 828e2a4..dbdd4c7 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-8-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-8-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-9-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-9-and-click-expected.png
index d038215b..fec28cba 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-9-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-add-summary-9-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-1-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-1-and-click-expected.png
index fb57785..771a7e4 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-1-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-1-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-2-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-2-and-click-expected.png
index 2da72af..76a7661 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-2-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-2-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-3-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-3-and-click-expected.png
index f89f0b0..98e2e37 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-3-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-3-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-4-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-4-and-click-expected.png
index 35d0bcd..0ce36680 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-4-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-4-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-5-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-5-and-click-expected.png
index db340ae..a4b89872 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-5-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-5-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-6-and-click-expected.png b/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-6-and-click-expected.png
index a3a30bbe9..1274063 100644
--- a/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-6-and-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/html/details_summary/details-remove-summary-6-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/imagemap-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/images/imagemap-circle-focus-ring-expected.png
index 0af1e19..208906ad 100644
--- a/third_party/blink/web_tests/platform/win/images/imagemap-circle-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/imagemap-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-expected.png
index fb5e8dc..c88bb83 100644
--- a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-in-positioned-container-expected.png b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-in-positioned-container-expected.png
index c20213c..69d9c77 100644
--- a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-in-positioned-container-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-in-positioned-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-outline-color-expected.png b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-outline-color-expected.png
index 045b593..70eafb5 100644
--- a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-outline-color-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
index a372e35e..04f429ff 100644
--- a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
index 4a1a4b2..0d9cd9d 100644
--- a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-with-paint-root-offset-expected.png b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-with-paint-root-offset-expected.png
index f6aa43e..a2e00a6 100644
--- a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-with-paint-root-offset-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-with-paint-root-offset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-with-scale-transform-expected.png b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-with-scale-transform-expected.png
index 704dbe4..db1824a0 100644
--- a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-with-scale-transform-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-with-scale-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-zoom-expected.png
index af0e4b2..804d9e29 100644
--- a/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-zoom-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/imagemap-focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/imagemap-overflowing-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/images/imagemap-overflowing-circle-focus-ring-expected.png
index 56d050b..5c9990c 100644
--- a/third_party/blink/web_tests/platform/win/images/imagemap-overflowing-circle-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/imagemap-overflowing-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/images/imagemap-overflowing-polygon-focus-ring-expected.png
index f23379f..e0510edd 100644
--- a/third_party/blink/web_tests/platform/win/images/imagemap-overflowing-polygon-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/imagemap-overflowing-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/images/imagemap-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/images/imagemap-polygon-focus-ring-expected.png
index 4f3ea68..1b4954f 100644
--- a/third_party/blink/web_tests/platform/win/images/imagemap-polygon-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/images/imagemap-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/4776765-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/4776765-expected.png
index 34d0c0c..4125c2c 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/4776765-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/4776765-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/4776765-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/4776765-expected.txt
index 353d546..09eb127 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/4776765-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/4776765-expected.txt
@@ -8,7 +8,7 @@
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow DIV",
-          "rect": [7, 43, 786, 62],
+          "rect": [6, 42, 788, 64],
           "reason": "geometry"
         },
         {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/clip/caret-ancestor-clip-change-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/clip/caret-ancestor-clip-change-expected.txt
index dfe13e7..b5cf3c4b 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/clip/caret-ancestor-clip-change-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/clip/caret-ancestor-clip-change-expected.txt
@@ -8,12 +8,12 @@
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow DIV",
-          "rect": [8, 58, 105, 62],
+          "rect": [8, 58, 106, 63],
           "reason": "incremental"
         },
         {
           "object": "LayoutTextControl INPUT id='target'",
-          "rect": [8, 58, 105, 62],
+          "rect": [8, 58, 106, 63],
           "reason": "incremental"
         },
         {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/delete-into-nested-block-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/delete-into-nested-block-expected.png
index 5f2b794..6e1003f 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/delete-into-nested-block-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/delete-into-nested-block-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.png
index 37050d9..27b68c7 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt
index 8216fbe..e03a6504 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt
@@ -8,7 +8,7 @@
       "paintInvalidations": [
         {
           "object": "LayoutSlider INPUT",
-          "rect": [9, 9, 131, 18],
+          "rect": [8, 8, 133, 20],
           "reason": "subtree"
         },
         {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/slider-thumb-float-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/slider-thumb-float-expected.png
index 7057a68..e78098d 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/slider-thumb-float-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/slider-thumb-float-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
index e5b8d5a..aeb465b 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
index 1deb4c8c..b9274879 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
@@ -8,12 +8,12 @@
       "paintInvalidations": [
         {
           "object": "LayoutButton INPUT",
-          "rect": [7, 7, 59, 24],
+          "rect": [6, 6, 61, 26],
           "reason": "subtree"
         },
         {
           "object": "LayoutButton INPUT",
-          "rect": [7, 7, 59, 24],
+          "rect": [6, 6, 61, 26],
           "reason": "chunk appeared"
         },
         {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/invalidate-caret-before-text-node-update-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/invalidate-caret-before-text-node-update-expected.png
index 0fb345c..fdc8bf8 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/invalidate-caret-before-text-node-update-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/invalidate-caret-before-text-node-update-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt
index 8f17f59..596d17b 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt
@@ -8,7 +8,7 @@
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow DIV id='root' class='editing'",
-          "rect": [7, 7, 786, 20],
+          "rect": [6, 6, 788, 22],
           "reason": "style change"
         },
         {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-continuations-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-continuations-expected.txt
index dee1b82..e28e0ff57 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-continuations-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-continuations-expected.txt
@@ -8,7 +8,7 @@
       "paintInvalidations": [
         {
           "object": "NGPhysicalBoxFragment LayoutInline SPAN id='outer'",
-          "rect": [7, 87, 85, 22],
+          "rect": [6, 86, 87, 24],
           "reason": "disappeared"
         }
       ]
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-enable-continuations-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-enable-continuations-expected.png
index 0c781fc..36c205b 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-enable-continuations-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-enable-continuations-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-enable-continuations-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-enable-continuations-expected.txt
index 8c51c130..5f79572 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-enable-continuations-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-enable-continuations-expected.txt
@@ -8,7 +8,7 @@
       "paintInvalidations": [
         {
           "object": "NGPhysicalBoxFragment LayoutInline SPAN id='outer'",
-          "rect": [7, 87, 85, 22],
+          "rect": [6, 86, 87, 24],
           "reason": "appeared"
         }
       ]
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-layers-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-layers-expected.png
index ffd7761..48c75ef 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-layers-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-layers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-ring-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-ring-expected.png
index 02e9d72..964514b 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt
index ae1f713..7d086c3 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt
@@ -8,12 +8,12 @@
       "paintInvalidations": [
         {
           "object": "NGPhysicalBoxFragment LayoutInline SPAN",
-          "rect": [207, 231, 102, 102],
+          "rect": [206, 230, 104, 104],
           "reason": "outline"
         },
         {
           "object": "NGPhysicalBoxFragment LayoutInline SPAN",
-          "rect": [7, 231, 102, 102],
+          "rect": [6, 230, 104, 104],
           "reason": "outline"
         },
         {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt
index 255c4d5..1b6207f 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt
@@ -8,12 +8,12 @@
       "paintInvalidations": [
         {
           "object": "NGPhysicalBoxFragment LayoutInline SPAN",
-          "rect": [7, 7, 102, 106],
+          "rect": [6, 6, 104, 108],
           "reason": "outline"
         },
         {
           "object": "NGPhysicalBoxFragment LayoutInline SPAN",
-          "rect": [7, 87, 102, 102],
+          "rect": [6, 86, 104, 104],
           "reason": "outline"
         },
         {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt
index e965c9d..41d42faf 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt
@@ -8,7 +8,7 @@
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow DIV id='outline'",
-          "rect": [7, 7, 152, 102],
+          "rect": [6, 6, 154, 104],
           "reason": "outline"
         },
         {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt
index 07deeb1..6427e9ee 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt
@@ -8,7 +8,7 @@
       "paintInvalidations": [
         {
           "object": "LayoutNGBlockFlow DIV id='outline'",
-          "rect": [7, 7, 152, 102],
+          "rect": [6, 6, 154, 104],
           "reason": "geometry"
         },
         {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt
index b6aa8c4..0ba430c 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt
@@ -8,13 +8,13 @@
     },
     {
       "name": "LayoutTextControl INPUT id='root'",
-      "position": [-1, -1],
-      "bounds": [70, 24],
+      "position": [-2, -2],
+      "bounds": [72, 26],
       "backgroundColor": "#FFFFFF",
       "paintInvalidations": [
         {
           "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 70, 24],
+          "rect": [0, 0, 72, 26],
           "reason": "full layer"
         },
         {
@@ -24,7 +24,7 @@
         },
         {
           "object": "Caret",
-          "rect": [65, 4, 1, 16],
+          "rect": [66, 5, 1, 16],
           "reason": "caret"
         }
       ],
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt
index b6aa8c4..0ba430c 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt
@@ -8,13 +8,13 @@
     },
     {
       "name": "LayoutTextControl INPUT id='root'",
-      "position": [-1, -1],
-      "bounds": [70, 24],
+      "position": [-2, -2],
+      "bounds": [72, 26],
       "backgroundColor": "#FFFFFF",
       "paintInvalidations": [
         {
           "object": "LayoutTextControl INPUT id='root'",
-          "rect": [0, 0, 70, 24],
+          "rect": [0, 0, 72, 26],
           "reason": "full layer"
         },
         {
@@ -24,7 +24,7 @@
         },
         {
           "object": "Caret",
-          "rect": [65, 4, 1, 16],
+          "rect": [66, 5, 1, 16],
           "reason": "caret"
         }
       ],
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/focus-element-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/focus-element-expected.png
index 8d2fee6..ccdfba5 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/focus-element-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/focus-element-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/focus-element-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/focus-element-expected.txt
index 60bde34..763aba7f 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/focus-element-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/focus-element-expected.txt
@@ -8,7 +8,7 @@
       "paintInvalidations": [
         {
           "object": "LayoutSVGRect rect id='rect'",
-          "rect": [57, 57, 52, 52],
+          "rect": [56, 56, 54, 54],
           "reason": "style change"
         }
       ]
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
index 1368e0d..fd7df3e9 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
index bbc867d2..c2ba0403 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -18,7 +18,7 @@
         },
         {
           "object": "NGPhysicalBoxFragment LayoutInline A",
-          "rect": [384, 1011, 46, 21],
+          "rect": [383, 1010, 48, 23],
           "reason": "appeared"
         },
         {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
new file mode 100644
index 0000000..fd365f4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
@@ -0,0 +1,48 @@
+{
+  "layers": [
+    {
+      "name": "Scrolling Contents Layer",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "backgroundColor": "#FFFFFF"
+    },
+    {
+      "name": "LayoutNGBlockFlow (positioned) DIV id='target'",
+      "position": [-2, -2],
+      "bounds": [204, 204],
+      "backfaceVisibility": "hidden",
+      "backgroundColor": "#FFFF00",
+      "paintInvalidations": [
+        {
+          "object": "LayoutNGBlockFlow (positioned) DIV id='target'",
+          "rect": [0, 0, 204, 204],
+          "reason": "full layer"
+        },
+        {
+          "object": "LayoutNGBlockFlow (positioned) DIV id='target'",
+          "rect": [0, 0, 200, 200],
+          "reason": "full layer"
+        }
+      ],
+      "transform": 1
+    },
+    {
+      "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV)",
+      "position": [100, 100],
+      "bounds": [300, 440],
+      "transform": 1
+    }
+  ],
+  "transforms": [
+    {
+      "id": 1,
+      "transform": [
+        [1, 0, 0, 0],
+        [0, 1, 0, 0],
+        [0, 0, 1, 0],
+        [8, 58, 0, 1]
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/table/caret-contenteditable-content-after-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/table/caret-contenteditable-content-after-expected.png
index 6594da91..859136d 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/table/caret-contenteditable-content-after-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/table/caret-contenteditable-content-after-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/table/caret-contenteditable-content-after-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/table/caret-contenteditable-content-after-expected.txt
index 84f9747..ff7a984f 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/table/caret-contenteditable-content-after-expected.txt
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/table/caret-contenteditable-content-after-expected.txt
@@ -8,22 +8,22 @@
       "paintInvalidations": [
         {
           "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
+          "rect": [6, 46, 788, 24],
           "reason": "geometry"
         },
         {
           "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
+          "rect": [6, 46, 788, 24],
           "reason": "geometry"
         },
         {
           "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
+          "rect": [6, 46, 788, 24],
           "reason": "geometry"
         },
         {
           "object": "LayoutBlockFlow DIV id='editor'",
-          "rect": [7, 47, 786, 22],
+          "rect": [6, 46, 788, 24],
           "reason": "appeared"
         },
         {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/transform/caret-with-transformation-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/transform/caret-with-transformation-expected.png
index 1bf8481..b3ad373 100644
--- a/third_party/blink/web_tests/platform/win/paint/invalidation/transform/caret-with-transformation-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/invalidation/transform/caret-with-transformation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-expected.png
index 5924594..3230921c 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-64px-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-64px-expected.png
index 3c3a340a..127379a 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-64px-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-64px-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-8px-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-8px-expected.png
index 80db476..0340037 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-8px-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-font-8px-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-125-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-125-expected.png
index f00b8fb..a3b996b 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-125-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-150-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-150-expected.png
index 79cb6a2..7eca956 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-150-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-175-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-175-expected.png
index c3447fa..efe18bb 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-175-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-175-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-200-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-200-expected.png
index 32fea82..7feea42 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-200-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-2000-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-2000-expected.png
index 7642fc25..4ab3990 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-2000-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-2000-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-250-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-250-expected.png
index a81c833..9b430f34 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-250-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/document-markers-zoom-250-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/as-image/image-respects-deviceScaleFactor-expected.png b/third_party/blink/web_tests/platform/win/svg/as-image/image-respects-deviceScaleFactor-expected.png
index 20407b6..4aa17cf 100644
--- a/third_party/blink/web_tests/platform/win/svg/as-image/image-respects-deviceScaleFactor-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/as-image/image-respects-deviceScaleFactor-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/focus-ring-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/focus-ring-expected.png
index e5271c4..5f7fe4f 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/svg/custom/focus-ring-text-expected.png b/third_party/blink/web_tests/platform/win/svg/custom/focus-ring-text-expected.png
index f1cfd2b..d179531 100644
--- a/third_party/blink/web_tests/platform/win/svg/custom/focus-ring-text-expected.png
+++ b/third_party/blink/web_tests/platform/win/svg/custom/focus-ring-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/transforms/transformed-caret-expected.png b/third_party/blink/web_tests/platform/win/transforms/transformed-caret-expected.png
index 3a1b9d3..d825e8c 100644
--- a/third_party/blink/web_tests/platform/win/transforms/transformed-caret-expected.png
+++ b/third_party/blink/web_tests/platform/win/transforms/transformed-caret-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
index caa729f..76a85da 100644
--- a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/color/color-suggestion-picker-appearance-expected.png
index 93536ba2..e1ddbce 100644
--- a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
index 4f3f951..b2fe11c 100644
--- a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
index 45b6389..e6f80ae3 100644
--- a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png
index 0c7aa00..af60cc9 100644
--- a/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
new file mode 100644
index 0000000..b35834b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
new file mode 100644
index 0000000..80bdae4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
index 53e7683..fc30771 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..7b57b36
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
new file mode 100644
index 0000000..bba0f55
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index b4c099b..a034bc5 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
new file mode 100644
index 0000000..c8136af
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
new file mode 100644
index 0000000..ef7cc54
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
new file mode 100644
index 0000000..5c1cfa8b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
similarity index 68%
rename from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
rename to third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
index c84cbdd..f69b0a7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
new file mode 100644
index 0000000..29effb3e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
new file mode 100644
index 0000000..60761d3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
new file mode 100644
index 0000000..b0f23d4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..ce2fdaa1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..2a5c60a1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..e443cf4d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..715c121
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..3c8a78d0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index b0457aef..d3e7f5d 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
index 6dfaa5a..470ca9c 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
index e6a8fe2..3ef156e 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
index 589c8a3..8a9bcb8 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
index 69d0c5d..e6e6789 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
index 923974e..880ba0b 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
index 7323fef..1b127a2 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
index 6dfaa5a..470ca9c 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
index e52d347..cd3d8aa 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
index d3c96b03..15db939 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
index 62e4cca..f45a5e9 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
index dcebf18..5643173 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index d1112112..5cf9f6a1 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
index e2f2ee7..8ac811c4 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
index d05f206..42b1f9bf5 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
index 834a396..a793d3bd 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
index d80992b..82acd406 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
new file mode 100644
index 0000000..e40c00f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
new file mode 100644
index 0000000..adaa176
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
new file mode 100644
index 0000000..bdcd8d0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
index 3225737..7bbec48 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
index 42b618a..84c57aa 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
index cb48707..1677eec 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
index c0d3008..ea79af5 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
index 210e5f02..0e8054ba 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index 19adc10..7b58e5de 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png
index e96b861..72c2e297 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png
index 92f8ebe..9f9f21d 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png
index 6776ef2..f244968 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-down-keyboard-navigation-from-top-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png
index e96b861..72c2e297 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-drag-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png
index f0644fe..943f4ca 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-keyboard-navigation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png
index 3f4655f..2513819 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-bottom-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png
index 4dfe404..03956a7 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-left-keyboard-navigation-from-top-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png
index 5e43cb4..f5db7957 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-bottom-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png
index 9dbfbbd..71131460 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-right-keyboard-navigation-from-top-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png
index 2a47431..5e3b372 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-left-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png
index 6bd37a8c..4e4464f 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-color-well-up-keyboard-navigation-from-bottom-right-corner-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png
index 5e07307..a8872bd 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hex-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png
index 1e6b80ff..6b95e3c 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png
index 85ffe05..59136c28c 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-accelerated-keyboard-navigation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png
index c959607d..1d630b18 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png
index c959607d..1d630b18 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-drag-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png
index 758ce17..8dd87156 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-keyboard-navigation-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png
index dbf011f4..7109590 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-left-edge-zero-hue-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png
index 47407a4..aab15fd 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-hue-slider-right-edge-zero-hue-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png
index 6b94fb1..39e516c3 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-imperfect-match-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png
index b985cc1..c1c05531 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-manual-color-change-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png
index 87be1f6..27b1eb5 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-set-value-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png
index f989b7a..9f2da970 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-value-attribute-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png
index edbf519..a19b86f3 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png
index c8f313e..d8cddb18 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png
index 6b39669..2567ebc5 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-empty-list-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png
index cf6f5040..fe646b50 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-one-row-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png
index 57bb5b33..d38c389 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-two-rows-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png
index 225334b..fadab2e5 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-value-attribute-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom125-expected.png
index 369d1bd..e7d9d69 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png
index a18a4b0..59c882c3 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/color/color-suggestion-picker-appearance-zoom200-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
index 769a96b..63b6472 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/focus-rect/checkbox-zoom-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/focus-rect/checkbox-zoom-focus-ring-expected.png
new file mode 100644
index 0000000..c3a6849
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/focus-rect/checkbox-zoom-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/focus-rect/focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/focus-rect/focus-ring-zoom-expected.png
new file mode 100644
index 0000000..6123378
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/focus-rect/focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
index 631cc0c..51f8b5b 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
index fa584477..40b2daad 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
index e08dfec..6a3fc93 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
index e6b9354..1a8fffd2 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-alt-f8-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-alt-f8-expected.png
index d80992b..82acd406 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-alt-f8-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-alt-f8-twice-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
index d80992b..82acd406 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-alt-f8-twice-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
index 639312e..85ed8d2 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
index 8a739bd..a68fa09 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
index e58188c..79dba2e2 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
index 47466e4..c2c01c1 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-mismatched_glyph-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
index d80992b..82acd406 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-mismatched_glyph-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
index 1f3834f..d434075 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
index 8e2b79c..f5d999c 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-AM-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
index 52e0d94..7fa0ccf7 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-12-PM-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png
index 561cebcb..ee4b373 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-24-hour-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
index 6a0b344d..b470470a 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowdown-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
index 3d4112be..766b2c7 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-arrowup-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
index 21ed4c8..79c04bd 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
index 8a2d80fb..220c134 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-milliseconds-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
index 282e845..28e8dbb 100644
--- a/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh/time-picker/time-picker-appearance-seconds-pm-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png
index 3c75d67..ce7a020f 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-expected.png
index 94ac255..2997287 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png
index 8f58f48..e80b560 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-expected.png
index 0b2b524..7ffaa08 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
index 36691a2f..80dc4e5 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
index 5b6e63e..b4cacfb 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png
index efca983..a46c967 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png
index 425e555e..eeb3ef3 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png
index 7e99a0be..7170f95 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png
index b3756a6..77f6ecb0 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png
index 4274da1..c37200c 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png
index 8414dc3..ac082b12 100644
--- a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/input-placeholder-paint-order-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/input-placeholder-paint-order-expected.png
new file mode 100644
index 0000000..6c13269
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/input-placeholder-paint-order-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/textfield-outline-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/textfield-outline-expected.png
new file mode 100644
index 0000000..8518a76
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/text/textfield-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-placeholder-paint-order-expected.png b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
new file mode 100644
index 0000000..d706709
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png
index 928fce3..4ffe6080 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png
index c4f06e4..f70900e 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png
index 922e4a4..ab27d45 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png
index 15991e01..b427c7d 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
index 2656621..dda041f 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png
index c415917..0f6f0c6 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png
index a2b51547..47ed400 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
index 1cd6e7a6..a64613f 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png
index 80d3f5d..2c8b197 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png
index 0e2ee09f..eacd08b 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png
index 213f88c..c698a08 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/mouseevent_fractional/fast/events/reveal-link-when-focused-expected.png b/third_party/blink/web_tests/platform/win/virtual/mouseevent_fractional/fast/events/reveal-link-when-focused-expected.png
new file mode 100644
index 0000000..7149f78
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/mouseevent_fractional/fast/events/reveal-link-when-focused-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png b/third_party/blink/web_tests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
index c8ddef9..d08bbbb 100644
--- a/third_party/blink/web_tests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/prefer_compositing_to_lcd_text/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/virtual/prefer_compositing_to_lcd_text/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png b/third_party/blink/web_tests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
index fb11c48..8c20c94 100644
--- a/third_party/blink/web_tests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/prefer_compositing_to_lcd_text/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/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
index 328dc8f..fa127e6 100644
--- a/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/popup-menu-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/popup-menu-appearance-expected.png
index 9b4ea6c..c44af57 100644
--- a/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/popup-menu-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/popup-menu-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png b/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
index 38a1413..63605020 100644
--- a/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png
index e4f0b3b..f95ee41 100644
--- a/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance-expected.png
index 1083dc32..fa4c58a4 100644
--- a/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png b/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
index 33b91c7..65b02c6 100644
--- a/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/caps-lock-indicator-disabled-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/caps-lock-indicator-disabled-expected.png
index edea03e..f82533a 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/caps-lock-indicator-disabled-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/caps-lock-indicator-disabled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/caps-lock-indicator-enabled-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/caps-lock-indicator-enabled-expected.png
index b9ccdc8..6d82ae9 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/caps-lock-indicator-enabled-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/caps-lock-indicator-enabled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/caps-lock-indicator-enabled-rtl-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/caps-lock-indicator-enabled-rtl-expected.png
index 2d1d84b..aba2821 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/caps-lock-indicator-enabled-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/caps-lock-indicator-enabled-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-ltr-text-in-ltr-flow-underline-composition-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-ltr-text-in-ltr-flow-underline-composition-expected.png
index 0e02c686..8409c85 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-ltr-text-in-ltr-flow-underline-composition-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-ltr-text-in-ltr-flow-underline-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-ltr-text-in-rtl-flow-underline-composition-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-ltr-text-in-rtl-flow-underline-composition-expected.png
index 1b43ae5..e6504528 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-ltr-text-in-rtl-flow-underline-composition-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-ltr-text-in-rtl-flow-underline-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-rtl-text-in-ltr-flow-underline-composition-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-rtl-text-in-ltr-flow-underline-composition-expected.png
index 6baf253..cf43f7b 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-rtl-text-in-ltr-flow-underline-composition-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-rtl-text-in-ltr-flow-underline-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-rtl-text-in-rtl-flow-underline-composition-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-rtl-text-in-rtl-flow-underline-composition-expected.png
index 94dd979..0d401a9 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-rtl-text-in-rtl-flow-underline-composition-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/ellipsis-rtl-text-in-rtl-flow-underline-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/delete-hard-break-character-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/delete-hard-break-character-expected.png
index 4152ad2..5718486 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/delete-hard-break-character-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/delete-hard-break-character-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/rtl-caret-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/rtl-caret-expected.png
index e1dc046..9a81d1a1 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/rtl-caret-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/rtl-caret-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/select-new-line-with-line-break-normal-expected.png b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/select-new-line-with-line-break-normal-expected.png
index 4aeadb48..950294e5 100644
--- a/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/select-new-line-with-line-break-normal-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/text-antialias/selection/select-new-line-with-line-break-normal-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/fast/dom/52776-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/fast/dom/52776-expected.png
new file mode 100644
index 0000000..3913cc5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/fast/dom/52776-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/fast/dom/focus-contenteditable-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/fast/dom/focus-contenteditable-expected.png
new file mode 100644
index 0000000..56f1cd7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/fast/dom/focus-contenteditable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-1-and-click-expected.png
similarity index 70%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-1-and-click-expected.png
index ef426e5..73bbd9f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-1-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-10-and-click-expected.png
similarity index 70%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-10-and-click-expected.png
index ef426e5..1dce990 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-10-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-2-and-click-expected.png
similarity index 73%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-2-and-click-expected.png
index b19ef2d5..25e150ed 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-2-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-3-and-click-expected.png
similarity index 69%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-3-and-click-expected.png
index 7912dfd..1f08ccb 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-3-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-4-and-click-expected.png
similarity index 68%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-4-and-click-expected.png
index 527065b..e7cac614 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-4-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-5-and-click-expected.png
similarity index 68%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-5-and-click-expected.png
index a3c2b66e..4beb78f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-5-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-6-and-click-expected.png
similarity index 70%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-6-and-click-expected.png
index ef426e5..1dce990 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-6-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-7-and-click-expected.png
similarity index 70%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-7-and-click-expected.png
index ef426e5..1dce990 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-7-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-8-and-click-expected.png
similarity index 70%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-8-and-click-expected.png
index ef426e5..dbdd4c7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-8-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-9-and-click-expected.png
similarity index 74%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-9-and-click-expected.png
index 7912dfd..fec28cba 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-9-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-1-and-click-expected.png
similarity index 76%
rename from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
rename to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-1-and-click-expected.png
index 527065b..771a7e4 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-1-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-2-and-click-expected.png
similarity index 73%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-2-and-click-expected.png
index 7912dfd..76a7661 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-2-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-3-and-click-expected.png
similarity index 68%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-3-and-click-expected.png
index ef426e5..98e2e37 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-3-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-4-and-click-expected.png
similarity index 75%
rename from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
rename to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-4-and-click-expected.png
index a3c2b66e..0ce36680 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-4-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-5-and-click-expected.png
similarity index 71%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
copy to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-5-and-click-expected.png
index a3c2b66e..a4b89872 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-5-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-6-and-click-expected.png
similarity index 74%
rename from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
rename to third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-6-and-click-expected.png
index 7912dfd..1274063 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-6-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/custom-elements/form-validation-bubble-appearance-expected.png b/third_party/blink/web_tests/platform/win7/custom-elements/form-validation-bubble-appearance-expected.png
index b0639f6..2cb858f 100644
--- a/third_party/blink/web_tests/platform/win7/custom-elements/form-validation-bubble-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/custom-elements/form-validation-bubble-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/blink/web_tests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
index 9f5f13b..aab0d8d 100644
--- a/third_party/blink/web_tests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ b/third_party/blink/web_tests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
index 869fd52..02a2b4e 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/color/color-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..e1ddbce
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
new file mode 100644
index 0000000..b2fe11c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png b/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
new file mode 100644
index 0000000..e6f80ae3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom090-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png b/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png
index 2e859d4..5c041a44 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/cascade/fast/forms/select-popup/popup-menu-appearance-zoom110-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
index 85305ca..af73e88e 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
index f5f23bf..92bbaf4 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
new file mode 100644
index 0000000..fc30771
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..7b57b36
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
new file mode 100644
index 0000000..bba0f55
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index 1f7c2586..719427c 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
index 0dad089..25ece75 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
index bd985e9..bfc27ef 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
index 0a7a472..3153171 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
similarity index 68%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
index c84cbdd..f69b0a7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-4x-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/password/password-with-reveal-button-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
new file mode 100644
index 0000000..29effb3e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
new file mode 100644
index 0000000..60761d3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
new file mode 100644
index 0000000..b0f23d4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..ce2fdaa1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/date-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..2a5c60a1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
index e518576..431a1e80 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..715c121
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..3c8a78d0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/week-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
index b0457aef..d3e7f5d 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/time-picker/time-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
index 9043cdb..4f3eead 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-coarse-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
index ef44020..e7078c0 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-disabled-previous-month-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
index a2c4ab7..c503f7e 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
index a408cbb..345f1d7 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-step-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
index 08280656..6d5eccc 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-appearance-zoom150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
index 59cd069..f22efacf 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/calendar-picker/date-picker-month-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
index 9043cdb..4f3eead 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
index 0de972a..247e6a2 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/calendar-picker/date-picker-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
index bff1ee3..a09c4590 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/datetimelocal-picker/datetimelocal-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
index 48e0cfa..ff18fef 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-disabled-values-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
index 2d08858..5a9595a 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
index 350e63b..7134a8e 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/month-picker/month-picker-appearance-highlight-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
index bdcba8c..3dbcb3a 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/color-scheme/suggestion-picker/month-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
index 0bae342..60f7d39 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/datetimelocal-picker/datetimelocal-picker-step2-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
index f151430..5efd148e 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-disabled-today-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
index 9a75b94..176a1a50 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
index 4051a11..a1216bc 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-value-not-in-interval-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
index 3edf8e8..9138128 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/month-picker/month-picker-appearance-zoom150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
index b278bd7..6606e39 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/time-picker/time-picker-appearance-ko-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png
new file mode 100644
index 0000000..ce7a020f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-expected.png b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-expected.png
new file mode 100644
index 0000000..2997287
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png
new file mode 100644
index 0000000..e80b560
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-expected.png b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-expected.png
new file mode 100644
index 0000000..7ffaa08
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
new file mode 100644
index 0000000..80dc4e5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
new file mode 100644
index 0000000..b4cacfb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png
new file mode 100644
index 0000000..a46c967
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png
new file mode 100644
index 0000000..eeb3ef3
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png
new file mode 100644
index 0000000..7170f95
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png
new file mode 100644
index 0000000..77f6ecb0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png
new file mode 100644
index 0000000..c37200c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png
new file mode 100644
index 0000000..ac082b12
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/text/input-placeholder-paint-order-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/text/input-placeholder-paint-order-expected.png
new file mode 100644
index 0000000..6c13269
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/text/input-placeholder-paint-order-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/text/textfield-outline-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/text/textfield-outline-expected.png
new file mode 100644
index 0000000..8518a76
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/text/textfield-outline-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-placeholder-paint-order-expected.png b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
new file mode 100644
index 0000000..d706709
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/form-controls-refresh-disabled/fast/forms/textarea/textarea-placeholder-paint-order-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png
new file mode 100644
index 0000000..4ffe6080
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png
new file mode 100644
index 0000000..f70900e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png
new file mode 100644
index 0000000..ab27d45
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png
new file mode 100644
index 0000000..b427c7d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
new file mode 100644
index 0000000..dda041f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png
new file mode 100644
index 0000000..0f6f0c6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png
new file mode 100644
index 0000000..47ed400
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
new file mode 100644
index 0000000..a64613f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png
new file mode 100644
index 0000000..2c8b197
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png
new file mode 100644
index 0000000..eacd08b
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png
new file mode 100644
index 0000000..c698a08
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/mouseevent_fractional/fast/events/reveal-link-when-focused-expected.png b/third_party/blink/web_tests/platform/win7/virtual/mouseevent_fractional/fast/events/reveal-link-when-focused-expected.png
new file mode 100644
index 0000000..7149f78
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/mouseevent_fractional/fast/events/reveal-link-when-focused-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png b/third_party/blink/web_tests/platform/win7/virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
new file mode 100644
index 0000000..d08bbbb
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/prefer_compositing_to_lcd_text/compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/prefer_compositing_to_lcd_text/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png b/third_party/blink/web_tests/platform/win7/virtual/prefer_compositing_to_lcd_text/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
new file mode 100644
index 0000000..8c20c94
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/prefer_compositing_to_lcd_text/compositing/overflow/update-widget-positions-on-nested-frames-and-scrollers-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
index 918c7ac..2c52cb2 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/popup-menu-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/popup-menu-appearance-expected.png
new file mode 100644
index 0000000..c44af57
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/popup-menu-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
new file mode 100644
index 0000000..63605020
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png
index 95060cf..5aa0320c 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance-expected.png
new file mode 100644
index 0000000..fa4c58a4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/popup-menu-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
new file mode 100644
index 0000000..65b02c6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/caps-lock-indicator-disabled-expected.png b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/caps-lock-indicator-disabled-expected.png
index eca6e4b..c0dbd28 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/caps-lock-indicator-disabled-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/caps-lock-indicator-disabled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/caps-lock-indicator-enabled-expected.png b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/caps-lock-indicator-enabled-expected.png
index ba02d54bb..cfac6f8e 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/caps-lock-indicator-enabled-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/caps-lock-indicator-enabled-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/caps-lock-indicator-enabled-rtl-expected.png b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/caps-lock-indicator-enabled-rtl-expected.png
index e287e19..7b3d0a7 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/caps-lock-indicator-enabled-rtl-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/caps-lock-indicator-enabled-rtl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-ltr-text-in-ltr-flow-underline-composition-expected.png b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-ltr-text-in-ltr-flow-underline-composition-expected.png
index 25c30a3..d28f01ed 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-ltr-text-in-ltr-flow-underline-composition-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-ltr-text-in-ltr-flow-underline-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-ltr-text-in-rtl-flow-underline-composition-expected.png b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-ltr-text-in-rtl-flow-underline-composition-expected.png
index c9611ac..12a89da 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-ltr-text-in-rtl-flow-underline-composition-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-ltr-text-in-rtl-flow-underline-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-rtl-text-in-ltr-flow-underline-composition-expected.png b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-rtl-text-in-ltr-flow-underline-composition-expected.png
index d88edc0..54ffc02 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-rtl-text-in-ltr-flow-underline-composition-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-rtl-text-in-ltr-flow-underline-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-rtl-text-in-rtl-flow-underline-composition-expected.png b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-rtl-text-in-rtl-flow-underline-composition-expected.png
index 93fc59d..fa4b518 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-rtl-text-in-rtl-flow-underline-composition-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/ellipsis-rtl-text-in-rtl-flow-underline-composition-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/delete-hard-break-character-expected.png b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/delete-hard-break-character-expected.png
index e9ddd4d..01c129a 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/delete-hard-break-character-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/delete-hard-break-character-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/mixed-directionality-selection-expected.png b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/mixed-directionality-selection-expected.png
index 569351f..e5f6adb 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/mixed-directionality-selection-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/mixed-directionality-selection-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/rtl-caret-expected.png b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/rtl-caret-expected.png
index 73c8bc68..bdc2b9c 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/rtl-caret-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/rtl-caret-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/select-new-line-with-line-break-normal-expected.png b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/select-new-line-with-line-break-normal-expected.png
index b44c4fb..d94d37cc 100644
--- a/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/select-new-line-with-line-break-normal-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/text-antialias/selection/select-new-line-with-line-break-normal-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/fast/dom/52776-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/fast/dom/52776-expected.png
new file mode 100644
index 0000000..3913cc5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/fast/dom/52776-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/fast/dom/focus-contenteditable-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/fast/dom/focus-contenteditable-expected.png
new file mode 100644
index 0000000..56f1cd7
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/fast/dom/focus-contenteditable-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-1-and-click-expected.png
similarity index 70%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-1-and-click-expected.png
index ef426e5..73bbd9f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-1-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-10-and-click-expected.png
similarity index 70%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-10-and-click-expected.png
index ef426e5..1dce990 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-10-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-2-and-click-expected.png
similarity index 73%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-2-and-click-expected.png
index b19ef2d5..25e150ed 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-2-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-3-and-click-expected.png
similarity index 69%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-3-and-click-expected.png
index 7912dfd..1f08ccb 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-3-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-4-and-click-expected.png
similarity index 68%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-4-and-click-expected.png
index 527065b..e7cac614 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-4-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-5-and-click-expected.png
similarity index 68%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-5-and-click-expected.png
index a3c2b66e..4beb78f 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-5-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-6-and-click-expected.png
similarity index 70%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-6-and-click-expected.png
index ef426e5..1dce990 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-6-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-7-and-click-expected.png
similarity index 70%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-7-and-click-expected.png
index ef426e5..1dce990 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-7-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-8-and-click-expected.png
similarity index 70%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-8-and-click-expected.png
index ef426e5..dbdd4c7 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-8-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-9-and-click-expected.png
similarity index 74%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-9-and-click-expected.png
index 7912dfd..fec28cba 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-add-summary-9-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-1-and-click-expected.png
similarity index 76%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-1-and-click-expected.png
index 527065b..771a7e4 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-1-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-2-and-click-expected.png
similarity index 73%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-2-and-click-expected.png
index 7912dfd..76a7661 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-2-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-3-and-click-expected.png
similarity index 68%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-3-and-click-expected.png
index ef426e5..98e2e37 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-3-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-4-and-click-expected.png
similarity index 75%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-4-and-click-expected.png
index a3c2b66e..0ce36680 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-4-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-5-and-click-expected.png
similarity index 71%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-5-and-click-expected.png
index a3c2b66e..a4b89872 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-5-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-6-and-click-expected.png
similarity index 74%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
copy to third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-6-and-click-expected.png
index 7912dfd..1274063 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-zoom-0.5x-expected.png
+++ b/third_party/blink/web_tests/platform/win7/virtual/web-components-v0-disabled/html/details_summary/details-remove-summary-6-and-click-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/serial/serial_requestPort.html b/third_party/blink/web_tests/serial/serial_requestPort.html
index e253efb..aa04ee1 100644
--- a/third_party/blink/web_tests/serial/serial_requestPort.html
+++ b/third_party/blink/web_tests/serial/serial_requestPort.html
@@ -55,5 +55,34 @@
   assert_true(firstPort === secondPort);
 }, 'requestPort() returns the same port object every time');
 
+serial_test(async (t, fake) => {
+  let guid = fake.addPort();
+  fake.setSelectedPort(guid);
+
+  await trustedClick();
+  let port = await navigator.serial.requestPort({ filters: [] });
+  assert_true(port instanceof SerialPort);
+}, 'An empty list of filters is valid');
+
+serial_test(async (t, fake) => {
+  let guid = fake.addPort();
+  fake.setSelectedPort(guid);
+
+  await trustedClick();
+  return promise_rejects(t, new TypeError(), navigator.serial.requestPort({
+    filters: [{}],
+  }));
+}, 'An empty filter is not valid');
+
+serial_test(async (t, fake) => {
+  let guid = fake.addPort();
+  fake.setSelectedPort(guid);
+
+  await trustedClick();
+  return promise_rejects(t, new TypeError(), navigator.serial.requestPort({
+    filters: [{ usbProductId: 0x0001 }],
+  }));
+}, 'requestPort() requires a USB vendor ID if a product ID specified');
+
 </script>
 </body>
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
deleted file mode 100644
index df69cee..0000000
--- a/third_party/blink/web_tests/virtual/controls-refresh/color-scheme/select/select-inpage-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
deleted file mode 100644
index 900c0d6..0000000
--- a/third_party/blink/web_tests/virtual/controls-refresh/color-scheme/select/select-multiple-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
deleted file mode 100644
index bb7c03696..0000000
--- a/third_party/blink/web_tests/virtual/controls-refresh/color-scheme/select/select-popup-appearance-basic-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/checkbox-zoom-focus-ring.html b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/checkbox-zoom-focus-ring.html
new file mode 100644
index 0000000..9f7f100
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/checkbox-zoom-focus-ring.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<script>
+window.onload = function() {
+    document.getElementById("input").focus();
+}
+</script>
+</head>
+<body style="background-color: green;">
+<input id="input" type="checkbox" checked style="zoom: 10"/>
+</body>
+</head>
+</html>
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-border-radius-expected.png
similarity index 61%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
copy to third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-border-radius-expected.png
index a3c2b66e..060657b0 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-small-size-alt-f8-expected.png
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-border-radius-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-border-radius.html b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-border-radius.html
new file mode 100644
index 0000000..7a72fad6
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-border-radius.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<script>
+window.onload = function() {
+  document.getElementById("input").focus();
+}
+</script>
+</head>
+<body style="background-color: green;">
+<input id="input" type="text" style="border-radius: 40px;"/>
+</body>
+</head>
+</html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-border-width-changed-expected.png
similarity index 67%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
copy to third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-border-width-changed-expected.png
index ef426e5..094f334 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-48px-expected.png
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-border-width-changed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-border-width-changed.html b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-border-width-changed.html
new file mode 100644
index 0000000..2658e7a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-border-width-changed.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<script>
+window.onload = function() {
+  document.getElementById("input").focus();
+}
+</script>
+</head>
+<body style="background-color: blue">
+<input id="input" type="text" style="border-width: 6px;" />
+</body>
+</head>
+</html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-detached-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-detached-expected.png
new file mode 100644
index 0000000..eb60f66ae
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-detached-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-detached.html b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-detached.html
new file mode 100644
index 0000000..1f6adbc3
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-detached.html
@@ -0,0 +1,18 @@
+<html>
+<head>
+<script>
+window.onload = function() {
+  document.getElementById("detached").focus();
+}
+</script>
+</head>
+<body style="background-color: green;">
+<table>
+<tr>
+<td width=100px >This is some filler text. This is some filler text.This is some filler text. </td>
+<td width=350px> The text in this anchor element <a href="#" id="detached">should <br>contain</a> 2 detached pieces. This test shows how the link would look text.</td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-multiline-link-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-multiline-link-expected.png
new file mode 100644
index 0000000..cb4dda686
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-multiline-link-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-multiline-link.html b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-multiline-link.html
new file mode 100644
index 0000000..19ec2b498
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-multiline-link.html
@@ -0,0 +1,18 @@
+<html>
+<head>
+<script>
+window.onload = function() {
+  document.getElementById("multiline").focus();
+}
+</script>
+</head>
+<body style="background-color: magenta">
+<table>
+<tr>
+<td width=100px>The <a href="#" id="multiline">text in this anchor element should spawn multiple lines. This test shows how multiline link would look</a>like. </td>
+<td width=350px>This is some filler text. This is some filler text. This is some filler text. This is some filler text. </td>
+</tr>
+</table>
+</body>
+</html>
+
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-multiline-writingmode-vertical-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-multiline-writingmode-vertical-expected.png
new file mode 100644
index 0000000..83f4872
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-multiline-writingmode-vertical-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-multiline-writingmode-vertical.html b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-multiline-writingmode-vertical.html
new file mode 100644
index 0000000..a50241d
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-multiline-writingmode-vertical.html
@@ -0,0 +1,15 @@
+<html>
+<head>
+<script>
+window.onload = function() {
+  document.getElementById("multiline").focus();
+}
+</script>
+</head>
+<body style="background-color: red">
+<div id="multiline" style="-webkit-writing-mode: vertical-rl; width: 10em; height: 10em;" contenteditable>
+Assuming the port-specific theme draws focus rings, this test draws focus rings around editable multiline text in vertical writing mode.
+</div>
+</body>
+</html>
+
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-outline-color-expected.png
similarity index 70%
copy from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
copy to third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-outline-color-expected.png
index 527065b..5fa8db6 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-eye-icon-font-size-4px-expected.png
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-outline-color.html b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-outline-color.html
new file mode 100644
index 0000000..4e34ca39
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-outline-color.html
@@ -0,0 +1,15 @@
+<html>
+<head>
+<style>
+a:focus { outline-color: green; }
+</style>
+<script>
+window.onload = function() {
+  document.getElementById("link").focus();
+}
+</script>
+</head>
+<body style="background-color: red">
+<a id="link" href="#"/>Test</a>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-zoom.html b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-zoom.html
new file mode 100644
index 0000000..1cc4078
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/focus-ring-zoom.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<script>
+window.onload = function() {
+    document.getElementById("input").focus();
+}
+</script>
+</head>
+<body style="background-color: green;">
+<input id="input" type="text" value="test" style="zoom: 8; width: 30px"/>
+</body>
+</head>
+</html>
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/radio-focus-ring-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/radio-focus-ring-expected.png
new file mode 100644
index 0000000..695777a1b
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/radio-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/radio-focus-ring.html b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/radio-focus-ring.html
new file mode 100644
index 0000000..dbb759b
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/radio-focus-ring.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<script>
+window.onload = function() {
+    document.getElementById("input").focus();
+}
+</script>
+</head>
+<body style="background-color: green;">
+<input id="input" type="radio" checked style="zoom: 30"/>
+</body>
+</head>
+</html>
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring-expected.png
new file mode 100644
index 0000000..ed760f9
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring.html b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring.html
new file mode 100644
index 0000000..efcf7da
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/textarea-scrolled-focus-ring.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<head>
+<script>
+function test() {
+  ta.setSelectionRange(ta.value.length, ta.value.length);
+  ta.focus();
+}
+</script>
+</head>
+<body onload="test()" style="background-color: green">
+Test passes if a focus ring is visible around text area when focused and scrolled to bottom.<br>
+<textarea id="ta" rows=2>
+1
+2
+3
+4
+</textarea>
+</body>
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/textfield-focus-ring-expected.png
similarity index 73%
rename from third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png
rename to third_party/blink/web_tests/virtual/controls-refresh/focus-rect/textfield-focus-ring-expected.png
index b19ef2d5..4e20550 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/password/password-alt-f8-expected.png
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/textfield-focus-ring-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/textfield-focus-ring.html b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/textfield-focus-ring.html
new file mode 100644
index 0000000..8ba51ae
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/focus-rect/textfield-focus-ring.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<script>
+window.onload = function() {
+    document.getElementById("input").focus();
+}
+</script>
+</head>
+<body style="background-color: green;">
+<input id="input" type="text" value="test"/>
+</body>
+</head>
+</html>
diff --git a/third_party/blink/web_tests/wake-lock/wakelock-document-hidden.https.html b/third_party/blink/web_tests/wake-lock/wakelock-document-hidden.https.html
index 73986d7..6b47191 100644
--- a/third_party/blink/web_tests/wake-lock/wakelock-document-hidden.https.html
+++ b/third_party/blink/web_tests/wake-lock/wakelock-document-hidden.https.html
@@ -6,9 +6,10 @@
 <script>
 'use strict';
 
-self.testRunner.setPermission('wake-lock-screen', 'granted', location.origin, location.origin);
+promise_test(async t => {
+  await internals.setPermission({name: 'wake-lock', type: 'screen'}, 'granted',
+                                location.origin, location.origin);
 
-promise_test(t => {
   window.testRunner.setPageVisibility('hidden');
   assert_true(document.hidden);
   return promise_rejects(t, "NotAllowedError", navigator.wakeLock.request('screen'));
@@ -21,7 +22,10 @@
 // A more interoperable test would allow both |screenLock| to reject with
 // NotAllowedError as well as it resolving to a WakeLockSentinel that would fire
 // a "release" event upon page vsibility change.
-promise_test(t => {
+promise_test(async t => {
+  await internals.setPermission({name: 'wake-lock', type: 'screen'}, 'granted',
+                                location.origin, location.origin);
+
   window.testRunner.setPageVisibility('visible');
 
   const screenLock = navigator.wakeLock.request('screen');
@@ -31,6 +35,9 @@
 }, "navigator.wakeLock.request('screen') aborts when the page is hidden");
 
 promise_test(async t => {
+  await internals.setPermission({name: 'wake-lock', type: 'screen'}, 'granted',
+                                location.origin, location.origin);
+
   window.testRunner.setPageVisibility('visible');
 
   const screenLock1 = await navigator.wakeLock.request('screen');
diff --git a/third_party/blink/web_tests/wake-lock/wakelock-request-denied.html b/third_party/blink/web_tests/wake-lock/wakelock-request-denied.html
index 2819e5ca..ff22918 100644
--- a/third_party/blink/web_tests/wake-lock/wakelock-request-denied.html
+++ b/third_party/blink/web_tests/wake-lock/wakelock-request-denied.html
@@ -6,8 +6,9 @@
 <script>
 'use strict';
 
-promise_test(t => {
-  self.testRunner.setPermission('wake-lock-screen', 'denied', location.origin, location.origin);
+promise_test(async t => {
+  await internals.setPermission({name: 'wake-lock', type: 'screen'}, 'denied',
+                                location.origin, location.origin);
   return promise_rejects(t, "NotAllowedError", navigator.wakeLock.request('screen'));
 }, 'Denied requests should abort with NotAllowedError');
 </script>
diff --git a/third_party/blink/web_tests/wpt_internal/display-lock/css-render-subtree/activated-removes-size-containment-ref.html b/third_party/blink/web_tests/wpt_internal/display-lock/css-render-subtree/activated-removes-size-containment-ref.html
new file mode 100644
index 0000000..f0e85ba
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/display-lock/css-render-subtree/activated-removes-size-containment-ref.html
@@ -0,0 +1,17 @@
+<!doctype HTML>
+<html>
+<meta charset="utf8">
+<title>activated element removes size containment</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://github.com/WICG/display-locking">
+
+<style>
+.border {
+  border: 1px solid black;
+}
+</style>
+
+<div class=border>
+  Test passes if there is a border around this text.
+</div>
+</html>
diff --git a/third_party/blink/web_tests/wpt_internal/display-lock/css-render-subtree/activated-removes-size-containment.html b/third_party/blink/web_tests/wpt_internal/display-lock/css-render-subtree/activated-removes-size-containment.html
new file mode 100644
index 0000000..63c6a15
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/display-lock/css-render-subtree/activated-removes-size-containment.html
@@ -0,0 +1,36 @@
+<!doctype HTML>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>activated element removes size containment</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://github.com/WICG/display-locking">
+<link rel="match" href="activated-removes-size-containment-ref.html">
+<meta name="assert" content="activated render-subtree removes size containment.">
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+.locked {
+  render-subtree: invisible;
+
+  border: 1px solid black;
+}
+</style>
+
+<div class=locked>
+  Test passes if there is a border around this text.
+</div>
+
+<script>
+
+window.onload = requestAnimationFrame(() => {
+  requestAnimationFrame(() => {
+    requestAnimationFrame(() => {
+      takeScreenshot();
+    });
+  });
+});
+
+</script>
+</html>
+
+
diff --git a/third_party/blink/web_tests/wpt_internal/display-lock/css-render-subtree/element-unlocked-and-relocked.html b/third_party/blink/web_tests/wpt_internal/display-lock/css-render-subtree/element-unlocked-and-relocked.html
new file mode 100644
index 0000000..73bb0e8
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/display-lock/css-render-subtree/element-unlocked-and-relocked.html
@@ -0,0 +1,84 @@
+<!doctype HTML>
+<html>
+<meta charset="utf8">
+<title>Element is unlocked near the viewport, and relocked again</title>
+<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
+<link rel="help" href="https://github.com/WICG/display-locking">
+<meta name="assert" content="element is unlocked near the viewport">
+<meta name="assert" content="element is relocked when moving away from the viewport">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/utils.js"></script>
+
+<style>
+#container {
+  height: 10000px;
+  background: lightblue;
+  display: inline-block;
+  padding-top: 5000px;
+}
+.locked {
+  render-subtree: invisible;
+  border: 1px solid black;
+  width: max-content;
+}
+</style>
+
+<div id=container>
+  <div class=locked>This is a locked element</div>
+</div>
+
+<script>
+async_test((t) => {
+  let container;
+
+  function enqueueStep1() {
+    container = document.getElementById("container");
+    requestAnimationFrame(runStep1);
+  }
+
+  function runStep1() {
+    t.step(() => {
+      // The container should be 2 wide to account for the border
+      // on the locked element.
+      assert_equals(container.getBoundingClientRect().width, 2);
+    });
+
+    enqueueStep2();
+  }
+
+  function enqueueStep2() {
+    window.scrollTo(0, 5000);
+    requestAnimationFrame(runStep2);
+  }
+
+  function runStep2() {
+    t.step(() => {
+      // The container should be wider than before because the element
+      // is now unlocked.
+      assert_greater_than(container.getBoundingClientRect().width, 50);
+    });
+
+    enqueueStep3();
+  }
+
+  function enqueueStep2() {
+    window.scrollTo(0, 10000);
+    requestAnimationFrame(runStep3);
+  }
+
+  function runStep3() {
+    t.step(() => {
+      // The container should be 2 wide again since we relocked the
+      // element.
+      assert_equals(container.getBoundingClientRect().width, 2);
+    });
+    t.done();
+  }
+
+  window.onload = () => {
+    requestAnimationFrame(enqueueStep1);
+  };
+}, "Element unlocking and relocking test");
+</script>
diff --git a/third_party/test_fonts/BUILD.gn b/third_party/test_fonts/BUILD.gn
index 532142b..a0b69d22 100644
--- a/third_party/test_fonts/BUILD.gn
+++ b/third_party/test_fonts/BUILD.gn
@@ -36,6 +36,6 @@
   ]
 
   outputs = [
-    "${root_build_dir}/test_fonts/{{source_file_part}}",
+    "$root_out_dir/test_fonts/{{source_file_part}}",
   ]
 }
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 6faf0c4..2b54a42 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -21715,6 +21715,8 @@
   <int value="1429" label="AUTOTESTPRIVATE_ISARCPACKAGELISTINITIALREFRESHED"/>
   <int value="1430" label="AUTOTESTPRIVATE_STARTTRACING"/>
   <int value="1431" label="AUTOTESTPRIVATE_STOPTRACING"/>
+  <int value="1432" label="LOGIN_LOCKMANAGEDGUESTSESSION"/>
+  <int value="1433" label="LOGIN_UNLOCKMANAGEDGUESTSESSION"/>
 </enum>
 
 <enum name="ExtensionIconState">
@@ -37514,6 +37516,7 @@
   <int value="-530480158" label="EnableSuggestedFiles:enabled"/>
   <int value="-528927088" label="AutofillCreditCardPopupLayout:disabled"/>
   <int value="-528149352" label="WebRtcUseEchoCanceller3:enabled"/>
+  <int value="-526236814" label="WebAssemblyTiering:enabled"/>
   <int value="-523030434" label="EnableBackgroundBlur:enabled"/>
   <int value="-520004021" label="WebXRHitTest:disabled"/>
   <int value="-519960638" label="enable-site-engagement-service"/>
@@ -38626,6 +38629,7 @@
   <int value="916316159" label="disable-new-app-list-mixer"/>
   <int value="918046854" label="NtlmV2Enabled:disabled"/>
   <int value="921536672" label="OfflinePagesDescriptiveFailStatus:enabled"/>
+  <int value="921561616" label="WebAssemblyTiering:disabled"/>
   <int value="925712999" label="V8Orinoco:enabled"/>
   <int value="926852901" label="DataReductionProxyMainMenu:disabled"/>
   <int value="928900043" label="OmniboxLooseMaxLimitOnDedicatedRows:disabled"/>
@@ -38670,6 +38674,7 @@
   <int value="983311394" label="tab-management-experiment-type"/>
   <int value="986796748" label="AccountConsistency:enabled"/>
   <int value="987843084" label="TerminalSystemApp:enabled"/>
+  <int value="988781221" label="SyncSetupFriendlySettings:disabled"/>
   <int value="988981463" label="ImageCaptureAPI:enabled"/>
   <int value="989062160" label="ModuleScriptsImportMetaUrl:enabled"/>
   <int value="994317727"
@@ -39472,6 +39477,7 @@
   <int value="1961425320" label="force-qtkit"/>
   <int value="1962485086" label="DesktopPWAsLocalUpdating:enabled"/>
   <int value="1964816410" label="AndroidPayIntegrationV2:enabled"/>
+  <int value="1965055310" label="SyncSetupFriendlySettings:enabled"/>
   <int value="1965976546" label="NewOverviewAnimations:disabled"/>
   <int value="1966730288" label="disable-threaded-compositing"/>
   <int value="1969604362" label="enable-pinch-virtual-viewport"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index bdbe3b3..88b6186 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -59081,6 +59081,16 @@
   </summary>
 </histogram>
 
+<histogram name="HttpCache.HardReset" enum="Boolean" expires_after="2020-06-15">
+  <owner>ericrobinson@chromium.org</owner>
+  <owner>shivanisha@chromium.org</owner>
+  <summary>
+    Whether the HttpCache was forced to reset upon creation, effectively
+    clearing out its previous content. This is recorded when the cache is
+    created for the browsing session.
+  </summary>
+</histogram>
+
 <histogram name="HttpCache.NetworkIsolationKeyPresent"
     enum="BooleanNetworkIsolationKeyPresent" expires_after="2020-06-07">
   <obsolete>
@@ -148297,7 +148307,10 @@
 </histogram>
 
 <histogram name="Startup.BrowserMainToRendererMain" units="ms"
-    expires_after="2020-07-06">
+    expires_after="M81">
+  <obsolete>
+    Removed 01/2020. Data is not used.
+  </obsolete>
   <owner>fdoray@chromium.org</owner>
   <summary>
     Time from the ChromeMain() entry in the browser process to the first
@@ -165940,7 +165953,7 @@
 </histogram>
 
 <histogram name="WebAudio.AudioBuffer.Length" units="frames"
-    expires_after="2020-07-06">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
@@ -165950,7 +165963,7 @@
 </histogram>
 
 <histogram name="WebAudio.AudioBuffer.NumberOfChannels" units="units"
-    expires_after="2020-07-06">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
@@ -165974,7 +165987,7 @@
 </histogram>
 
 <histogram name="WebAudio.AudioBuffer.SampleRate384kHz" units="Hz"
-    expires_after="2020-07-06">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
@@ -165999,7 +166012,7 @@
 </histogram>
 
 <histogram name="WebAudio.AudioBuffer.SampleRateRatio384kHz" units="units"
-    expires_after="2020-07-06">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
@@ -166020,7 +166033,7 @@
 </histogram>
 
 <histogram name="WebAudio.AudioContext.MaxChannelsAvailable" units="units"
-    expires_after="2020-07-06">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
@@ -166053,7 +166066,7 @@
 </histogram>
 
 <histogram name="WebAudio.AudioDestination.CallbackBufferSize" units="units"
-    expires_after="2020-07-06">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
@@ -166183,7 +166196,7 @@
 </histogram>
 
 <histogram name="WebAudio.BiquadFilter.Type" enum="BiquadFilterType"
-    expires_after="2020-07-06">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
@@ -166205,7 +166218,7 @@
 </histogram>
 
 <histogram name="WebAudio.IIRFilterNode.Order" units="units"
-    expires_after="2020-07-06">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
@@ -166216,7 +166229,7 @@
 </histogram>
 
 <histogram name="WebAudio.OfflineAudioContext.ChannelCount" units="units"
-    expires_after="M81">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
@@ -166227,7 +166240,7 @@
 </histogram>
 
 <histogram name="WebAudio.OfflineAudioContext.Length" units="frames"
-    expires_after="M81">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
@@ -166264,7 +166277,7 @@
 </histogram>
 
 <histogram name="WebAudio.PannerNode.PanningModel" enum="PanningModelType"
-    expires_after="2020-07-06">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
@@ -166277,7 +166290,7 @@
 </histogram>
 
 <histogram name="WebAudio.PushPullFIFO.UnderflowGlitches" enum="Boolean"
-    expires_after="2020-07-06">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
@@ -166288,7 +166301,7 @@
 </histogram>
 
 <histogram name="WebAudio.PushPullFIFO.UnderflowPercentage" units="%"
-    expires_after="2020-07-06">
+    expires_after="2021-01-06">
   <owner>rtoy@chromium.org</owner>
   <owner>hongchan@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index aab1b72..d66d6ff2 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -6283,6 +6283,9 @@
     </summary>
   </metric>
   <metric name="Experimental.PaintTiming.NavigationToLargestImagePaint">
+    <obsolete>
+      Removed on 01/2020
+    </obsolete>
     <summary>
       Measures the time in milliseconds from navigation timing's navigation
       start to the time when the page first paints the largest image within
@@ -6303,6 +6306,9 @@
     </summary>
   </metric>
   <metric name="Experimental.PaintTiming.NavigationToLargestTextPaint">
+    <obsolete>
+      Removed on 01/2020
+    </obsolete>
     <summary>
       Measures the time in milliseconds from navigation timing's navigation
       start to the time when the page first paints the largest text within
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml
index b87b5add..a71e020d 100644
--- a/tools/traffic_annotation/summary/annotations.xml
+++ b/tools/traffic_annotation/summary/annotations.xml
@@ -130,8 +130,9 @@
  <item id="google_url_tracker" hash_code="5492492" type="0" deprecated="2019-08-01" content_hash_code="54474899" file_path=""/>
  <item id="headless_url_request" hash_code="29865866" type="0" deprecated="2018-07-10" content_hash_code="76700151" file_path=""/>
  <item id="hintsfetcher_gethintsrequest" hash_code="34557599" type="0" content_hash_code="57003380" os_list="linux,windows" file_path="components/optimization_guide/hints_fetcher.cc"/>
- <item id="history_notice_utils_notice" hash_code="102595701" type="1" second_id="110307337" content_hash_code="130829410" os_list="linux,windows" semantics_fields="2,3,4" policy_fields="4" file_path="components/browsing_data/core/history_notice_utils.cc"/>
+ <item id="history_notice_utils_notice" hash_code="102595701" type="1" second_id="110307337" deprecated="2020-01-07" content_hash_code="130829410" file_path=""/>
  <item id="history_notice_utils_popup" hash_code="80832574" type="1" second_id="110307337" content_hash_code="30618510" os_list="linux,windows" semantics_fields="2,3,4" policy_fields="4" file_path="components/browsing_data/core/history_notice_utils.cc"/>
+ <item id="history_recording_enabled" hash_code="18918377" type="1" second_id="110307337" content_hash_code="24841534" os_list="linux,windows" semantics_fields="2,3,4" policy_fields="4" file_path="components/browsing_data/core/history_notice_utils.cc"/>
  <item id="history_ui_favicon_request_handler_get_favicon" hash_code="17562717" type="0" content_hash_code="64054629" os_list="linux,windows" file_path="components/favicon/core/history_ui_favicon_request_handler_impl.cc"/>
  <item id="http_server_error_response" hash_code="32197336" type="0" content_hash_code="61082230" os_list="linux,windows" file_path="net/server/http_server.cc"/>
  <item id="https_server_previews_navigation" hash_code="35725390" type="0" content_hash_code="84423109" os_list="linux,windows" file_path="chrome/browser/previews/previews_lite_page_redirect_serving_url_loader.cc"/>
@@ -169,8 +170,8 @@
  <item id="oauth2_access_token_fetcher" hash_code="27915688" type="0" content_hash_code="33501872" os_list="linux,windows" file_path="google_apis/gaia/oauth2_access_token_fetcher_impl.cc"/>
  <item id="oauth2_api_call_flow" hash_code="29188932" type="2" content_hash_code="108831236" os_list="linux,windows" policy_fields="-1" file_path="google_apis/gaia/oauth2_api_call_flow.cc"/>
  <item id="oauth2_mint_token_flow" hash_code="1112842" type="1" second_id="29188932" content_hash_code="91581432" os_list="linux,windows" semantics_fields="1,2,3,4,5" policy_fields="3,4" file_path="google_apis/gaia/oauth2_mint_token_flow.cc"/>
- <item id="ocsp_start_url_request" hash_code="60921996" type="0" content_hash_code="6288676" os_list="linux" file_path="net/cert_net/nss_ocsp_session_url_request.cc"/>
  <item id="ocsp_start_url_loader" hash_code="3646641" type="0" content_hash_code="106270072" os_list="linux" file_path="services/network/public/cpp/cert_verifier/nss_ocsp_session_url_loader.cc"/>
+ <item id="ocsp_start_url_request" hash_code="60921996" type="0" content_hash_code="6288676" os_list="linux" file_path="net/cert_net/nss_ocsp_session_url_request.cc"/>
  <item id="offline_prefetch" hash_code="19185953" type="0" content_hash_code="112039446" os_list="linux,windows" file_path="components/offline_pages/core/prefetch/prefetch_request_fetcher.cc"/>
  <item id="omnibox_documentsuggest" hash_code="6055066" type="0" content_hash_code="126973249" os_list="linux,windows" file_path="components/omnibox/browser/document_suggestions_service.cc"/>
  <item id="omnibox_navigation_observer" hash_code="61684939" type="0" content_hash_code="70941231" os_list="linux,windows" file_path="chrome/browser/ui/omnibox/chrome_omnibox_navigation_observer.cc"/>
diff --git a/ui/file_manager/file_manager/foreground/elements/files_quick_view.js b/ui/file_manager/file_manager/foreground/elements/files_quick_view.js
index f43e56dd..3cb1b84 100644
--- a/ui/file_manager/file_manager/foreground/elements/files_quick_view.js
+++ b/ui/file_manager/file_manager/foreground/elements/files_quick_view.js
@@ -48,6 +48,7 @@
 
   listeners: {
     'files-safe-media-tap-outside': 'close',
+    'files-safe-media-load-error': 'loaderror',
   },
 
   /**
@@ -80,6 +81,7 @@
         autoplay: false,
         browsable: false,
     });
+    this.removeAttribute('load-error');
     const video = this.$.contentPanel.querySelector('#videoSafeMedia');
     if (video) {
       video.src = '';
@@ -87,6 +89,12 @@
     }
   },
 
+  // Handle load error from the files-safe-media container.
+  loaderror: function() {
+    this.contentUrl = '';
+    this.setAttribute('load-error', '');
+  },
+
   /** @return {boolean} */
   isOpened: function() {
     return this.$.dialog.open;
diff --git a/ui/file_manager/file_manager/foreground/elements/files_safe_media.js b/ui/file_manager/file_manager/foreground/elements/files_safe_media.js
index f93a6f0..2a476798 100644
--- a/ui/file_manager/file_manager/foreground/elements/files_safe_media.js
+++ b/ui/file_manager/file_manager/foreground/elements/files_safe_media.js
@@ -10,7 +10,7 @@
  * files-safe-media-tap-outside events are fired depending on the position
  * of the tap.
  */
-var FilesSafeMedia = Polymer({
+const FilesSafeMedia = Polymer({
   is: 'files-safe-media',
 
   properties: {
@@ -107,6 +107,8 @@
         if (this.webview_) {
           this.webview_.removeAttribute('loaded');
         }
+      } else if (event.data === 'content-decode-failed') {
+        this.fire('files-safe-media-load-error');
       }
     });
   }
diff --git a/ui/file_manager/file_manager/foreground/elements/files_safe_media_webview_content.js b/ui/file_manager/file_manager/foreground/elements/files_safe_media_webview_content.js
index 108ad78..f13a4e7 100644
--- a/ui/file_manager/file_manager/foreground/elements/files_safe_media_webview_content.js
+++ b/ui/file_manager/file_manager/foreground/elements/files_safe_media_webview_content.js
@@ -40,12 +40,10 @@
         content.src = event.data.src;
         content.decode()
             .then(() => {
-              content.removeAttribute('generic-thumbnail');
               document.body.appendChild(content);
             })
             .catch(() => {
-              content.setAttribute('generic-thumbnail', 'image');
-              document.body.appendChild(content);
+              contentDecodeFailed();
             });
         break;
       default:
@@ -68,6 +66,10 @@
     sendMessage(src ? 'webview-loaded' : 'webview-cleared');
   }
 
+  function contentDecodeFailed() {
+    sendMessage('content-decode-failed');
+  }
+
   function sendMessage(message) {
     if (messageSource) {
       messageSource.postMessage(message, FILES_APP_ORIGIN);
diff --git a/ui/file_manager/integration_tests/file_manager/quick_view.js b/ui/file_manager/integration_tests/file_manager/quick_view.js
index 26eaa0fe..825c400b 100644
--- a/ui/file_manager/integration_tests/file_manager/quick_view.js
+++ b/ui/file_manager/integration_tests/file_manager/quick_view.js
@@ -1304,4 +1304,20 @@
           'requestAnimationFrame', appId, []));
     }
   };
+
+  /**
+   * Tests opening a broken JPEG doesn't display a broken image icon.
+   */
+  testcase.openQuickViewBrokenImage = async () => {
+    // Open Files app on Downloads containing ENTRIES.brokenJpeg.
+    const appId = await setupAndWaitUntilReady(
+        RootPath.DOWNLOADS, [ENTRIES.brokenJpeg], []);
+
+    // Open the file in Quick View.
+    await openQuickView(appId, ENTRIES.brokenJpeg.nameText);
+
+    // Check: the quick view should have the attribute 'load-error'.
+    const element =
+        await remoteCall.waitForElement(appId, '#quick-view[load-error]');
+  };
 })();
diff --git a/ui/file_manager/integration_tests/test_util.js b/ui/file_manager/integration_tests/test_util.js
index 61981c6..74e551d 100644
--- a/ui/file_manager/integration_tests/test_util.js
+++ b/ui/file_manager/integration_tests/test_util.js
@@ -608,6 +608,17 @@
     typeText: 'JPEG image'
   }),
 
+  brokenJpeg: new TestEntryInfo({
+    type: EntryType.FILE,
+    sourceFileName: 'broken.jpg',
+    targetPath: 'broken.jpg',
+    mimeType: 'image/jpeg',
+    lastModifiedTime: 'Jan 18, 2038, 1:02 AM',
+    nameText: 'broken.jpg',
+    sizeText: '1 byte',
+    typeText: 'JPEG image'
+  }),
+
   exifImage: new TestEntryInfo({
     type: EntryType.FILE,
     sourceFileName: 'exif.jpg',
diff --git a/ui/native_theme/native_theme.cc b/ui/native_theme/native_theme.cc
index d9175ae..c20f145 100644
--- a/ui/native_theme/native_theme.cc
+++ b/ui/native_theme/native_theme.cc
@@ -19,6 +19,13 @@
   memcpy(this, &other, sizeof(*this));
 }
 
+float NativeTheme::GetBorderRadiusForPart(Part part,
+                                          float width,
+                                          float height,
+                                          float zoom) const {
+  return 0;
+}
+
 void NativeTheme::AddObserver(NativeThemeObserver* observer) {
   native_theme_observers_.AddObserver(observer);
 }
diff --git a/ui/native_theme/native_theme.h b/ui/native_theme/native_theme.h
index 0303c1b..a88a858 100644
--- a/ui/native_theme/native_theme.h
+++ b/ui/native_theme/native_theme.h
@@ -278,6 +278,11 @@
                                 State state,
                                 const ExtraParams& extra) const = 0;
 
+  virtual float GetBorderRadiusForPart(Part part,
+                                       float width,
+                                       float height,
+                                       float zoom) const;
+
   // Paint the part to the canvas.
   virtual void Paint(
       cc::PaintCanvas* canvas,
diff --git a/ui/native_theme/native_theme_base.cc b/ui/native_theme/native_theme_base.cc
index 54af53c..a0a4057 100644
--- a/ui/native_theme/native_theme_base.cc
+++ b/ui/native_theme/native_theme_base.cc
@@ -112,20 +112,17 @@
 constexpr SkColor kButtonBorderColor[2] = {SK_ColorBLACK, SK_ColorWHITE};
 constexpr SkColor kProgressBackgroundColor[2] = {SK_ColorWHITE, SK_ColorBLACK};
 
-const int kCheckboxBorderRadius = 2;
 // The "dash" is 8x2 px by default (the checkbox is 13x13 px).
 const SkScalar kIndeterminateInsetWidthRatio = (13 - 8) / 2.0f / 13;
 const SkScalar kIndeterminateInsetHeightRatio = (13 - 2) / 2.0f / 13;
 const SkScalar kBorderWidth = 1.f;
 const SkScalar kSliderTrackHeight = 8.f;
-const SkScalar kSliderTrackBorderRadius = 40.f;
 const SkScalar kSliderThumbBorderWidth = 1.f;
 const SkScalar kSliderThumbBorderHoveredWidth = 1.f;
 // Default height for progress is 16px and the track is 8px.
 const SkScalar kTrackHeightRatio = 8.0f / 16;
 const SkScalar kMenuListArrowStrokeWidth = 2.f;
 const int kSliderThumbSize = 16;
-const int kInputBorderRadius = 2;
 
 // Get a color constant based on color-scheme
 SkColor GetColor(const SkColor colors[2],
@@ -213,6 +210,35 @@
   return gfx::Size();
 }
 
+float NativeThemeBase::GetBorderRadiusForPart(Part part,
+                                              float width,
+                                              float height,
+                                              float zoom) const {
+  if (!features::IsFormControlsRefreshEnabled()) {
+    NOTREACHED() << "GetBorderRadiusForPart only supports FormControlsRefresh.";
+    return 0;
+  }
+
+  switch (part) {
+    case kCheckbox:
+      return 2.f * zoom;
+    case kPushButton:
+    case kTextField:
+      return 2.f;
+    case kRadio:
+      return std::max(width, height) * 0.5;
+    case kProgressBar:
+    case kSliderTrack:
+      // default border radius for progress and range is 40px.
+      return 40.f;
+    case kSliderThumb:
+      return std::max(width, height) * 0.5;
+    default:
+      break;
+  }
+  return 0;
+}
+
 void NativeThemeBase::Paint(cc::PaintCanvas* canvas,
                             Part part,
                             State state,
@@ -576,8 +602,8 @@
                                     const ButtonExtraParams& button,
                                     ColorScheme color_scheme) const {
   if (features::IsFormControlsRefreshEnabled()) {
-    const float border_radius =
-        SkIntToScalar(kCheckboxBorderRadius) * button.zoom;
+    const float border_radius = GetBorderRadiusForPart(
+        kCheckbox, rect.width(), rect.height(), button.zoom);
     SkRect skrect = PaintCheckboxRadioCommon(canvas, state, rect, button, true,
                                              border_radius, color_scheme);
 
@@ -811,11 +837,10 @@
   if (features::IsFormControlsRefreshEnabled()) {
     // Most of a radio button is the same as a checkbox, except the the rounded
     // square is a circle (i.e. border radius >= 100%).
-    const SkScalar radius = SkFloatToScalar(
-        static_cast<float>(std::max(rect.width(), rect.height())) * 0.5);
-
+    const float border_radius = GetBorderRadiusForPart(
+        kRadio, rect.width(), rect.height(), button.zoom);
     SkRect skrect = PaintCheckboxRadioCommon(canvas, state, rect, button, false,
-                                             radius, color_scheme);
+                                             border_radius, color_scheme);
     if (!skrect.isEmpty() && button.checked) {
       // Draw the dot.
       cc::PaintFlags flags;
@@ -826,7 +851,7 @@
       skrect.inset(skrect.width() * 0.2, skrect.height() * 0.2);
       // Use drawRoundedRect instead of drawOval to be completely consistent
       // with the border in PaintCheckboxRadioNewCommon.
-      canvas->drawRoundRect(skrect, radius, radius, flags);
+      canvas->drawRoundRect(skrect, border_radius, border_radius, flags);
     }
     return;
   }
@@ -871,20 +896,20 @@
       return;
     }
 
+    float border_radius = GetBorderRadiusForPart(kPushButton, rect.width(),
+                                                 rect.height(), button.zoom);
     // Paint the background (is not visible behind the rounded corners).
     skrect.inset(kBorderWidth / 2, kBorderWidth / 2);
-    PaintLightenLayer(canvas, skrect, state, kInputBorderRadius, color_scheme);
+    PaintLightenLayer(canvas, skrect, state, border_radius, color_scheme);
     flags.setColor(ControlsFillColorForState(state, color_scheme));
-    canvas->drawRoundRect(skrect, kInputBorderRadius, kInputBorderRadius,
-                          flags);
+    canvas->drawRoundRect(skrect, border_radius, border_radius, flags);
 
     // Paint the border: 1px solid.
     if (button.has_border) {
       flags.setStyle(cc::PaintFlags::kStroke_Style);
       flags.setStrokeWidth(kBorderWidth);
       flags.setColor(ControlsBorderColorForState(state, color_scheme));
-      canvas->drawRoundRect(skrect, kInputBorderRadius, kInputBorderRadius,
-                            flags);
+      canvas->drawRoundRect(skrect, border_radius, border_radius, flags);
     }
     return;
   }
@@ -945,16 +970,17 @@
                                      ColorScheme color_scheme) const {
   if (features::IsFormControlsRefreshEnabled()) {
     SkRect bounds = gfx::RectToSkRect(rect);
-    const SkScalar borderRadius = SkIntToScalar(kInputBorderRadius);
+    const SkScalar border_radius = GetBorderRadiusForPart(
+        kTextField, rect.width(), rect.height(), /*zoom level=*/1);
 
     // Paint the background (is not visible behind the rounded corners).
     bounds.inset(kBorderWidth / 2, kBorderWidth / 2);
     cc::PaintFlags fill_flags;
     fill_flags.setStyle(cc::PaintFlags::kFill_Style);
     if (text.background_color != 0) {
-      PaintLightenLayer(canvas, bounds, state, borderRadius, color_scheme);
+      PaintLightenLayer(canvas, bounds, state, border_radius, color_scheme);
       fill_flags.setColor(ControlsBackgroundColorForState(state, color_scheme));
-      canvas->drawRoundRect(bounds, borderRadius, borderRadius, fill_flags);
+      canvas->drawRoundRect(bounds, border_radius, border_radius, fill_flags);
     }
 
     // Paint the border: 1px solid.
@@ -962,7 +988,7 @@
     stroke_flags.setColor(ControlsBorderColorForState(state, color_scheme));
     stroke_flags.setStyle(cc::PaintFlags::kStroke_Style);
     stroke_flags.setStrokeWidth(kBorderWidth);
-    canvas->drawRoundRect(bounds, borderRadius, borderRadius, stroke_flags);
+    canvas->drawRoundRect(bounds, border_radius, border_radius, stroke_flags);
     return;
   }
 
@@ -1116,13 +1142,13 @@
       track_rect.inset(0, 1);
     else
       track_rect.inset(1, 0);
-    canvas->drawRoundRect(track_rect, kSliderTrackBorderRadius,
-                          kSliderTrackBorderRadius, flags);
+    float border_radius = GetBorderRadiusForPart(kSliderTrack, rect.width(),
+                                                 rect.height(), slider.zoom);
+    canvas->drawRoundRect(track_rect, border_radius, border_radius, flags);
 
     // Clip the track to create rounded corners for the value bar.
     SkRRect rounded_rect;
-    rounded_rect.setRectXY(track_rect, kSliderTrackBorderRadius,
-                           kSliderTrackBorderRadius);
+    rounded_rect.setRectXY(track_rect, border_radius, border_radius);
     canvas->clipRRect(rounded_rect, SkClipOp::kIntersect, true);
 
     // Paint the value slider track.
@@ -1138,8 +1164,7 @@
       border_color = SkColorSetA(border_color, 0x80);
     flags.setColor(border_color);
     track_rect.inset(kBorderWidth / 2, kBorderWidth / 2);
-    canvas->drawRoundRect(track_rect, kSliderTrackBorderRadius,
-                          kSliderTrackBorderRadius, flags);
+    canvas->drawRoundRect(track_rect, border_radius, border_radius, flags);
     return;
   }
 
@@ -1166,8 +1191,8 @@
                                        const SliderExtraParams& slider,
                                        ColorScheme color_scheme) const {
   if (features::IsFormControlsRefreshEnabled()) {
-    const SkScalar radius = SkFloatToScalar(
-        static_cast<float>(std::max(rect.width(), rect.height())) * 0.5);
+    const float radius = GetBorderRadiusForPart(kSliderThumb, rect.width(),
+                                                rect.height(), slider.zoom);
     SkRect thumb_rect = gfx::RectToSkRect(rect);
 
     cc::PaintFlags flags;
@@ -1269,13 +1294,13 @@
     slider.vertical = false;
     float track_height = rect.height() * kTrackHeightRatio;
     SkRect track_rect = AlignSliderTrack(rect, slider, false, track_height);
-    canvas->drawRoundRect(track_rect, kSliderTrackBorderRadius,
-                          kSliderTrackBorderRadius, flags);
+    float border_radius = GetBorderRadiusForPart(
+        kProgressBar, rect.width(), rect.height(), /*zoom level=*/1);
+    canvas->drawRoundRect(track_rect, border_radius, border_radius, flags);
 
     // Clip the track to create rounded corners for the value bar.
     SkRRect rounded_rect;
-    rounded_rect.setRectXY(track_rect, kSliderTrackBorderRadius,
-                           kSliderTrackBorderRadius);
+    rounded_rect.setRectXY(track_rect, border_radius, border_radius);
     canvas->clipRRect(rounded_rect, SkClipOp::kIntersect, true);
 
     // Paint the progress value bar.
@@ -1292,8 +1317,7 @@
     if (progress_bar.determinate) {
       canvas->drawRect(value_rect, flags);
     } else {
-      canvas->drawRoundRect(value_rect, kSliderTrackBorderRadius,
-                            kSliderTrackBorderRadius, flags);
+      canvas->drawRoundRect(value_rect, border_radius, border_radius, flags);
     }
 
     // Paint the border.
@@ -1304,8 +1328,7 @@
       border_color = SkColorSetA(border_color, 0x80);
     flags.setColor(border_color);
     track_rect.inset(kBorderWidth / 2, kBorderWidth / 2);
-    canvas->drawRoundRect(track_rect, kSliderTrackBorderRadius,
-                          kSliderTrackBorderRadius, flags);
+    canvas->drawRoundRect(track_rect, border_radius, border_radius, flags);
     return;
   }
 
diff --git a/ui/native_theme/native_theme_base.h b/ui/native_theme/native_theme_base.h
index a0530ef..0273ee3 100644
--- a/ui/native_theme/native_theme_base.h
+++ b/ui/native_theme/native_theme_base.h
@@ -27,6 +27,10 @@
   gfx::Size GetPartSize(Part part,
                         State state,
                         const ExtraParams& extra) const override;
+  float GetBorderRadiusForPart(Part part,
+                               float width,
+                               float height,
+                               float zoom) const override;
   void Paint(cc::PaintCanvas* canvas,
              Part part,
              State state,
diff --git a/weblayer/BUILD.gn b/weblayer/BUILD.gn
index 9ae4f8b..5fb141d 100644
--- a/weblayer/BUILD.gn
+++ b/weblayer/BUILD.gn
@@ -220,7 +220,8 @@
     "//components/security_interstitials/content/renderer:security_interstitial_page_controller",
     "//components/security_interstitials/core",
     "//components/spellcheck:buildflags",
-    "//components/startup_metric_utils/browser:lib",
+    "//components/ssl_errors",
+    "//components/startup_metric_utils/browser",
     "//components/user_prefs",
     "//components/version_info",
     "//components/web_cache/browser",
diff --git a/weblayer/browser/DEPS b/weblayer/browser/DEPS
index d47f233..e9553e85 100644
--- a/weblayer/browser/DEPS
+++ b/weblayer/browser/DEPS
@@ -16,6 +16,7 @@
   "+components/safe_browsing",
   "+components/security_interstitials",
   "+components/spellcheck/browser",
+  "+components/ssl_errors",
   "+components/startup_metric_utils",
   "+components/version_info",
   "+components/web_cache/browser",
diff --git a/weblayer/browser/browser_process.cc b/weblayer/browser/browser_process.cc
index 076fe49..c4278a6 100644
--- a/weblayer/browser/browser_process.cc
+++ b/weblayer/browser/browser_process.cc
@@ -24,6 +24,8 @@
 std::unique_ptr<PrefService> CreatePrefService() {
   auto pref_registry = base::MakeRefCounted<PrefRegistrySimple>();
 
+  network_time::NetworkTimeTracker::RegisterPrefs(pref_registry.get());
+
   PrefServiceFactory pref_service_factory;
   pref_service_factory.set_user_prefs(
       base::MakeRefCounted<InMemoryPrefStore>());
diff --git a/weblayer/browser/ssl_browsertest.cc b/weblayer/browser/ssl_browsertest.cc
index d3be75bc..26c6a39 100644
--- a/weblayer/browser/ssl_browsertest.cc
+++ b/weblayer/browser/ssl_browsertest.cc
@@ -8,7 +8,9 @@
 #include "base/macros.h"
 #include "base/optional.h"
 #include "build/build_config.h"
+#include "components/network_time/network_time_tracker.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
+#include "weblayer/browser/browser_process.h"
 #include "weblayer/browser/ssl_error_handler.h"
 #include "weblayer/shell/browser/shell.h"
 #include "weblayer/test/interstitial_utils.h"
@@ -37,8 +39,15 @@
     https_server_mismatched_->AddDefaultHandlers(
         base::FilePath(FILE_PATH_LITERAL("weblayer/test/data")));
 
+    https_server_expired_ = std::make_unique<net::EmbeddedTestServer>(
+        net::EmbeddedTestServer::TYPE_HTTPS);
+    https_server_expired_->SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED);
+    https_server_expired_->AddDefaultHandlers(
+        base::FilePath(FILE_PATH_LITERAL("weblayer/test/data")));
+
     ASSERT_TRUE(https_server_->Start());
     ASSERT_TRUE(https_server_mismatched_->Start());
+    ASSERT_TRUE(https_server_expired_->Start());
   }
 
   void PostRunTestOnMainThread() override {
@@ -53,9 +62,9 @@
     EXPECT_FALSE(IsShowingSecurityInterstitial(shell()->tab()));
   }
 
-  void NavigateToPageWithSslErrorExpectSSLInterstitial() {
+  void NavigateToPageWithMismatchedCertExpectSSLInterstitial() {
     // Do a navigation that should result in an SSL error.
-    NavigateAndWaitForFailure(bad_ssl_url(), shell());
+    NavigateAndWaitForFailure(mismatched_cert_url(), shell());
     // First check that there *is* an interstitial.
     ASSERT_TRUE(IsShowingSecurityInterstitial(shell()->tab()));
 
@@ -67,9 +76,9 @@
     // ssl_browsertest.cc's CheckAuthenticationBrokenState() function.
   }
 
-  void NavigateToPageWithSslErrorExpectCaptivePortalInterstitial() {
+  void NavigateToPageWithMismatchedCertExpectCaptivePortalInterstitial() {
     // Do a navigation that should result in an SSL error.
-    NavigateAndWaitForFailure(bad_ssl_url(), shell());
+    NavigateAndWaitForFailure(mismatched_cert_url(), shell());
     // First check that there *is* an interstitial.
     ASSERT_TRUE(IsShowingSecurityInterstitial(shell()->tab()));
 
@@ -82,8 +91,36 @@
     // ssl_browsertest.cc's CheckAuthenticationBrokenState() function.
   }
 
-  void NavigateToPageWithSslErrorExpectNotBlocked() {
-    NavigateAndWaitForCompletion(bad_ssl_url(), shell());
+  void NavigateToPageWithExpiredCertExpectSSLInterstitial() {
+    // Do a navigation that should result in an SSL error.
+    NavigateAndWaitForFailure(expired_cert_url(), shell());
+    // First check that there *is* an interstitial.
+    ASSERT_TRUE(IsShowingSecurityInterstitial(shell()->tab()));
+
+    // Now verify that the interstitial is in fact an SSL interstitial.
+    EXPECT_TRUE(IsShowingSSLInterstitial(shell()->tab()));
+
+    // TODO(blundell): Check the security state once security state is available
+    // via the public WebLayer API, following the example of //chrome's
+    // ssl_browsertest.cc's CheckAuthenticationBrokenState() function.
+  }
+
+  void NavigateToPageWithExpiredCertExpectBadClockInterstitial() {
+    // Do a navigation that should result in an SSL error.
+    NavigateAndWaitForFailure(expired_cert_url(), shell());
+    // First check that there *is* an interstitial.
+    ASSERT_TRUE(IsShowingSecurityInterstitial(shell()->tab()));
+
+    // Now verify that the interstitial is in fact a bad clock interstitial.
+    EXPECT_TRUE(IsShowingBadClockInterstitial(shell()->tab()));
+
+    // TODO(blundell): Check the security state once security state is available
+    // via the public WebLayer API, following the example of //chrome's
+    // ssl_browsertest.cc's CheckAuthenticationBrokenState() function.
+  }
+
+  void NavigateToPageWithMismatchedCertExpectNotBlocked() {
+    NavigateAndWaitForCompletion(mismatched_cert_url(), shell());
     EXPECT_FALSE(IsShowingSecurityInterstitial(shell()->tab()));
 
     // TODO(blundell): Check the security state once security state is available
@@ -95,7 +132,7 @@
       bool proceed,
       base::Optional<GURL> previous_url = base::nullopt) {
     GURL expected_url =
-        proceed ? bad_ssl_url() : previous_url.value_or(ok_url());
+        proceed ? mismatched_cert_url() : previous_url.value_or(ok_url());
     ASSERT_TRUE(IsShowingSSLInterstitial(shell()->tab()));
 
     TestNavigationObserver navigation_observer(
@@ -144,13 +181,18 @@
   }
 
   GURL ok_url() { return https_server_->GetURL("/simple_page.html"); }
-  GURL bad_ssl_url() {
+  GURL mismatched_cert_url() {
     return https_server_mismatched_->GetURL("/simple_page.html");
   }
 
+  GURL expired_cert_url() {
+    return https_server_expired_->GetURL("/simple_page.html");
+  }
+
  protected:
   std::unique_ptr<net::EmbeddedTestServer> https_server_;
   std::unique_ptr<net::EmbeddedTestServer> https_server_mismatched_;
+  std::unique_ptr<net::EmbeddedTestServer> https_server_expired_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(SSLBrowserTest);
@@ -159,7 +201,7 @@
 // Tests clicking "take me back" on the interstitial page.
 IN_PROC_BROWSER_TEST_F(SSLBrowserTest, TakeMeBack) {
   NavigateToOkPage();
-  NavigateToPageWithSslErrorExpectSSLInterstitial();
+  NavigateToPageWithMismatchedCertExpectSSLInterstitial();
 
   // Click "Take me back".
   SendInterstitialNavigationCommandAndWait(false /*proceed*/);
@@ -169,13 +211,13 @@
 
   // Navigate to the bad SSL page again, an interstitial shows again (in
   // contrast to what would happen had the user chosen to proceed).
-  NavigateToPageWithSslErrorExpectSSLInterstitial();
+  NavigateToPageWithMismatchedCertExpectSSLInterstitial();
 }
 
 // Tests clicking "take me back" on the interstitial page when there's no
 // navigation history. The user should be taken to a safe page (about:blank).
 IN_PROC_BROWSER_TEST_F(SSLBrowserTest, TakeMeBackEmptyNavigationHistory) {
-  NavigateToPageWithSslErrorExpectSSLInterstitial();
+  NavigateToPageWithMismatchedCertExpectSSLInterstitial();
 
   // Click "Take me back".
   SendInterstitialNavigationCommandAndWait(false /*proceed*/,
@@ -184,19 +226,19 @@
 
 IN_PROC_BROWSER_TEST_F(SSLBrowserTest, Reload) {
   NavigateToOkPage();
-  NavigateToPageWithSslErrorExpectSSLInterstitial();
+  NavigateToPageWithMismatchedCertExpectSSLInterstitial();
 
   SendInterstitialReloadCommandAndWait();
 
   // TODO(blundell): Ideally we would fix the SSL error, reload, and verify
   // that the SSL interstitial isn't showing. However, currently this doesn't
   // work: Calling ResetSSLConfig() on |http_server_mismatched_| passing
-  // CERT_OK does not cause future reloads or navigations to bad_ssl_url() to
-  // succeed; they still fail and pop an interstitial. I verified that the
-  // LoadCompletionObserver is in fact waiting for a new load, i.e., there is
-  // actually a *new* SSL interstitial popped up. From looking at the
-  // ResetSSLConfig() impl there shouldn't be any waiting or anything needed
-  // within the client.
+  // CERT_OK does not cause future reloads or navigations to
+  // mismatched_cert_url() to succeed; they still fail and pop an interstitial.
+  // I verified that the LoadCompletionObserver is in fact waiting for a new
+  // load, i.e., there is actually a *new* SSL interstitial popped up. From
+  // looking at the ResetSSLConfig() impl there shouldn't be any waiting or
+  // anything needed within the client.
 }
 
 // Tests clicking proceed link on the interstitial page. This is a PRE_ test
@@ -204,26 +246,26 @@
 // across restarts.
 IN_PROC_BROWSER_TEST_F(SSLBrowserTest, PRE_Proceed) {
   NavigateToOkPage();
-  NavigateToPageWithSslErrorExpectSSLInterstitial();
+  NavigateToPageWithMismatchedCertExpectSSLInterstitial();
   SendInterstitialNavigationCommandAndWait(true /*proceed*/);
 
   // Go back to an OK page, then try to navigate again. The "Proceed" decision
   // should be saved, so no interstitial is shown this time.
   NavigateToOkPage();
-  NavigateToPageWithSslErrorExpectNotBlocked();
+  NavigateToPageWithMismatchedCertExpectNotBlocked();
 }
 
 // The proceed decision is not perpetuated across WebLayer sessions, i.e.
 // WebLayer will block again when navigating to the same bad page that was
 // previously proceeded through.
 IN_PROC_BROWSER_TEST_F(SSLBrowserTest, Proceed) {
-  NavigateToPageWithSslErrorExpectSSLInterstitial();
+  NavigateToPageWithMismatchedCertExpectSSLInterstitial();
 }
 
 // Tests navigating away from the interstitial page.
 IN_PROC_BROWSER_TEST_F(SSLBrowserTest, NavigateAway) {
   NavigateToOkPage();
-  NavigateToPageWithSslErrorExpectSSLInterstitial();
+  NavigateToPageWithMismatchedCertExpectSSLInterstitial();
   NavigateToOtherOkPage();
 }
 
@@ -234,11 +276,11 @@
 IN_PROC_BROWSER_TEST_F(SSLBrowserTest, OSReportsCaptivePortal) {
   SetDiagnoseSSLErrorsAsCaptivePortalForTesting(true);
 
-  NavigateToPageWithSslErrorExpectCaptivePortalInterstitial();
+  NavigateToPageWithMismatchedCertExpectCaptivePortalInterstitial();
 
   // Check that clearing the test setting causes behavior to revert to normal.
   SetDiagnoseSSLErrorsAsCaptivePortalForTesting(false);
-  NavigateToPageWithSslErrorExpectSSLInterstitial();
+  NavigateToPageWithMismatchedCertExpectSSLInterstitial();
 }
 
 #if defined(OS_ANDROID)
@@ -247,10 +289,28 @@
 IN_PROC_BROWSER_TEST_F(SSLBrowserTest, CaptivePortalConnectToLoginPage) {
   SetDiagnoseSSLErrorsAsCaptivePortalForTesting(true);
 
-  NavigateToPageWithSslErrorExpectCaptivePortalInterstitial();
+  NavigateToPageWithMismatchedCertExpectCaptivePortalInterstitial();
 
   SendInterstitialOpenLoginCommandAndWait();
 }
 #endif
 
+IN_PROC_BROWSER_TEST_F(SSLBrowserTest, BadClockInterstitial) {
+  // Without the NetworkTimeTracker reporting that the clock is ahead or
+  // behind, navigating to a page with an expired cert should result in the
+  // default SSL interstitial appearing.
+  NavigateToPageWithExpiredCertExpectSSLInterstitial();
+
+  // Set network time back ten minutes.
+  BrowserProcess::GetInstance()->GetNetworkTimeTracker()->UpdateNetworkTime(
+      base::Time::Now() - base::TimeDelta::FromMinutes(10),
+      base::TimeDelta::FromMilliseconds(1),   /* resolution */
+      base::TimeDelta::FromMilliseconds(500), /* latency */
+      base::TimeTicks::Now() /* posting time of this update */);
+
+  // Now navigating to a page with an expired cert should cause the bad clock
+  // interstitial to appear.
+  NavigateToPageWithExpiredCertExpectBadClockInterstitial();
+}
+
 }  // namespace weblayer
diff --git a/weblayer/browser/ssl_error_controller_client.cc b/weblayer/browser/ssl_error_controller_client.cc
index 45acb6a..be0a4d6 100644
--- a/weblayer/browser/ssl_error_controller_client.cc
+++ b/weblayer/browser/ssl_error_controller_client.cc
@@ -51,4 +51,8 @@
   OpenUrlInCurrentTab(url);
 }
 
+bool SSLErrorControllerClient::CanLaunchDateAndTimeSettings() {
+  return true;
+}
+
 }  // namespace weblayer
diff --git a/weblayer/browser/ssl_error_controller_client.h b/weblayer/browser/ssl_error_controller_client.h
index 17e526d..8f21222 100644
--- a/weblayer/browser/ssl_error_controller_client.h
+++ b/weblayer/browser/ssl_error_controller_client.h
@@ -38,6 +38,7 @@
   void GoBack() override;
   void Proceed() override;
   void OpenUrlInNewForegroundTab(const GURL& url) override;
+  bool CanLaunchDateAndTimeSettings() override;
 
  private:
   const int cert_error_;
diff --git a/weblayer/browser/ssl_error_handler.cc b/weblayer/browser/ssl_error_handler.cc
index 2ea089a..091dddf 100644
--- a/weblayer/browser/ssl_error_handler.cc
+++ b/weblayer/browser/ssl_error_handler.cc
@@ -6,6 +6,7 @@
 
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
+#include "components/security_interstitials/content/bad_clock_blocking_page.h"
 #include "components/security_interstitials/content/captive_portal_blocking_page.h"
 #include "components/security_interstitials/content/ssl_blocking_page.h"
 #include "components/security_interstitials/content/ssl_cert_reporter.h"
@@ -13,6 +14,8 @@
 #include "components/security_interstitials/core/metrics_helper.h"
 #include "components/security_interstitials/core/ssl_error_options_mask.h"
 #include "components/security_interstitials/core/ssl_error_ui.h"
+#include "components/ssl_errors/error_info.h"
+#include "weblayer/browser/browser_process.h"
 #include "weblayer/browser/ssl_error_controller_client.h"
 #include "weblayer/browser/weblayer_content_browser_overlay_manifest.h"
 
@@ -146,6 +149,40 @@
                                 base::WrapUnique(interstitial_page)));
 }
 
+// Constructs and shows a bad clock interstitial. Adapted from //chrome's
+// SSLErrorHandlerDelegateImpl::ShowCaptivePortalInterstitial().
+void ShowBadClockInterstitial(
+    content::WebContents* web_contents,
+    int cert_error,
+    const net::SSLInfo& ssl_info,
+    const GURL& request_url,
+    ssl_errors::ClockState clock_state,
+    std::unique_ptr<SSLCertReporter> ssl_cert_reporter,
+    base::OnceCallback<
+        void(std::unique_ptr<security_interstitials::SecurityInterstitialPage>)>
+        blocking_page_ready_callback) {
+  security_interstitials::MetricsHelper::ReportDetails report_details;
+  report_details.metric_prefix = "bad_clock";
+  auto metrics_helper = std::make_unique<security_interstitials::MetricsHelper>(
+      request_url, report_details, /*history_service=*/nullptr);
+
+  auto controller_client = std::make_unique<SSLErrorControllerClient>(
+      web_contents, cert_error, ssl_info, request_url,
+      std::move(metrics_helper));
+
+  auto* interstitial_page = new BadClockBlockingPage(
+      web_contents, cert_error, ssl_info, request_url,
+      base::Time::NowFromSystemTime(), clock_state,
+      std::move(ssl_cert_reporter), std::move(controller_client));
+
+  // Note: |blocking_page_ready_callback| must be posted due to
+  // HandleSSLError()'s guarantee that it will not invoke this callback
+  // synchronously.
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, base::BindOnce(std::move(blocking_page_ready_callback),
+                                base::WrapUnique(interstitial_page)));
+}
+
 }  // namespace
 
 void HandleSSLError(
@@ -157,7 +194,35 @@
     base::OnceCallback<
         void(std::unique_ptr<security_interstitials::SecurityInterstitialPage>)>
         blocking_page_ready_callback) {
-  // First check for captive portal.
+  // Check for a clock error.
+  if (ssl_errors::ErrorInfo::NetErrorToErrorType(cert_error) ==
+      ssl_errors::ErrorInfo::CERT_DATE_INVALID) {
+    // This implementation is adapted from //chrome's
+    // SSLErrorHandler::HandleCertDateInvalidErrorImpl(). Note that we did not
+    // port the fetch of NetworkTimeTracker's time made in //chrome's
+    // SSLErrorHandler::HandleCertDateInvalidError() into //weblayer: this
+    // fetch introduces a fair degree of complexity into the flow by making it
+    // asynchronous, and it is not relevant on Android, where such fetches are
+    // not supported. This fetch will be incorporated when WebLayer shares
+    // //chrome's SSLErrorHandler implementation as part of crbug.com/1026547.
+
+    const base::Time now = base::Time::NowFromSystemTime();
+
+    network_time::NetworkTimeTracker* tracker =
+        BrowserProcess::GetInstance()->GetNetworkTimeTracker();
+    ssl_errors::ClockState clock_state =
+        ssl_errors::GetClockState(now, tracker);
+
+    if (clock_state == ssl_errors::CLOCK_STATE_FUTURE ||
+        clock_state == ssl_errors::CLOCK_STATE_PAST) {
+      ShowBadClockInterstitial(web_contents, cert_error, ssl_info, request_url,
+                               clock_state, std::move(ssl_cert_reporter),
+                               std::move(blocking_page_ready_callback));
+      return;
+    }
+  }
+
+  // Next check for a captive portal.
 
   // TODO(https://crbug.com/1030692): Share the check for known captive
   // portal certificates from //chrome's SSLErrorHandler:757.
diff --git a/weblayer/grit_strings_whitelist.txt b/weblayer/grit_strings_whitelist.txt
index e6ad7d7..603ce96 100644
--- a/weblayer/grit_strings_whitelist.txt
+++ b/weblayer/grit_strings_whitelist.txt
@@ -7,6 +7,12 @@
 IDS_CAPTIVE_PORTAL_PRIMARY_PARAGRAPH_WIFI
 IDS_CAPTIVE_PORTAL_PRIMARY_PARAGRAPH_WIRED
 IDS_CAPTIVE_PORTAL_PRIMARY_PARAGRAPH_WIFI_SSID
+IDS_CLOCK_ERROR_AHEAD_HEADING
+IDS_CLOCK_ERROR_BEHIND_HEADING
+IDS_CLOCK_ERROR_EXPLANATION
+IDS_CLOCK_ERROR_PRIMARY_PARAGRAPH
+IDS_CLOCK_ERROR_TITLE
+IDS_CLOCK_ERROR_UPDATE_DATE_AND_TIME
 IDS_SSL_OPEN_DETAILS_BUTTON
 IDS_SSL_CLOSE_DETAILS_BUTTON
 IDS_SSL_NONOVERRIDABLE_HSTS
diff --git a/weblayer/test/BUILD.gn b/weblayer/test/BUILD.gn
index b5314f5f..587392c5 100644
--- a/weblayer/test/BUILD.gn
+++ b/weblayer/test/BUILD.gn
@@ -81,6 +81,7 @@
     "//components/autofill/core/browser",
     "//components/autofill/core/browser:test_support",
     "//components/autofill/core/common",
+    "//components/network_time",
     "//components/security_interstitials/content:security_interstitial_page",
     "//content/public/browser",
     "//content/test:test_support",
diff --git a/weblayer/test/interstitial_utils.cc b/weblayer/test/interstitial_utils.cc
index 4266a77..7e0b9de 100644
--- a/weblayer/test/interstitial_utils.cc
+++ b/weblayer/test/interstitial_utils.cc
@@ -4,6 +4,7 @@
 
 #include "weblayer/test/interstitial_utils.h"
 
+#include "components/security_interstitials/content/bad_clock_blocking_page.h"
 #include "components/security_interstitials/content/captive_portal_blocking_page.h"
 #include "components/security_interstitials/content/security_interstitial_tab_helper.h"
 #include "components/security_interstitials/content/ssl_blocking_page.h"
@@ -57,4 +58,9 @@
       tab, CaptivePortalBlockingPage::kTypeForTesting);
 }
 
+bool IsShowingBadClockInterstitial(Tab* tab) {
+  return IsShowingInterstitialOfType(tab,
+                                     BadClockBlockingPage::kTypeForTesting);
+}
+
 }  // namespace weblayer
diff --git a/weblayer/test/interstitial_utils.h b/weblayer/test/interstitial_utils.h
index e8b7834..a1a1a063d 100644
--- a/weblayer/test/interstitial_utils.h
+++ b/weblayer/test/interstitial_utils.h
@@ -24,6 +24,9 @@
 // |tab|.
 bool IsShowingCaptivePortalInterstitial(Tab* tab);
 
+// Returns true iff a bad clock interstitial is currently displaying in |tab|.
+bool IsShowingBadClockInterstitial(Tab* tab);
+
 }  // namespace weblayer
 
 #endif  // WEBLAYER_TEST_INTERSTITIAL_UTILS_H_