diff --git a/DEPS b/DEPS
index f40187f..286723c 100644
--- a/DEPS
+++ b/DEPS
@@ -124,7 +124,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '752d220a5f31c68ecba0fc845493dcc36bc40eb4',
+  'angle_revision': '83b2f0e8a2e09ae469fe1afd05842ee5dcfb38c2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling build tools
   # and whatever else without interference from each other.
@@ -136,7 +136,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': '3e2cdea95cd8803638194a51aefe57f16dba55df',
+  'pdfium_revision': 'cb8a4ddc227732ee0bb0f8b48ee7c7d4dcac37a8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling openmax_dl
   # and whatever else without interference from each other.
@@ -236,7 +236,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '0bd32409b7b799265c7b051c90806ab5cfe7db3f',
+  'dawn_revision': 'cf714a81c86e56827563e20c1b2750e674aec322',
 }
 
 # Only these hosts are allowed for dependencies in this DEPS file.
@@ -651,7 +651,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '36900aad7d961f0efd79da61cff67075758ac9c7',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'cde48580e93da01999f0032e32ebf7fbca0e474e',
       'condition': 'checkout_linux',
   },
 
@@ -1097,7 +1097,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/robolectric',
-              'version': 'version:3.5.1',
+              'version': 'Q-aurrjcIq02dl2ws-M-IhnIydurvTbUMR_xD_zBJ0YC',
           },
       ],
       'condition': 'checkout_android',
@@ -1171,7 +1171,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '5b6cbd789b9b91b4e46dde883c9f2ecb31eddade',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '59cfd35438753acd69859e8a2f98f6490e68d6a0',
+    Var('webrtc_git') + '/src.git' + '@' + '0d007d7c4f11414bb4f0712cb53f7eea4a1b0795',
 
   'src/third_party/xdg-utils': {
       'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
@@ -1202,7 +1202,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@7f2a2ae33b386bbbed06a86263b9273d93259e1b',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@047cf0724025d9e25f0a66a86a090a4e7a12f2d2',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/android_webview/browser/aw_contents.cc b/android_webview/browser/aw_contents.cc
index 7003b2d..1b30da5a 100644
--- a/android_webview/browser/aw_contents.cc
+++ b/android_webview/browser/aw_contents.cc
@@ -1470,6 +1470,34 @@
       ConvertJavaStringToUTF16(env, script), js_callback);
 }
 
+void AwContents::RendererUnresponsive(
+    content::RenderProcessHost* render_process_host) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  JNIEnv* env = AttachCurrentThread();
+  ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+  if (obj.is_null())
+    return;
+
+  AwRenderProcess* aw_render_process =
+      AwRenderProcess::GetInstanceForRenderProcessHost(render_process_host);
+  Java_AwContents_onRendererUnresponsive(env, obj,
+                                         aw_render_process->GetJavaObject());
+}
+
+void AwContents::RendererResponsive(
+    content::RenderProcessHost* render_process_host) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  JNIEnv* env = AttachCurrentThread();
+  ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+  if (obj.is_null())
+    return;
+
+  AwRenderProcess* aw_render_process =
+      AwRenderProcess::GetInstanceForRenderProcessHost(render_process_host);
+  Java_AwContents_onRendererResponsive(env, obj,
+                                       aw_render_process->GetJavaObject());
+}
+
 void AwContents::OnRenderProcessGone(int child_process_id) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   JNIEnv* env = AttachCurrentThread();
diff --git a/android_webview/browser/aw_contents.h b/android_webview/browser/aw_contents.h
index 6dbeb700..c623fc5 100644
--- a/android_webview/browser/aw_contents.h
+++ b/android_webview/browser/aw_contents.h
@@ -339,6 +339,9 @@
   jlong GetAutofillProvider(JNIEnv* env,
                             const base::android::JavaParamRef<jobject>& obj);
 
+  void RendererUnresponsive(content::RenderProcessHost* render_process_host);
+  void RendererResponsive(content::RenderProcessHost* render_process_host);
+
   // content::WebContentsObserver overrides
   void RenderViewHostChanged(content::RenderViewHost* old_host,
                              content::RenderViewHost* new_host) override;
diff --git a/android_webview/browser/aw_web_contents_delegate.cc b/android_webview/browser/aw_web_contents_delegate.cc
index 428a722d..f2366f9 100644
--- a/android_webview/browser/aw_web_contents_delegate.cc
+++ b/android_webview/browser/aw_web_contents_delegate.cc
@@ -59,6 +59,36 @@
 
 AwWebContentsDelegate::~AwWebContentsDelegate() {}
 
+void AwWebContentsDelegate::RendererUnresponsive(
+    content::WebContents* source,
+    content::RenderWidgetHost* render_widget_host,
+    base::RepeatingClosure hang_monitor_restarter) {
+  AwContents* aw_contents = AwContents::FromWebContents(source);
+  if (!aw_contents)
+    return;
+
+  content::RenderProcessHost* render_process_host =
+      render_widget_host->GetProcess();
+  if (render_process_host->IsInitializedAndNotDead()) {
+    aw_contents->RendererUnresponsive(render_widget_host->GetProcess());
+    hang_monitor_restarter.Run();
+  }
+}
+
+void AwWebContentsDelegate::RendererResponsive(
+    content::WebContents* source,
+    content::RenderWidgetHost* render_widget_host) {
+  AwContents* aw_contents = AwContents::FromWebContents(source);
+  if (!aw_contents)
+    return;
+
+  content::RenderProcessHost* render_process_host =
+      render_widget_host->GetProcess();
+  if (render_process_host->IsInitializedAndNotDead()) {
+    aw_contents->RendererResponsive(render_widget_host->GetProcess());
+  }
+}
+
 content::JavaScriptDialogManager*
 AwWebContentsDelegate::GetJavaScriptDialogManager(WebContents* source) {
   return g_javascript_dialog_manager.Pointer();
diff --git a/android_webview/browser/aw_web_contents_delegate.h b/android_webview/browser/aw_web_contents_delegate.h
index 1abe7b4..25462538 100644
--- a/android_webview/browser/aw_web_contents_delegate.h
+++ b/android_webview/browser/aw_web_contents_delegate.h
@@ -17,6 +17,16 @@
  public:
   AwWebContentsDelegate(JNIEnv* env, jobject obj);
   ~AwWebContentsDelegate() override;
+
+  void RendererUnresponsive(
+      content::WebContents* source,
+      content::RenderWidgetHost* render_widget_host,
+      base::RepeatingClosure hang_monitor_restarter) override;
+
+  void RendererResponsive(
+      content::WebContents* source,
+      content::RenderWidgetHost* render_widget_host) override;
+
   content::JavaScriptDialogManager* GetJavaScriptDialogManager(
       content::WebContents* source) override;
   void FindReply(content::WebContents* web_contents,
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java
index f022593..aa04e28 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java
@@ -43,6 +43,7 @@
 import org.chromium.android_webview.AwContentsClientBridge;
 import org.chromium.android_webview.AwGeolocationPermissions;
 import org.chromium.android_webview.AwHttpAuthHandler;
+import org.chromium.android_webview.AwRenderProcess;
 import org.chromium.android_webview.AwRenderProcessGoneDetail;
 import org.chromium.android_webview.AwSafeBrowsingResponse;
 import org.chromium.android_webview.AwWebResourceResponse;
@@ -1206,6 +1207,14 @@
         }
     }
 
+    // TODO(tobiasjs) connect to support app-settable callbacks.
+    @Override
+    public void onRendererUnresponsive(final AwRenderProcess renderProcess) {}
+
+    // TODO(tobiasjs) connect to support app-settable callbacks.
+    @Override
+    public void onRendererResponsive(final AwRenderProcess renderProcess) {}
+
     @Override
     public boolean onRenderProcessGone(final AwRenderProcessGoneDetail detail) {
         // WebViewClient.onRenderProcessGone was added in O.
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index 58871c3..dcf13c8 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -1313,6 +1313,18 @@
         return mJavascriptInjector;
     }
 
+    @CalledByNative
+    private void onRendererResponsive(AwRenderProcess renderProcess) {
+        if (isDestroyed(NO_WARN)) return;
+        mContentsClient.onRendererResponsive(renderProcess);
+    }
+
+    @CalledByNative
+    private void onRendererUnresponsive(AwRenderProcess renderProcess) {
+        if (isDestroyed(NO_WARN)) return;
+        mContentsClient.onRendererUnresponsive(renderProcess);
+    }
+
     @VisibleForTesting
     @CalledByNative
     protected void onRenderProcessGone(int childProcessID) {
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
index 022d5fb..cd30bee 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
@@ -436,5 +436,8 @@
         mCallbackHelper.postOnReceivedTitle(mTitle);
     }
 
+    public abstract void onRendererUnresponsive(AwRenderProcess renderProcess);
+    public abstract void onRendererResponsive(AwRenderProcess renderProcess);
+
     public abstract boolean onRenderProcessGone(AwRenderProcessGoneDetail detail);
 }
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientOnRendererUnresponsiveTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientOnRendererUnresponsiveTest.java
new file mode 100644
index 0000000..66f62a0
--- /dev/null
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientOnRendererUnresponsiveTest.java
@@ -0,0 +1,169 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.android_webview.test;
+
+import static org.chromium.android_webview.test.OnlyRunIn.ProcessMode.MULTI_PROCESS;
+
+import android.support.test.filters.LargeTest;
+import android.view.KeyEvent;
+
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.android_webview.AwContents;
+import org.chromium.android_webview.AwRenderProcess;
+import org.chromium.android_webview.AwRenderProcessGoneDetail;
+import org.chromium.base.ThreadUtils;
+import org.chromium.base.test.util.CallbackHelper;
+import org.chromium.base.test.util.Feature;
+import org.chromium.content_public.common.ContentUrlConstants;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Tests for AwContentsClient.onRenderProcessGone callback.
+ */
+@RunWith(AwJUnit4ClassRunner.class)
+public class AwContentsClientOnRendererUnresponsiveTest {
+    @Rule
+    public AwActivityTestRule mActivityTestRule = new AwActivityTestRule();
+
+    private static final String TAG = "AwRendererUnresponsive";
+
+    private static class RendererTransientlyUnresponsiveTestAwContentsClient
+            extends TestAwContentsClient {
+        private CallbackHelper mUnresponsiveCallbackHelper;
+        private CallbackHelper mResponsiveCallbackHelper;
+
+        public RendererTransientlyUnresponsiveTestAwContentsClient() {
+            mUnresponsiveCallbackHelper = new CallbackHelper();
+            mResponsiveCallbackHelper = new CallbackHelper();
+        }
+
+        void transientlyBlockBlinkThread(final AwContents awContents) {
+            ThreadUtils.runOnUiThread(() -> {
+                // clang-format off
+                awContents.evaluateJavaScript(
+                        "let t0 = performance.now();\n" +
+                        "while(performance.now() < t0 + 6000 /*ms*/) {}",
+                        null);
+                // clang-format on
+            });
+        }
+
+        void awaitRecovery() throws Exception {
+            // unresponsive signal should occur after 5 seconds, so wait for 6.
+            mUnresponsiveCallbackHelper.waitForCallback(0, 1, 6, TimeUnit.SECONDS);
+            Assert.assertEquals(1, mUnresponsiveCallbackHelper.getCallCount());
+            // blink main thread is transiently blocked for 6 seconds; wait
+            // an additional 5 seconds.
+            mResponsiveCallbackHelper.waitForCallback(0, 1, 5, TimeUnit.SECONDS);
+            Assert.assertEquals(1, mResponsiveCallbackHelper.getCallCount());
+        }
+
+        @Override
+        public void onRendererResponsive(AwRenderProcess process) {
+            mResponsiveCallbackHelper.notifyCalled();
+        }
+
+        @Override
+        public void onRendererUnresponsive(AwRenderProcess process) {
+            // onRendererResponsive should not have been called yet.
+            Assert.assertEquals(0, mResponsiveCallbackHelper.getCallCount());
+            mUnresponsiveCallbackHelper.notifyCalled();
+        }
+    }
+
+    private static class RendererUnresponsiveTestAwContentsClient extends TestAwContentsClient {
+        // The renderer unresponsive callback should be called repeatedly. We will wait for two
+        // callbacks.
+        static final int UNRESPONSIVE_CALLBACK_COUNT = 2;
+
+        private CallbackHelper mUnresponsiveCallbackHelper;
+        private CallbackHelper mTerminatedCallbackHelper;
+
+        public RendererUnresponsiveTestAwContentsClient() {
+            mUnresponsiveCallbackHelper = new CallbackHelper();
+            mTerminatedCallbackHelper = new CallbackHelper();
+        }
+
+        void permanentlyBlockBlinkThread(final AwContents awContents) {
+            ThreadUtils.runOnUiThread(() -> { awContents.evaluateJavaScript("while(1);", null); });
+        }
+
+        void awaitRendererTermination() throws Exception {
+            // The input ack timeout is 5 seconds, and the unresponsive callback should retrigger at
+            // that interval, so wait for the expected multiple of 5 seconds, plus one second
+            // leeway.
+            mUnresponsiveCallbackHelper.waitForCallback(
+                    0, 2, 5 * UNRESPONSIVE_CALLBACK_COUNT + 1, TimeUnit.SECONDS);
+            Assert.assertEquals(2, mUnresponsiveCallbackHelper.getCallCount());
+
+            mTerminatedCallbackHelper.waitForCallback(0, 1, 5, TimeUnit.SECONDS);
+            Assert.assertEquals(1, mTerminatedCallbackHelper.getCallCount());
+        }
+
+        @Override
+        public boolean onRenderProcessGone(AwRenderProcessGoneDetail detail) {
+            mTerminatedCallbackHelper.notifyCalled();
+            return true;
+        }
+
+        @Override
+        public void onRendererUnresponsive(AwRenderProcess process) {
+            mUnresponsiveCallbackHelper.notifyCalled();
+            if (mUnresponsiveCallbackHelper.getCallCount() == UNRESPONSIVE_CALLBACK_COUNT) {
+                process.terminate();
+            }
+        }
+    }
+
+    private void sendInputEvent(final AwContents awContents) {
+        ThreadUtils.runOnUiThread(() -> {
+            awContents.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
+        });
+    }
+    @Test
+    @Feature({"AndroidWebView"})
+    @LargeTest
+    @OnlyRunIn(MULTI_PROCESS)
+    public void testOnRendererUnresponsive() throws Throwable {
+        RendererUnresponsiveTestAwContentsClient contentsClient =
+                new RendererUnresponsiveTestAwContentsClient();
+        AwTestContainerView testView =
+                mActivityTestRule.createAwTestContainerViewOnMainSync(contentsClient);
+        final AwContents awContents = testView.getAwContents();
+
+        AwActivityTestRule.enableJavaScriptOnUiThread(awContents);
+        mActivityTestRule.loadUrlSync(awContents, contentsClient.getOnPageFinishedHelper(),
+                ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL);
+
+        contentsClient.permanentlyBlockBlinkThread(awContents);
+        // Sending a key event while the renderer is unresponsive will cause onRendererUnresponsive
+        // to be called.
+        sendInputEvent(awContents);
+        contentsClient.awaitRendererTermination();
+    }
+
+    @Test
+    @Feature({"AndroidWebView"})
+    @LargeTest
+    public void testTransientUnresponsiveness() throws Throwable {
+        RendererTransientlyUnresponsiveTestAwContentsClient contentsClient =
+                new RendererTransientlyUnresponsiveTestAwContentsClient();
+        AwTestContainerView testView =
+                mActivityTestRule.createAwTestContainerViewOnMainSync(contentsClient);
+        final AwContents awContents = testView.getAwContents();
+
+        AwActivityTestRule.enableJavaScriptOnUiThread(awContents);
+        mActivityTestRule.loadUrlSync(awContents, contentsClient.getOnPageFinishedHelper(),
+                ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL);
+        contentsClient.transientlyBlockBlinkThread(awContents);
+        sendInputEvent(awContents);
+        contentsClient.awaitRecovery();
+    }
+}
diff --git a/android_webview/test/BUILD.gn b/android_webview/test/BUILD.gn
index 89ab61a..49e22ae 100644
--- a/android_webview/test/BUILD.gn
+++ b/android_webview/test/BUILD.gn
@@ -192,6 +192,7 @@
     "../javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenTest.java",
     "../javatests/src/org/chromium/android_webview/test/AwContentsClientGetDefaultVideoPosterTest.java",
     "../javatests/src/org/chromium/android_webview/test/AwContentsClientOnFormResubmissionTest.java",
+    "../javatests/src/org/chromium/android_webview/test/AwContentsClientOnRendererUnresponsiveTest.java",
     "../javatests/src/org/chromium/android_webview/test/AwContentsClientOnRenderProcessGoneTest.java",
     "../javatests/src/org/chromium/android_webview/test/AwContentsClientOnScaleChangedTest.java",
     "../javatests/src/org/chromium/android_webview/test/AwContentsClientOnUnhandledKeyEventTest.java",
diff --git a/android_webview/test/shell/src/org/chromium/android_webview/test/NullContentsClient.java b/android_webview/test/shell/src/org/chromium/android_webview/test/NullContentsClient.java
index 2f112b2..abfa001 100644
--- a/android_webview/test/shell/src/org/chromium/android_webview/test/NullContentsClient.java
+++ b/android_webview/test/shell/src/org/chromium/android_webview/test/NullContentsClient.java
@@ -18,6 +18,7 @@
 import org.chromium.android_webview.AwContentsClientBridge;
 import org.chromium.android_webview.AwGeolocationPermissions;
 import org.chromium.android_webview.AwHttpAuthHandler;
+import org.chromium.android_webview.AwRenderProcess;
 import org.chromium.android_webview.AwRenderProcessGoneDetail;
 import org.chromium.android_webview.AwSafeBrowsingResponse;
 import org.chromium.android_webview.AwWebResourceResponse;
@@ -259,6 +260,12 @@
     }
 
     @Override
+    public void onRendererUnresponsive(AwRenderProcess process) {}
+
+    @Override
+    public void onRendererResponsive(AwRenderProcess process) {}
+
+    @Override
     public boolean onRenderProcessGone(AwRenderProcessGoneDetail detail) {
         return false;
     }
diff --git a/base/android/java/src/org/chromium/base/DiscardableReferencePool.java b/base/android/java/src/org/chromium/base/DiscardableReferencePool.java
index 566df70..8ab117ff 100644
--- a/base/android/java/src/org/chromium/base/DiscardableReferencePool.java
+++ b/base/android/java/src/org/chromium/base/DiscardableReferencePool.java
@@ -78,6 +78,18 @@
     }
 
     /**
+     * Remove this reference from the pool, allowing garbage collection to pick it up.
+     *
+     * @param ref The discardable reference to remove.
+     */
+    public void remove(DiscardableReference<?> ref) {
+        assert ref != null;
+        assert mPool.contains(ref);
+        mPool.remove(ref);
+        ref.discard();
+    }
+
+    /**
      * Drains the pool, removing all references to objects in the pool and therefore allowing them
      * to be garbage collected.
      */
diff --git a/base/debug/proc_maps_linux_unittest.cc b/base/debug/proc_maps_linux_unittest.cc
index 8554862..639e046 100644
--- a/base/debug/proc_maps_linux_unittest.cc
+++ b/base/debug/proc_maps_linux_unittest.cc
@@ -191,11 +191,6 @@
 // instrumentation for this function to force the variable to be local.
 __attribute__((no_sanitize_address))
 #endif
-#if HAS_FEATURE(safe_stack)
-// SafeStack places address-taken variables on the unsafe stack, but the default
-// stack region in /proc/self/maps is the safe stack.
-__attribute__((no_sanitize("safe-stack")))
-#endif
 void CheckProcMapsRegions(const std::vector<MappedMemoryRegion> &regions) {
   // We should be able to find both the current executable as well as the stack
   // mapped into memory. Use the address of |exe_path| as a way of finding the
diff --git a/base/memory/platform_shared_memory_region_posix.cc b/base/memory/platform_shared_memory_region_posix.cc
index 3226ca4a..37f705a 100644
--- a/base/memory/platform_shared_memory_region_posix.cc
+++ b/base/memory/platform_shared_memory_region_posix.cc
@@ -298,24 +298,8 @@
   return true;
 #else
   // fcntl(_, F_GETFL) is not implemented on NaCl.
-  void* temp_memory = nullptr;
-  temp_memory =
-      mmap(nullptr, size, PROT_READ | PROT_WRITE, MAP_SHARED, handle.fd, 0);
-
-  bool mmap_succeeded = temp_memory && temp_memory != MAP_FAILED;
-  if (mmap_succeeded)
-    munmap(temp_memory, size);
-
-  bool is_read_only = !mmap_succeeded;
-  bool expected_read_only = mode == Mode::kReadOnly;
-
-  if (is_read_only != expected_read_only) {
-    DLOG(ERROR) << "Descriptor has a wrong access mode: it is"
-                << (is_read_only ? " " : " not ") << "read-only but it should"
-                << (expected_read_only ? " " : " not ") << "be";
-    return false;
-  }
-
+  // We also cannot try to mmap() a region as writable and look at the return
+  // status because the plugin process crashes if system mmap() fails.
   return true;
 #endif  // !defined(OS_NACL)
 }
diff --git a/base/task/sequence_manager/sequence_manager_perftest.cc b/base/task/sequence_manager/sequence_manager_perftest.cc
index 2a04efb..42f1a36 100644
--- a/base/task/sequence_manager/sequence_manager_perftest.cc
+++ b/base/task/sequence_manager/sequence_manager_perftest.cc
@@ -757,7 +757,8 @@
 
 TEST_P(SequenceManagerPerfTest, PostImmediateTasksFromTwoThreads_OneQueue) {
   TwoThreadTestCase task_source(delegate_.get(), CreateTaskRunners(1));
-  Benchmark("post immediate tasks with one queue", &task_source);
+  Benchmark("post immediate tasks with one queue from two threads",
+            &task_source);
 }
 
 TEST_P(SequenceManagerPerfTest, PostImmediateTasksFromTwoThreads_FourQueues) {
@@ -767,7 +768,8 @@
   }
 
   TwoThreadTestCase task_source(delegate_.get(), CreateTaskRunners(4));
-  Benchmark("post immediate tasks with four queues", &task_source);
+  Benchmark("post immediate tasks with four queues from two threads",
+            &task_source);
 }
 
 TEST_P(SequenceManagerPerfTest, PostImmediateTasksFromTwoThreads_EightQueues) {
@@ -777,7 +779,8 @@
   }
 
   TwoThreadTestCase task_source(delegate_.get(), CreateTaskRunners(8));
-  Benchmark("post immediate tasks with eight queues", &task_source);
+  Benchmark("post immediate tasks with eight queues from two threads",
+            &task_source);
 }
 
 TEST_P(SequenceManagerPerfTest,
@@ -788,7 +791,8 @@
   }
 
   TwoThreadTestCase task_source(delegate_.get(), CreateTaskRunners(32));
-  Benchmark("post immediate tasks with thirty two queues", &task_source);
+  Benchmark("post immediate tasks with thirty two queues from two threads",
+            &task_source);
 }
 
 // TODO(alexclarke): Add additional tests with different mixes of non-delayed vs
diff --git a/base/test/fuzzed_data_provider.h b/base/test/fuzzed_data_provider.h
index 0e3da80..f09c600 100644
--- a/base/test/fuzzed_data_provider.h
+++ b/base/test/fuzzed_data_provider.h
@@ -5,11 +5,12 @@
 #ifndef BASE_TEST_FUZZED_DATA_PROVIDER_H_
 #define BASE_TEST_FUZZED_DATA_PROVIDER_H_
 
+#include <limits.h>
 #include <stddef.h>
 #include <stdint.h>
 
 #include <algorithm>
-#include <limits>
+#include <cstring>
 #include <string>
 #include <utility>
 #include <vector>
diff --git a/cc/raster/staging_buffer_pool.cc b/cc/raster/staging_buffer_pool.cc
index b80c868..a02c43e4 100644
--- a/cc/raster/staging_buffer_pool.cc
+++ b/cc/raster/staging_buffer_pool.cc
@@ -92,9 +92,9 @@
   if (!gpu_memory_buffer)
     return;
 
-  gfx::GpuMemoryBufferId buffer_id = gpu_memory_buffer->GetId();
+  // Use |this| as the id, which works with multiple StagingBuffers.
   std::string buffer_dump_name =
-      base::StringPrintf("cc/one_copy/staging_memory/buffer_%d", buffer_id.id);
+      base::StringPrintf("cc/one_copy/staging_memory/buffer_%p", this);
   MemoryAllocatorDump* buffer_dump = pmd->CreateAllocatorDump(buffer_dump_name);
 
   uint64_t buffer_size_in_bytes =
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index ea87357..4857ea6 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -67,12 +67,12 @@
 
 namespace cc {
 class BrowserControlsOffsetManager;
-class LayerTreeFrameSink;
 class DebugRectHistory;
 class EvictionTilePriorityQueue;
 class FrameRateCounter;
 class ImageAnimationController;
 class LayerImpl;
+class LayerTreeFrameSink;
 class LayerTreeImpl;
 class MemoryHistory;
 class MutatorEvents;
@@ -91,7 +91,6 @@
 class SynchronousTaskGraphRunner;
 class TaskGraphRunner;
 class UIResourceBitmap;
-struct ScrollAndScaleSet;
 class Viewport;
 
 using BeginFrameCallbackList = std::vector<base::Closure>;
diff --git a/chrome/VERSION b/chrome/VERSION
index d837ff6..57d1325 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=72
 MINOR=0
-BUILD=3624
+BUILD=3625
 PATCH=0
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedImageLoader.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedImageLoader.java
index 03230c5a..7589699c 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedImageLoader.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedImageLoader.java
@@ -18,11 +18,13 @@
 import com.google.android.libraries.feed.host.imageloader.ImageLoaderApi;
 
 import org.chromium.base.Callback;
+import org.chromium.base.DiscardableReferencePool;
+import org.chromium.base.SysUtils;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.VisibleForTesting;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.cached_image_fetcher.CachedImageFetcher;
-import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.cached_image_fetcher.InMemoryCachedImageFetcher;
 import org.chromium.chrome.browser.suggestions.ThumbnailGradient;
 
 import java.util.Iterator;
@@ -41,15 +43,24 @@
     private static final String OVERLAY_IMAGE_DIRECTION_END = "end";
 
     private Context mActivityContext;
+    private CachedImageFetcher mCachedImageFetcher;
 
     /**
      * Creates a FeedImageLoader for fetching image for the current user.
      *
-     * @param profile Profile of the user we are rendering the Feed for.
      * @param activityContext Context of the user we are rendering the Feed for.
      */
-    public FeedImageLoader(Profile profile, Context activityContext) {
+    public FeedImageLoader(Context activityContext, DiscardableReferencePool referencePool) {
         mActivityContext = activityContext;
+        if (SysUtils.isLowEndDevice()) {
+            mCachedImageFetcher = CachedImageFetcher.getInstance();
+        } else {
+            mCachedImageFetcher = new InMemoryCachedImageFetcher(referencePool);
+        }
+    }
+
+    public void destroy() {
+        mCachedImageFetcher.destroy();
     }
 
     @Override
@@ -156,6 +167,12 @@
 
     @VisibleForTesting
     protected void fetchImage(String url, int width, int height, Callback<Bitmap> callback) {
-        CachedImageFetcher.getInstance().fetchImage(url, width, height, callback);
+        mCachedImageFetcher.fetchImage(url, width, height, callback);
+    }
+
+    @VisibleForTesting
+    FeedImageLoader(Context activityContext, CachedImageFetcher cachedImageFetcher) {
+        mActivityContext = activityContext;
+        mCachedImageFetcher = cachedImageFetcher;
     }
 }
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java
index 1a4f9b426..692bdc0c 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java
@@ -4,7 +4,6 @@
 
 package org.chromium.chrome.browser.feed;
 
-import android.app.Activity;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
@@ -257,6 +256,8 @@
         mMediator.destroy();
         if (mStreamLifecycleManager != null) mStreamLifecycleManager.destroy();
         mTab.getWindowAndroid().removeContextMenuCloseListener(mContextMenuManager);
+        if (mImageLoader != null) mImageLoader.destroy();
+        mImageLoader = null;
     }
 
     @Override
@@ -301,10 +302,11 @@
         FeedAppLifecycle appLifecycle = FeedProcessScopeFactory.getFeedAppLifecycle();
         appLifecycle.onNTPOpened();
 
-        Activity activity = mTab.getActivity();
+        ChromeActivity chromeActivity = mTab.getActivity();
         Profile profile = mTab.getProfile();
 
-        mImageLoader = new FeedImageLoader(profile, activity);
+        mImageLoader = new FeedImageLoader(
+                chromeActivity, chromeActivity.getChromeApplication().getReferencePool());
         FeedLoggingBridge loggingBridge = FeedProcessScopeFactory.getFeedLoggingBridge();
         FeedOfflineIndicator offlineIndicator = FeedProcessScopeFactory.getFeedOfflineIndicator();
         Runnable consumptionObserver =
@@ -315,17 +317,18 @@
 
         FeedStreamScope streamScope =
                 feedProcessScope
-                        .createFeedStreamScopeBuilder(activity, mImageLoader, actionApi,
+                        .createFeedStreamScopeBuilder(chromeActivity, mImageLoader, actionApi,
                                 new BasicStreamConfiguration(),
-                                new BasicCardConfiguration(activity.getResources(), mUiConfig),
+                                new BasicCardConfiguration(
+                                        chromeActivity.getResources(), mUiConfig),
                                 new BasicSnackbarApi(mNewTabPageManager.getSnackbarManager()),
                                 loggingBridge, offlineIndicator)
                         .build();
 
         mStream = streamScope.getStream();
-        mStreamLifecycleManager = new StreamLifecycleManager(mStream, activity, mTab);
+        mStreamLifecycleManager = new StreamLifecycleManager(mStream, chromeActivity, mTab);
 
-        LayoutInflater inflater = LayoutInflater.from(activity);
+        LayoutInflater inflater = LayoutInflater.from(chromeActivity);
         mSectionHeaderView = (SectionHeaderView) inflater.inflate(
                 R.layout.new_tab_page_snippets_expandable_header, mRootView, false);
         mSectionHeaderViewMarginResizer = MarginResizer.createAndAttach(
@@ -363,13 +366,18 @@
             mStreamLifecycleManager = null;
             // Do not call mStream.onDestroy(), the mStreamLifecycleManager has done that for us.
             mStream = null;
-            mImageLoader = null;
             mSectionHeaderView = null;
             mSectionHeaderViewMarginResizer.detach();
             mSectionHeaderViewMarginResizer = null;
             mSigninPromoView = null;
-            if (mSignInPromoViewMarginResizer != null) mSignInPromoViewMarginResizer.detach();
-            mSignInPromoViewMarginResizer = null;
+            if (mSignInPromoViewMarginResizer != null) {
+                mSignInPromoViewMarginResizer.detach();
+                mSignInPromoViewMarginResizer = null;
+            }
+            if (mImageLoader != null) {
+                mImageLoader.destroy();
+                mImageLoader = null;
+            }
         }
 
         mScrollViewForPolicy = new ScrollView(mTab.getActivity());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BitmapCache.java b/chrome/android/java/src/org/chromium/chrome/browser/BitmapCache.java
index 7ea7825..b1be3966 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/BitmapCache.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/BitmapCache.java
@@ -92,6 +92,16 @@
         mBitmapCache = referencePool.put(new RecentlyUsedCache(mCacheSize));
     }
 
+    /**
+     * Manually destroy the BitmapCache.
+     */
+    public void destroy() {
+        assert mReferencePool != null;
+        assert mBitmapCache != null;
+        mReferencePool.remove(mBitmapCache);
+        mBitmapCache = null;
+    }
+
     public Bitmap getBitmap(String key) {
         ThreadUtils.assertOnUiThread();
         Bitmap cachedBitmap = getBitmapCache().get(key);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
index 95c48b0f..adf793f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
@@ -215,6 +215,7 @@
     public static final String FCM_INVALIDATIONS = "FCMInvalidations";
     // When enabled, fullscreen WebContents will be moved to a new Activity. Coming soon...
     public static final String FULLSCREEN_ACTIVITY = "FullscreenActivity";
+    public static final String GESTURE_NAVIGATION = "GestureNavigation";
     public static final String GRANT_NOTIFICATIONS_TO_DSE = "GrantNotificationsToDSE";
     public static final String GENERIC_SENSOR_EXTRA_CLASSES = "GenericSensorExtraClasses";
     public static final String HANDLE_MEDIA_INTENTS = "HandleMediaIntents";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcher.java b/chrome/android/java/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcher.java
index 0fa4faf..4b5dd16 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcher.java
@@ -5,49 +5,18 @@
 package org.chromium.chrome.browser.cached_image_fetcher;
 
 import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
 
 import org.chromium.base.Callback;
 import org.chromium.base.ThreadUtils;
-import org.chromium.base.VisibleForTesting;
-import org.chromium.base.task.AsyncTask;
-import org.chromium.chrome.browser.profiles.Profile;
+
 /**
  * Provides cached image fetching capabilities. Uses getLastUsedProfile, which
  * will need to be changed when supporting multi-profile.
  */
-public class CachedImageFetcher {
-    private static CachedImageFetcher sInstance;
-
-    public static CachedImageFetcher getInstance() {
+public interface CachedImageFetcher {
+    static CachedImageFetcher getInstance() {
         ThreadUtils.assertOnUiThread();
-
-        if (sInstance == null) {
-            sInstance = new CachedImageFetcher(Profile.getLastUsedProfile());
-        }
-
-        return sInstance;
-    }
-
-    private CachedImageFetcherBridge mCachedImageFetcherBridge;
-
-    /**
-     * Creates a CachedImageFetcher for the current user.
-     *
-     * @param profile Profile of the user we are fetching for.
-     */
-    private CachedImageFetcher(Profile profile) {
-        this(new CachedImageFetcherBridge(profile));
-    }
-
-    /**
-     * Creates a CachedImageFetcher for testing.
-     *
-     * @param bridge Mock bridge to use.
-     */
-    @VisibleForTesting
-    CachedImageFetcher(CachedImageFetcherBridge bridge) {
-        mCachedImageFetcherBridge = bridge;
+        return CachedImageFetcherImpl.getInstance();
     }
 
     /**
@@ -59,13 +28,7 @@
      * @param height The new bitmap's desired height (in pixels).
      * @param callback The function which will be called when the image is ready.
      */
-    public void fetchImage(String url, int width, int height, Callback<Bitmap> callback) {
-        BitmapFactory.Options options = new BitmapFactory.Options();
-        options.outWidth = width;
-        options.outHeight = height;
-
-        fetchImage(url, options, callback);
-    }
+    void fetchImage(String url, int width, int height, Callback<Bitmap> callback);
 
     /**
      * Alias of fetchImage that ignores scaling.
@@ -73,45 +36,10 @@
      * @param url The url to fetch the image from.
      * @param callback The function which will be called when the image is ready.
      */
-    public void fetchImage(String url, Callback<Bitmap> callback) {
-        fetchImage(url, new BitmapFactory.Options(), callback);
-    }
+    void fetchImage(String url, Callback<Bitmap> callback);
 
     /**
-     * Starts an AsyncTask to first check the disk for the desired image, then
-     * fetches from the network if it isn't found.
-     *
-     * @param url The url to fetch the image from.
-     * @param options Settings when loading the image.
-     * @param callback The function which will be called when the image is ready.
+     * Destroy method, called to clear resources to prevent leakage.
      */
-    @VisibleForTesting
-    protected void fetchImage(
-            String url, BitmapFactory.Options options, Callback<Bitmap> callback) {
-        String filePath = mCachedImageFetcherBridge.getFilePath(url);
-        new AsyncTask<Bitmap>() {
-            @Override
-            protected Bitmap doInBackground() {
-                return tryToLoadImageFromDisk(filePath, options);
-            }
-
-            @Override
-            protected void onPostExecute(Bitmap bitmap) {
-                if (bitmap != null) {
-                    callback.onResult(bitmap);
-                    return;
-                }
-
-                mCachedImageFetcherBridge.fetchImage(
-                        url, options.outWidth, options.outHeight, callback);
-            }
-        }
-                .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
-    }
-
-    /** Wrapper function to decode a file for disk, useful for testing. */
-    @VisibleForTesting
-    Bitmap tryToLoadImageFromDisk(String filePath, BitmapFactory.Options options) {
-        return BitmapFactory.decodeFile(filePath, options);
-    }
-}
+    void destroy();
+}
\ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherImpl.java
new file mode 100644
index 0000000..a7434d8
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherImpl.java
@@ -0,0 +1,104 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.cached_image_fetcher;
+
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+
+import org.chromium.base.Callback;
+import org.chromium.base.ThreadUtils;
+import org.chromium.base.VisibleForTesting;
+import org.chromium.base.task.AsyncTask;
+import org.chromium.chrome.browser.profiles.Profile;
+
+/**
+ * Implementation that uses a disk cache.
+ */
+public class CachedImageFetcherImpl implements CachedImageFetcher {
+    private static CachedImageFetcherImpl sInstance;
+
+    public static CachedImageFetcher getInstance() {
+        ThreadUtils.assertOnUiThread();
+
+        if (sInstance == null) {
+            sInstance = new CachedImageFetcherImpl(Profile.getLastUsedProfile());
+        }
+
+        return sInstance;
+    }
+
+    // The native bridge.
+    private CachedImageFetcherBridge mCachedImageFetcherBridge;
+
+    /**
+     * Creates a CachedImageFetcher for the current user.
+     *
+     * @param profile Profile of the user we are fetching for.
+     */
+    private CachedImageFetcherImpl(Profile profile) {
+        this(new CachedImageFetcherBridge(profile));
+    }
+
+    /**
+     * Creates a CachedImageFetcher for testing.
+     *
+     * @param bridge Mock bridge to use.
+     */
+    @VisibleForTesting
+    CachedImageFetcherImpl(CachedImageFetcherBridge bridge) {
+        mCachedImageFetcherBridge = bridge;
+    }
+
+    @Override
+    public void destroy() {
+        // Do nothing, this lives for the lifetime of the application.
+    }
+
+    @Override
+    public void fetchImage(String url, int width, int height, Callback<Bitmap> callback) {
+        fetchImageImpl(url, width, height, callback);
+    }
+
+    @Override
+    public void fetchImage(String url, Callback<Bitmap> callback) {
+        fetchImageImpl(url, 0, 0, callback);
+    }
+
+    /**
+     * Starts an AsyncTask to first check the disk for the desired image, then
+     * fetches from the network if it isn't found.
+     *
+     * @param url The url to fetch the image from.
+     * @param width The new bitmap's desired width (in pixels).
+     * @param height The new bitmap's desired height (in pixels).
+     * @param callback The function which will be called when the image is ready.
+     */
+    @VisibleForTesting
+    void fetchImageImpl(String url, int width, int height, Callback<Bitmap> callback) {
+        String filePath = mCachedImageFetcherBridge.getFilePath(url);
+        new AsyncTask<Bitmap>() {
+            @Override
+            protected Bitmap doInBackground() {
+                return tryToLoadImageFromDisk(filePath);
+            }
+
+            @Override
+            protected void onPostExecute(Bitmap bitmap) {
+                if (bitmap != null) {
+                    callback.onResult(bitmap);
+                    return;
+                }
+
+                mCachedImageFetcherBridge.fetchImage(url, width, height, callback);
+            }
+        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+    }
+
+    /** Wrapper function to decode a file for disk, useful for testing. */
+    @VisibleForTesting
+    Bitmap tryToLoadImageFromDisk(String filePath) {
+        return BitmapFactory.decodeFile(filePath, null);
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/cached_image_fetcher/InMemoryCachedImageFetcher.java b/chrome/android/java/src/org/chromium/chrome/browser/cached_image_fetcher/InMemoryCachedImageFetcher.java
new file mode 100644
index 0000000..d26b98d
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/cached_image_fetcher/InMemoryCachedImageFetcher.java
@@ -0,0 +1,136 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.cached_image_fetcher;
+
+import android.graphics.Bitmap;
+
+import org.chromium.base.Callback;
+import org.chromium.base.DiscardableReferencePool;
+import org.chromium.base.VisibleForTesting;
+import org.chromium.chrome.browser.BitmapCache;
+import org.chromium.chrome.browser.util.ConversionUtils;
+
+/**
+ * A wrapper around the static CachedImageFetcher that also provides in-memory cahcing.
+ */
+public class InMemoryCachedImageFetcher implements CachedImageFetcher {
+    private static final int DEFAULT_CACHE_SIZE = 20 * ConversionUtils.BYTES_PER_MEGABYTE; // 20mb
+    private static final float PORTION_OF_AVAILABLE_MEMORY = 1.f / 8.f;
+
+    private CachedImageFetcher mCachedImageFetcher;
+    private BitmapCache mBitmapCache;
+
+    /**
+     * Create an instance with the default max cache size.
+     *
+     * @param referencePool Pool used to discard references when under memory pressure.
+     */
+    public InMemoryCachedImageFetcher(DiscardableReferencePool referencePool) {
+        this(referencePool, DEFAULT_CACHE_SIZE);
+    }
+
+    /**
+     * Create an instance with a custom max cache size.
+     *
+     * @param referencePool Pool used to discard references when under memory pressure.
+     * @param cacheSize The cache size to use (in bytes), may be smaller depending on the device's
+     *         memory.
+     */
+    public InMemoryCachedImageFetcher(DiscardableReferencePool referencePool, int cacheSize) {
+        int actualCacheSize = determineCacheSize(cacheSize);
+        mBitmapCache = new BitmapCache(referencePool, actualCacheSize);
+        mCachedImageFetcher = CachedImageFetcher.getInstance();
+    }
+
+    @Override
+    public void destroy() {
+        mCachedImageFetcher.destroy();
+        mBitmapCache.destroy();
+    }
+
+    @Override
+    public void fetchImage(String url, int width, int height, Callback<Bitmap> callback) {
+        Bitmap cachedBitmap = tryToGetBitmap(url, width, height);
+        if (cachedBitmap == null) {
+            mCachedImageFetcher.fetchImage(url, width, height, (Bitmap bitmap) -> {
+                storeBitmap(bitmap, url, width, height);
+                callback.onResult(bitmap);
+            });
+        } else {
+            callback.onResult(cachedBitmap);
+        }
+    }
+
+    @Override
+    public void fetchImage(String url, Callback<Bitmap> callback) {
+        fetchImage(url, 0, 0, callback);
+    }
+
+    /**
+     * Try to get a bitmap from the in-memory cache.
+     *
+     * @param url The url of the image.
+     * @param width The width (in pixels) of the image.
+     * @param height The height (in pixels) of the image.
+     * @return The Bitmap stored in memory or null.
+     */
+    private Bitmap tryToGetBitmap(String url, int width, int height) {
+        String key = encodeCacheKey(url, width, height);
+        return mBitmapCache.getBitmap(key);
+    }
+
+    /**
+     * Store the bitmap in memory.
+     *
+     * @param url The url of the image.
+     * @param width The width (in pixels) of the image.
+     * @param height The height (in pixels) of the image.
+     */
+    private void storeBitmap(Bitmap bitmap, String url, int width, int height) {
+        if (bitmap == null) return;
+
+        String key = encodeCacheKey(url, width, height);
+        mBitmapCache.putBitmap(key, bitmap);
+    }
+
+    /**
+     * Use the given parameters to encode a key used in the String -> Bitmap mapping.
+     *
+     * @param url The url of the image.
+     * @param width The width (in pixels) of the image.
+     * @param height The height (in pixels) of the image.
+     * @return The key for the BitmapCache.
+     */
+    private String encodeCacheKey(String url, int width, int height) {
+        // Encoding for cache key is:
+        // <url>/<width>/<height>.
+        return url + "/" + width + "/" + height;
+    }
+
+    /**
+     * Size the cache size depending on available memory and the client's preferred cache size.
+     *
+     * @param preferredCacheSize The preferred cache size (in bytes).
+     * @return The actual size of the cache (in bytes).
+     */
+    private int determineCacheSize(int preferredCacheSize) {
+        final Runtime runtime = Runtime.getRuntime();
+        final long usedMem = runtime.totalMemory() - runtime.freeMemory();
+        final long maxHeapSize = runtime.maxMemory();
+        final long availableMemory = maxHeapSize - usedMem;
+
+        // Try to size the cache according to client's wishes. If there's not enough space, then
+        // take a portion of available memory.
+        final int maxCacheUsage = (int) (availableMemory * PORTION_OF_AVAILABLE_MEMORY);
+        return Math.min(maxCacheUsage, preferredCacheSize);
+    }
+
+    /** Test constructor. */
+    @VisibleForTesting
+    InMemoryCachedImageFetcher(BitmapCache bitmapCache, CachedImageFetcher cachedImageFetcher) {
+        mBitmapCache = bitmapCache;
+        mCachedImageFetcher = cachedImageFetcher;
+    }
+}
\ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabPanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabPanel.java
index bec43ea5..469e324 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabPanel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabPanel.java
@@ -27,7 +27,9 @@
 
 /**
  * The panel containing an ephemeral tab.
- * TODO(jinsukkim): Make panel height in peeked state bigger to show the progress indicator clearly.
+ * TODO(jinsukkim): Write tests.
+ *                  Add animation effect upon opening ephemeral tab.
+ *                  Bring back the bottom bar animation hidden behind ephemeral tab.
  */
 public class EphemeralTabPanel extends OverlayPanel {
     /** The compositor layer used for drawing the panel. */
@@ -74,12 +76,22 @@
     }
 
     @Override
+    protected float getPeekedHeight() {
+        return getBarHeightPeeking() * 1.5f;
+    }
+
+    @Override
     protected float getMaximizedHeight() {
         // Max height does not cover the entire content screen.
         return getTabHeight() * 0.9f;
     }
 
     @Override
+    public boolean isPanelOpened() {
+        return getHeight() > getPeekedHeight();
+    }
+
+    @Override
     public float getProgressBarOpacity() {
         return 1.0f;
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/MediaRouteChooserDialogManager.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/MediaRouteChooserDialogManager.java
index 25d826d..9d6f7d0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/MediaRouteChooserDialogManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/MediaRouteChooserDialogManager.java
@@ -13,11 +13,6 @@
 import android.support.v7.app.MediaRouteChooserDialog;
 import android.support.v7.app.MediaRouteChooserDialogFragment;
 import android.support.v7.media.MediaRouteSelector;
-import android.support.v7.media.MediaRouter;
-import android.support.v7.mediarouter.R;
-import android.view.View;
-import android.widget.AdapterView;
-import android.widget.ListView;
 
 /**
  * Manages the dialog responsible for selecting a {@link MediaSink}.
@@ -39,7 +34,7 @@
         private final Handler mHandler = new Handler();
         private final SystemVisibilitySaver mVisibilitySaver = new SystemVisibilitySaver();
         private BaseMediaRouteDialogManager mManager;
-        private boolean mIsSinkSelected;
+        private boolean mCancelled;
 
         public Fragment() {
             mHandler.post(new Runnable() {
@@ -57,7 +52,8 @@
         @Override
         public MediaRouteChooserDialog onCreateChooserDialog(
                 Context context, Bundle savedInstanceState) {
-            MediaRouteChooserDialog dialog = new DelayedSelectionDialog(context, getTheme());
+            MediaRouteChooserDialog dialog =
+                    super.onCreateChooserDialog(context, savedInstanceState);
             dialog.setCanceledOnTouchOutside(true);
             return dialog;
         }
@@ -75,45 +71,26 @@
         }
 
         @Override
+        public void onCancel(DialogInterface dialog) {
+            mCancelled = true;
+
+            mManager.delegate().onDialogCancelled();
+
+            super.onCancel(dialog);
+        }
+
+        @Override
         public void onDismiss(DialogInterface dialog) {
             super.onDismiss(dialog);
+            if (mManager == null) return;
 
-            if (!mIsSinkSelected) mManager.delegate().onDialogCancelled();
-        }
+            mManager.mDialogFragment = null;
 
-        private class DelayedSelectionDialog extends MediaRouteChooserDialog {
-            public DelayedSelectionDialog(Context context) {
-                super(context);
-            }
+            if (mCancelled) return;
 
-            public DelayedSelectionDialog(Context context, int theme) {
-                super(context, theme);
-            }
-
-            @Override
-            public void onCreate(Bundle savedInstanceState) {
-                super.onCreate(savedInstanceState);
-
-                ListView listView = (ListView) findViewById(R.id.mr_chooser_list);
-                if (listView != null) {
-                    listView.setOnItemClickListener(Fragment.this::onItemClick);
-                }
-            }
-        }
-
-        private void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-            MediaRouter.RouteInfo routeInfo =
-                    (MediaRouter.RouteInfo) parent.getItemAtPosition(position);
-            if (routeInfo != null && routeInfo.isEnabled()) {
-                MediaSink newSink = MediaSink.fromRoute(routeInfo);
-
-                // When a item is clicked, the route is not selected right away. Instead, the route
-                // selection is postponed to the actual session launch.
-                mManager.delegate().onSinkSelected(mManager.sourceId(), newSink);
-                mIsSinkSelected = true;
-
-                dismiss();
-            }
+            MediaSink newSink =
+                    MediaSink.fromRoute(mManager.androidMediaRouter().getSelectedRoute());
+            mManager.delegate().onSinkSelected(mManager.sourceId(), newSink);
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/BaseSessionController.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/BaseSessionController.java
index e57a99f..1250ffa8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/BaseSessionController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/caf/BaseSessionController.java
@@ -6,6 +6,7 @@
 
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
+import android.support.v7.media.MediaRouter;
 
 import com.google.android.gms.cast.CastDevice;
 import com.google.android.gms.cast.framework.CastSession;
@@ -30,6 +31,7 @@
 
     private CastSession mCastSession;
     private final CafBaseMediaRouteProvider mProvider;
+    private final MediaRouter.Callback mMediaRouterCallbackForSessionLaunch;
     private CreateRouteRequestInfo mRouteCreationInfo;
     @VisibleForTesting
     CafNotificationController mNotificationController;
@@ -37,6 +39,7 @@
 
     public BaseSessionController(CafBaseMediaRouteProvider provider) {
         mProvider = provider;
+        mMediaRouterCallbackForSessionLaunch = new MediaRouterCallbackForSessionLaunch();
         mNotificationController = new CafNotificationController(this);
         mRemoteMediaClientCallback = new RemoteMediaClientCallback();
     }
@@ -46,10 +49,21 @@
         CastUtils.getCastContext().setReceiverApplicationId(
                 mRouteCreationInfo.source.getApplicationId());
 
-        // When the user clicks a route on the MediaRouteChooserDialog, we intercept the click event
-        // and do not select the route. Instead the route selection is postponed to here. This will
-        // trigger CAF to launch the session.
-        mRouteCreationInfo.routeInfo.select();
+        if (mRouteCreationInfo.routeInfo.isSelected()) {
+            // If a route has just been selected, CAF might not be ready yet before setting the app
+            // ID. So unselect and select the route will let CAF be aware that the route has been
+            // selected thus it can start the session.
+            //
+            // An issue of this workaround is that if a route is unselected and selected in a very
+            // short time, the selection might be ignored by MediaRouter, so put the reselection in
+            // a callback.
+            mProvider.getAndroidMediaRouter().addCallback(
+                    mRouteCreationInfo.source.buildRouteSelector(),
+                    mMediaRouterCallbackForSessionLaunch);
+            mProvider.getAndroidMediaRouter().unselect(MediaRouter.UNSELECT_REASON_UNKNOWN);
+        } else {
+            mRouteCreationInfo.routeInfo.select();
+        }
     }
 
     public MediaSource getSource() {
@@ -159,6 +173,20 @@
         }
     }
 
+    private class MediaRouterCallbackForSessionLaunch extends MediaRouter.Callback {
+        @Override
+        public void onRouteUnselected(MediaRouter mediaRouter, MediaRouter.RouteInfo routeInfo) {
+            if (mProvider.getPendingCreateRouteRequestInfo() == null) return;
+
+            if (routeInfo.getId().equals(
+                        mProvider.getPendingCreateRouteRequestInfo().routeInfo.getId())) {
+                routeInfo.select();
+                mProvider.getAndroidMediaRouter().removeCallback(
+                        mMediaRouterCallbackForSessionLaunch);
+            }
+        }
+    }
+
     private class RemoteMediaClientCallback extends RemoteMediaClient.Callback {
         @Override
         public void onStatusUpdated() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/BaseMediaRouteProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/BaseMediaRouteProvider.java
index ae9aea6..cb598d90 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/BaseMediaRouteProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/BaseMediaRouteProvider.java
@@ -173,32 +173,18 @@
             return;
         }
 
-        MediaRouter.RouteInfo targetRouteInfo = null;
-        for (MediaRouter.RouteInfo routeInfo : mAndroidMediaRouter.getRoutes()) {
-            if (routeInfo.getId().equals(sinkId)) {
-                targetRouteInfo = routeInfo;
-                break;
-            }
-        }
-
-        if (targetRouteInfo == null) {
+        MediaSink sink = MediaSink.fromSinkId(sinkId, mAndroidMediaRouter);
+        if (sink == null) {
             mManager.onRouteRequestError("No sink", nativeRequestId);
             return;
         }
 
-        MediaSink sink = MediaSink.fromRoute(targetRouteInfo);
-
         MediaSource source = getSourceFromId(sourceId);
         if (source == null) {
             mManager.onRouteRequestError("Unsupported source URL", nativeRequestId);
             return;
         }
 
-        // When the user clicks a route on the MediaRouteChooserDialog, we intercept the click event
-        // and do not select the route. Instead the route selection is postponed to here. This will
-        // make sure the MediaRouteControllerDialog show up properly.
-        targetRouteInfo.select();
-
         ChromeCastSessionManager.CastSessionLaunchRequest request = createSessionLaunchRequest(
                 source, sink, presentationId, origin, tabId, isIncognito, nativeRequestId);
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/DialogManager.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/DialogManager.java
index c44dad0d..c4af4bf 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/DialogManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/DialogManager.java
@@ -93,10 +93,7 @@
         mDialogFragment.show(fragmentManager, null);
         // Initiate the barrier closure, expecting 2 runs: one automatic but delayed, and one
         // explicit, to hide the dialog.
-        // TODO(crbug.com/821377) -- remove clang-format pragmas
-        // clang-format off
         mBarrierClosure = new SingleThreadBarrierClosure(2, this::hideImmediately);
-        // clang-format on
         // This is the automatic but delayed signal.
         mDelayer.delay(mBarrierClosure);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/ExportFlow.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/ExportFlow.java
index de3bc38..6509978 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/ExportFlow.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/ExportFlow.java
@@ -420,10 +420,7 @@
             // Note: if the serialization is quicker than the user interacting with the
             // confirmation dialog, then there is no progress bar shown, in which case hide() is
             // just calling the callback synchronously.
-            // TODO(crbug.com/821377) -- remove clang-format pragmas
-            // clang-format off
             mProgressBarManager.hide(this::sendExportIntent);
-            // clang-format on
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
index cfd30d4b..1b68318f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleCategoryPreferences.java
@@ -447,18 +447,20 @@
             // This should only be used for settings that have host-pattern based exceptions.
             if (mCategory.showSites(SiteSettingsCategory.Type.AUTOPLAY)
                     || mCategory.showSites(SiteSettingsCategory.Type.BACKGROUND_SYNC)
+                    || (mCategory.showSites(SiteSettingsCategory.Type.COOKIES)
+                            && ChromeFeatureList.isEnabled(
+                                    ChromeFeatureList.ANDROID_SITE_SETTINGS_UI_REFRESH))
                     || mCategory.showSites(SiteSettingsCategory.Type.JAVASCRIPT)
                     || mCategory.showSites(SiteSettingsCategory.Type.SOUND)) {
                 if ((boolean) newValue) {
-                    Preference addException = getPreferenceScreen().findPreference(
-                            ADD_EXCEPTION_KEY);
-                    if (addException != null) {  // Can be null in testing.
+                    Preference addException =
+                            getPreferenceScreen().findPreference(ADD_EXCEPTION_KEY);
+                    if (addException != null) { // Can be null in testing.
                         getPreferenceScreen().removePreference(addException);
                     }
                 } else {
-                    getPreferenceScreen().addPreference(
-                            new AddExceptionPreference(getActivity(), ADD_EXCEPTION_KEY,
-                                    getAddExceptionDialogMessage(), this));
+                    getPreferenceScreen().addPreference(new AddExceptionPreference(getActivity(),
+                            ADD_EXCEPTION_KEY, getAddExceptionDialogMessage(), this));
                 }
             }
 
@@ -499,6 +501,11 @@
                                ContentSettingsType.CONTENT_SETTINGS_TYPE_SOUND)
                     ? R.string.website_settings_add_site_description_sound_block
                     : R.string.website_settings_add_site_description_sound_allow;
+        } else if (mCategory.showSites(SiteSettingsCategory.Type.COOKIES)) {
+            resource = PrefServiceBridge.getInstance().isCategoryEnabled(
+                               ContentSettingsType.CONTENT_SETTINGS_TYPE_COOKIES)
+                    ? R.string.website_settings_add_site_description_cookies_block
+                    : R.string.website_settings_add_site_description_cookies_allow;
         }
         assert resource > 0;
         return getResources().getString(resource);
@@ -578,6 +585,10 @@
                         || !PrefServiceBridge.getInstance().isCategoryEnabled(
                                 ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT))) {
             exception = true;
+        } else if (mCategory.showSites(SiteSettingsCategory.Type.COOKIES)
+                && ChromeFeatureList.isEnabled(
+                        ChromeFeatureList.ANDROID_SITE_SETTINGS_UI_REFRESH)) {
+            exception = true;
         } else if (mCategory.showSites(SiteSettingsCategory.Type.BACKGROUND_SYNC)
                 && !PrefServiceBridge.getInstance().isCategoryEnabled(
                         ContentSettingsType.CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC)) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java
index 3868ebf..d6e2be8b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java
@@ -231,8 +231,7 @@
             if (host.equals(other.getAddress().getHost())) {
                 for (@ContentSettingException.Type int type = 0;
                         type < ContentSettingException.Type.NUM_ENTRIES; type++) {
-                    if (type == ContentSettingException.Type.ADS
-                            || type == ContentSettingException.Type.COOKIE) {
+                    if (type == ContentSettingException.Type.ADS) {
                         continue;
                     }
                     if (merged.getContentSettingException(type) == null
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
index 8dbb584..b1b1c86 100644
--- a/chrome/android/java/strings/android_chrome_strings.grd
+++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -945,6 +945,12 @@
       <message name="IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_AUTOMATIC_DOWNLOADS" desc="The description for the allow Automatic Downloads for website dialog.">
         Allow a site to download multiple files automatically.
       </message>
+      <message name="IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_COOKIES_ALLOW" desc="The description for the allow Cookies for website dialog.">
+        Allow cookies for a specific site.
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_COOKIES_BLOCK" desc="The description for the block Cookies for website dialog.">
+       Block cookies for a specific site.
+      </message>
       <message name="IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_SOUND_ALLOW" desc="The description for the allow sound for website dialog.">
         Allow sound for a specific site.
       </message>
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
index 04084836..3614857 100644
--- a/chrome/android/java_sources.gni
+++ b/chrome/android/java_sources.gni
@@ -1385,7 +1385,9 @@
   "java/src/org/chromium/chrome/browser/printing/PrintShareActivity.java",
   "java/src/org/chromium/chrome/browser/printing/TabPrinter.java",
   "java/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcher.java",
+  "java/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherImpl.java",
   "java/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherBridge.java",
+  "java/src/org/chromium/chrome/browser/cached_image_fetcher/InMemoryCachedImageFetcher.java",
   "java/src/org/chromium/chrome/browser/profiles/Profile.java",
   "java/src/org/chromium/chrome/browser/profiles/ProfileDownloader.java",
   "java/src/org/chromium/chrome/browser/profiles/ProfileManagerUtils.java",
@@ -2320,7 +2322,8 @@
   "junit/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityClientTest.java",
   "junit/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/ClientAppDataRecorderTest.java",
   "junit/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityDisclosureControllerTest.java",
-  "junit/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherTest.java",
+  "junit/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherImplTest.java",
+  "junit/src/org/chromium/chrome/browser/cached_image_fetcher/InMemoryCachedImageFetcherTest.java",
   "junit/src/org/chromium/chrome/browser/compositor/animation/CompositorAnimatorTest.java",
   "junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java",
   "junit/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManagerImplTest.java",
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherImplTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherImplTest.java
new file mode 100644
index 0000000..42769725
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherImplTest.java
@@ -0,0 +1,125 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.cached_image_fetcher;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyObject;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import android.graphics.Bitmap;
+import android.support.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowLooper;
+
+import org.chromium.base.Callback;
+import org.chromium.base.task.test.BackgroundShadowAsyncTask;
+import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulatorTest.ShadowUrlUtilities;
+
+/**
+ * Unit tests for CachedImageFetcherImpl.
+ */
+@RunWith(BaseRobolectricTestRunner.class)
+@Config(manifest = Config.NONE,
+        shadows = {ShadowUrlUtilities.class, BackgroundShadowAsyncTask.class})
+public class CachedImageFetcherImplTest {
+    private static final String URL = "http://foo.bar";
+    private static final int WIDTH_PX = 100;
+    private static final int HEIGHT_PX = 200;
+
+    CachedImageFetcherImpl mCachedImageFetcher;
+
+    @Mock
+    CachedImageFetcherBridge mCachedImageFetcherBridge;
+    @Mock
+    Bitmap mBitmap;
+
+    @Captor
+    ArgumentCaptor<Integer> mWidthCaptor;
+    @Captor
+    ArgumentCaptor<Integer> mHeightCaptor;
+    @Captor
+    ArgumentCaptor<Callback<Bitmap>> mCallbackCaptor;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        mCachedImageFetcher = Mockito.spy(new CachedImageFetcherImpl(mCachedImageFetcherBridge));
+        Mockito.doReturn(URL).when(mCachedImageFetcherBridge).getFilePath(anyObject());
+        doAnswer((InvocationOnMock invocation) -> {
+            mCallbackCaptor.getValue().onResult(mBitmap);
+            return null;
+        })
+                .when(mCachedImageFetcherBridge)
+                .fetchImage(eq(URL), mWidthCaptor.capture(), mHeightCaptor.capture(),
+                        mCallbackCaptor.capture());
+    }
+
+    @Test
+    @SmallTest
+    public void testFetchImageWithDimensionsFoundOnDisk() throws Exception {
+        Mockito.doReturn(mBitmap).when(mCachedImageFetcher).tryToLoadImageFromDisk(anyObject());
+        mCachedImageFetcher.fetchImage(
+                URL, WIDTH_PX, HEIGHT_PX, (Bitmap bitmap) -> { assertEquals(bitmap, mBitmap); });
+        BackgroundShadowAsyncTask.runBackgroundTasks();
+        ShadowLooper.runUiThreadTasks();
+
+        verify(mCachedImageFetcher).fetchImageImpl(eq(URL), eq(WIDTH_PX), eq(HEIGHT_PX), any());
+        verify(mCachedImageFetcherBridge, never()) // Should never make it to native.
+                .fetchImage(eq(URL), anyInt(), anyInt(), any());
+    }
+
+    @Test
+    @SmallTest
+    public void testFetchImageWithDimensionsCallToNative() throws Exception {
+        Mockito.doReturn(null).when(mCachedImageFetcher).tryToLoadImageFromDisk(anyObject());
+        mCachedImageFetcher.fetchImage(
+                URL, WIDTH_PX, HEIGHT_PX, (Bitmap bitmap) -> { assertEquals(bitmap, mBitmap); });
+        BackgroundShadowAsyncTask.runBackgroundTasks();
+        ShadowLooper.runUiThreadTasks();
+
+        verify(mCachedImageFetcher).fetchImageImpl(eq(URL), eq(WIDTH_PX), eq(HEIGHT_PX), any());
+        verify(mCachedImageFetcherBridge).fetchImage(eq(URL), anyInt(), anyInt(), any());
+    }
+
+    @Test
+    @SmallTest
+    public void testFetchImageWithNoDimensionsFoundOnDisk() throws Exception {
+        Mockito.doReturn(mBitmap).when(mCachedImageFetcher).tryToLoadImageFromDisk(anyObject());
+        mCachedImageFetcher.fetchImage(URL, (Bitmap bitmap) -> { assertEquals(bitmap, mBitmap); });
+        BackgroundShadowAsyncTask.runBackgroundTasks();
+        ShadowLooper.runUiThreadTasks();
+
+        verify(mCachedImageFetcher).fetchImageImpl(eq(URL), eq(0), eq(0), any());
+        verify(mCachedImageFetcherBridge, never()).fetchImage(eq(URL), anyInt(), anyInt(), any());
+    }
+
+    @Test
+    @SmallTest
+    public void testFetchImageWithNoDimensionsCallToNative() throws Exception {
+        Mockito.doReturn(null).when(mCachedImageFetcher).tryToLoadImageFromDisk(anyObject());
+        mCachedImageFetcher.fetchImage(URL, (Bitmap bitmap) -> { assertEquals(bitmap, mBitmap); });
+        BackgroundShadowAsyncTask.runBackgroundTasks();
+        ShadowLooper.runUiThreadTasks();
+
+        verify(mCachedImageFetcher).fetchImageImpl(eq(URL), eq(0), eq(0), any());
+        verify(mCachedImageFetcherBridge).fetchImage(eq(URL), anyInt(), anyInt(), any());
+    }
+}
\ No newline at end of file
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherTest.java
deleted file mode 100644
index 932ccf6..0000000
--- a/chrome/android/junit/src/org/chromium/chrome/browser/cached_image_fetcher/CachedImageFetcherTest.java
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.cached_image_fetcher;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyObject;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.support.test.filters.SmallTest;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import org.mockito.invocation.InvocationOnMock;
-import org.robolectric.annotation.Config;
-
-import org.chromium.base.Callback;
-import org.chromium.base.task.test.CustomShadowAsyncTask;
-import org.chromium.base.test.BaseRobolectricTestRunner;
-import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulatorTest.ShadowUrlUtilities;
-
-/**
- * Unit tests for CachedImageFetcher.
- */
-@RunWith(BaseRobolectricTestRunner.class)
-@Config(manifest = Config.NONE, shadows = {ShadowUrlUtilities.class, CustomShadowAsyncTask.class})
-public class CachedImageFetcherTest {
-    private static String sDummyUrl = "foo.bar";
-
-    CachedImageFetcher mCachedImageFetcher;
-
-    @Mock
-    CachedImageFetcherBridge mCachedImageFetcherBridge;
-
-    @Mock
-    Bitmap mBitmap;
-
-    @Captor
-    ArgumentCaptor<Callback<Bitmap>> mCallbackArgument;
-
-    @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-        mCachedImageFetcher = Mockito.spy(new CachedImageFetcher(mCachedImageFetcherBridge));
-        Mockito.doReturn(sDummyUrl).when(mCachedImageFetcherBridge).getFilePath(anyObject());
-    }
-
-    private void answerCallback() {
-        Mockito.doAnswer((InvocationOnMock invocation) -> {
-                   mCallbackArgument.getValue().onResult(null);
-                   return null;
-               })
-                .when(mCachedImageFetcherBridge)
-                .fetchImage(anyObject(), anyInt(), anyInt(), mCallbackArgument.capture());
-    }
-
-    @Test
-    @SmallTest
-    public void testFetchImageWithDimensionsFoundOnDisk() {
-        answerCallback();
-        Mockito.doReturn(mBitmap)
-                .when(mCachedImageFetcher)
-                .tryToLoadImageFromDisk(anyObject(), anyObject());
-        mCachedImageFetcher.fetchImage(sDummyUrl, 100, 100,
-                (Bitmap bitmap)
-                        -> {
-                                // Do nothing.
-                        });
-        ArgumentCaptor<BitmapFactory.Options> optionsCaptor =
-                ArgumentCaptor.forClass(BitmapFactory.Options.class);
-        verify(mCachedImageFetcher).fetchImage(eq(sDummyUrl), optionsCaptor.capture(), any());
-
-        BitmapFactory.Options opts = optionsCaptor.getValue();
-        assertEquals(opts.outWidth, 100);
-        assertEquals(opts.outHeight, 100);
-
-        verify(mCachedImageFetcherBridge, never())
-                .fetchImage(eq(sDummyUrl), anyInt(), anyInt(), any());
-    }
-
-    @Test
-    @SmallTest
-    public void testFetchImageWithNoDimensionsFoundOnDisk() {
-        answerCallback();
-        Mockito.doReturn(mBitmap)
-                .when(mCachedImageFetcher)
-                .tryToLoadImageFromDisk(anyObject(), anyObject());
-        mCachedImageFetcher.fetchImage(sDummyUrl,
-                (Bitmap bitmap)
-                        -> {
-                                // Do nothing.
-                        });
-        ArgumentCaptor<BitmapFactory.Options> optionsCaptor =
-                ArgumentCaptor.forClass(BitmapFactory.Options.class);
-        verify(mCachedImageFetcher).fetchImage(eq(sDummyUrl), optionsCaptor.capture(), any());
-
-        BitmapFactory.Options opts = optionsCaptor.getValue();
-        assertEquals(opts.outWidth, 0);
-        assertEquals(opts.outHeight, 0);
-
-        verify(mCachedImageFetcherBridge, never())
-                .fetchImage(eq(sDummyUrl), anyInt(), anyInt(), any());
-    }
-
-    @Test
-    @SmallTest
-    public void testFetchImageWithNoDimensionsCallToNative() {
-        answerCallback();
-        Mockito.doReturn(null)
-                .when(mCachedImageFetcher)
-                .tryToLoadImageFromDisk(anyObject(), anyObject());
-        mCachedImageFetcher.fetchImage(sDummyUrl,
-                (Bitmap bitmap)
-                        -> {
-                                // Do nothing.
-                        });
-        ArgumentCaptor<BitmapFactory.Options> optionsCaptor =
-                ArgumentCaptor.forClass(BitmapFactory.Options.class);
-        verify(mCachedImageFetcher).fetchImage(eq(sDummyUrl), optionsCaptor.capture(), any());
-
-        BitmapFactory.Options opts = optionsCaptor.getValue();
-        assertEquals(opts.outWidth, 0);
-        assertEquals(opts.outHeight, 0);
-
-        verify(mCachedImageFetcherBridge).fetchImage(eq(sDummyUrl), anyInt(), anyInt(), any());
-    }
-}
\ No newline at end of file
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/cached_image_fetcher/InMemoryCachedImageFetcherTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/cached_image_fetcher/InMemoryCachedImageFetcherTest.java
new file mode 100644
index 0000000..6aafbba
--- /dev/null
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/cached_image_fetcher/InMemoryCachedImageFetcherTest.java
@@ -0,0 +1,95 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.cached_image_fetcher;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.graphics.Bitmap;
+import android.support.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowLooper;
+
+import org.chromium.base.Callback;
+import org.chromium.base.DiscardableReferencePool;
+import org.chromium.base.task.test.BackgroundShadowAsyncTask;
+import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.chrome.browser.BitmapCache;
+import org.chromium.chrome.browser.util.test.ShadowUrlUtilities;
+
+/**
+ * Unit tests for InMemoryCachedImageFetcher.
+ */
+@RunWith(BaseRobolectricTestRunner.class)
+@Config(manifest = Config.NONE,
+        shadows = {ShadowUrlUtilities.class, BackgroundShadowAsyncTask.class})
+public class InMemoryCachedImageFetcherTest {
+    private static final String URL = "http://foo.bar";
+    private static final int WIDTH_PX = 100;
+    private static final int HEIGHT_PX = 200;
+    private static final int DEFAULT_CACHE_SIZE = 100;
+
+    private final DiscardableReferencePool mReferencePool = new DiscardableReferencePool();
+    private final Bitmap mBitmap =
+            Bitmap.createBitmap(WIDTH_PX, HEIGHT_PX, Bitmap.Config.ARGB_8888);
+
+    private InMemoryCachedImageFetcher mInMemoryCachedImageFetcher;
+    private BitmapCache mBitmapCache;
+
+    @Mock
+    private CachedImageFetcherImpl mCachedImageFetcherImpl;
+
+    @Captor
+    private ArgumentCaptor<Integer> mWidthCaptor;
+    @Captor
+    private ArgumentCaptor<Integer> mHeightCaptor;
+    @Captor
+    private ArgumentCaptor<Callback<Bitmap>> mCallbackCaptor;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mBitmapCache = new BitmapCache(mReferencePool, DEFAULT_CACHE_SIZE);
+        mInMemoryCachedImageFetcher =
+                new InMemoryCachedImageFetcher(mBitmapCache, mCachedImageFetcherImpl);
+        // clang-format off
+        doAnswer((InvocationOnMock invocation) -> {
+            mCallbackCaptor.getValue().onResult(mBitmap);
+            return null;
+        }).when(mCachedImageFetcherImpl)
+          .fetchImage(eq(URL), mWidthCaptor.capture(), mHeightCaptor.capture(),
+                      mCallbackCaptor.capture());
+        // clang-format on
+    }
+
+    @Test
+    @SmallTest
+    public void testFetchImageCachesFirstCall() throws Exception {
+        mInMemoryCachedImageFetcher.fetchImage(
+                URL, WIDTH_PX, HEIGHT_PX, (Bitmap bitmap) -> { assertEquals(bitmap, mBitmap); });
+        BackgroundShadowAsyncTask.runBackgroundTasks();
+        ShadowLooper.runUiThreadTasks();
+        mInMemoryCachedImageFetcher.fetchImage(
+                URL, WIDTH_PX, HEIGHT_PX, (Bitmap bitmap) -> { assertEquals(bitmap, mBitmap); });
+        BackgroundShadowAsyncTask.runBackgroundTasks();
+        ShadowLooper.runUiThreadTasks();
+        verify(mCachedImageFetcherImpl, /* Should only go to native the first time. */ times(1))
+                .fetchImage(eq(URL), eq(WIDTH_PX), eq(HEIGHT_PX), any());
+    }
+}
\ No newline at end of file
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedImageLoaderTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedImageLoaderTest.java
index 57925e4..2d318f48 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedImageLoaderTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedImageLoaderTest.java
@@ -35,7 +35,7 @@
 import org.chromium.base.Callback;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.test.BaseRobolectricTestRunner;
-import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.cached_image_fetcher.CachedImageFetcher;
 import org.chromium.chrome.test.support.DisableHistogramsRule;
 
 import java.util.Arrays;
@@ -71,9 +71,9 @@
     public DisableHistogramsRule mDisableHistogramsRule = new DisableHistogramsRule();
 
     @Mock
-    private Consumer<Drawable> mConsumer;
+    CachedImageFetcher mCachedImageFetcher;
     @Mock
-    private Profile mProfile;
+    private Consumer<Drawable> mConsumer;
     @Mock
     private Bitmap mBitmap;
     @Captor
@@ -88,8 +88,8 @@
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        mImageLoader =
-                Mockito.spy(new FeedImageLoader(mProfile, ContextUtils.getApplicationContext()));
+        mImageLoader = Mockito.spy(
+                new FeedImageLoader(ContextUtils.getApplicationContext(), mCachedImageFetcher));
     }
 
     private void answerFetchImage(String url, Bitmap bitmap) {
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/media/router/caf/BaseSessionControllerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/media/router/caf/BaseSessionControllerTest.java
index b44cf9a..28d649d 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/media/router/caf/BaseSessionControllerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/media/router/caf/BaseSessionControllerTest.java
@@ -13,6 +13,7 @@
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.anyString;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
@@ -114,14 +115,51 @@
         assertNull(mController.getRouteCreationInfo());
     }
 
+    /**
+     * Test the case of requesting a session launch while the requested route is not selected. The
+     * controller should set the receiver app ID and then select the route so CAF will start the
+     * session once observed the route selection.
+     */
     @Test
-    public void testRequestSessionLaunch() {
+    public void testRequestSessionLaunch_routeNotSelected() {
         mController.requestSessionLaunch();
         verify(mCastContext).setReceiverApplicationId(APP_ID);
         verify(mMediaRouterHelper.getCastRoute()).select();
         assertSame(mRequestInfo, mController.getRouteCreationInfo());
     }
 
+    /**
+     * Test the case of requesting a session launch while the requested route is already selected.
+     * The controller should first unselect the route, set the application ID and then select the
+     * route again to notify CAF to start the session.
+     */
+    @Test
+    public void testRequestSessionLaunch_routeSelected() {
+        mMediaRouterHelper.selectRoute(mMediaRouterHelper.getCastRoute());
+
+        ArgumentCaptor<MediaRouter.Callback> callbackCaptor =
+                ArgumentCaptor.forClass(MediaRouter.Callback.class);
+
+        mController.requestSessionLaunch();
+        verify(mCastContext).setReceiverApplicationId(APP_ID);
+        verify(mMediaRouterHelper.getShadowImpl())
+                .addCallback(eq(mMediaRouteSelector), callbackCaptor.capture());
+        assertSame(mRequestInfo, mController.getRouteCreationInfo());
+        verify(mMediaRouterHelper.getShadowImpl()).unselect(MediaRouter.UNSELECT_REASON_UNKNOWN);
+
+        // Simulate another route has been unselected.
+        callbackCaptor.getValue().onRouteUnselected(
+                MediaRouter.getInstance(mContext), mMediaRouterHelper.getOtherCastRoute());
+
+        assertFalse(mMediaRouterHelper.getCastRoute().isSelected());
+
+        // Simulate the cast route has been unselected.
+        callbackCaptor.getValue().onRouteUnselected(
+                MediaRouter.getInstance(mContext), mMediaRouterHelper.getCastRoute());
+
+        assertTrue(mMediaRouterHelper.getCastRoute().isSelected());
+    }
+
     @Test
     public void testEndSession() {
         mController.endSession();
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp
index 52957246..c626693 100644
--- a/chrome/app/chromeos_strings.grdp
+++ b/chrome/app/chromeos_strings.grdp
@@ -816,8 +816,11 @@
   <message name="IDS_DISCOVER_PIN_SETUP_TITLE3" desc="A title of the dialog that finishes 'PIN-unlock' setup process suggesting that it was successful.">
     Your PIN is added
   </message>
-  <message name="IDS_DISCOVER_PIN_SETUP_SUBTITLE3" desc="A sub-title of the dialog that finishes 'PIN-unlock' setup process successfully suggesting how user can use the PIN that they have just set up.">
-    You can use PIN to unlock your device when you signed out.
+  <message name="IDS_DISCOVER_PIN_SETUP_SUBTITLE3_NO_LOGIN" desc="A sub-title of the dialog that finishes 'PIN-unlock' setup process successfully suggesting how user can use the PIN that they have just set up.">
+    You can use your PIN to unlock your device.
+  </message>
+  <message name="IDS_DISCOVER_PIN_SETUP_SUBTITLE3_WITH_LOGIN" desc="A sub-title of the dialog that finishes 'PIN-unlock' setup process successfully suggesting how user can use the PIN that they have just set up.">
+    You can use your PIN to sign in to or unlock your device.
   </message>
   <message name="IDS_DISCOVER_PIN_SETUP" desc="A label on the button that leads to Pin Unlock feature set up.">
     Pin setup
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 350800d..a96bc15 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -6262,6 +6262,14 @@
         This account is managed by <ph name="DOMAIN">$1<ex>example.com</ex></ph>
       </message>
 
+      <!-- Clear profile dialog-->
+      <message name="IDS_PROFILE_WILL_BE_DELETED_DIALOG_TITLE" desc="The title of the dialog shown when the user is syncing with an enterprise account and when this account is no longer allowed as the primary account.">
+        Profile will be deleted
+      </message>
+      <message name="IDS_PROFILE_WILL_BE_DELETED_DIALOG_DESCRIPTION" desc="The description of the dialog shown when the user closes a browser and force sign in is enabled and local auth info is not valid.">
+        Your account <ph name="EMAIL">$1<ex>john.doe@example.com</ex></ph> is no longer allowed as the primary account. Because this account is managed by <ph name="DOMAIN">$2<ex>example.com</ex></ph>, your bookmarks, history, passwords, and other settings will be cleared from this device.
+      </message>
+
       <!-- Cookies Window -->
       <message name="IDS_COOKIES_REMOVE_LABEL" desc="The label of the 'Remove' button in the Cookies Window">
         Remove
@@ -6650,36 +6658,6 @@
       <message name="IDS_SYNC_CONFIRMATION_UNITY_TITLE" desc="Title of the sync confirmation dialog in the tab modal signin flow when Unity is enabled">
         Get Google smarts in Chrome
       </message>
-      <message name="IDS_SYNC_CONFIRMATION_UNITY_CONSENT_BUMP_TITLE" desc="Title of the sync consent bump in the tab modal signin flow when Unity is enabled">
-        Get more Google smarts
-      </message>
-      <message name="IDS_SYNC_CONFIRMATION_UNITY_MORE_OPTIONS_BUTTON_LABEL" desc="Label of the sync confirmation button to show more options">
-        More options
-      </message>
-      <message name="IDS_SYNC_CONFIRMATION_UNITY_MORE_OPTIONS_TITLE" desc="Title of the sync confirmation more options dialog">
-        Control sync, personalization, and more
-      </message>
-      <message name="IDS_SYNC_CONFIRMATION_UNITY_MORE_OPTIONS_SUBTITLE" desc="Subitle of the sync confirmation more options dialog">
-        The settings that control sync, personalization, and other Google services in Chrome have changed. This may affect your current settings.
-      </message>
-      <message name="IDS_SYNC_CONFIRMATION_UNITY_OPTIONS_REVIEW_SETTINGS_TITLE" desc="Title of the sync confirmation option to review settings">
-        Review your settings on the next screen
-      </message>
-      <message name="IDS_SYNC_CONFIRMATION_UNITY_OPTIONS_MAKE_NO_CHANGES_TITLE" desc="Title of the sync confirmation option to make no changes">
-        Make no changes
-      </message>
-      <message name="IDS_SYNC_CONFIRMATION_UNITY_OPTIONS_MAKE_NO_CHANGES_SUBTITLE" desc="Subtitle of the sync confirmation option to make no changes">
-        The data you sync to Google and the features you use will not change
-      </message>
-      <message name="IDS_SYNC_CONFIRMATION_UNITY_OPTIONS_USE_DEFAULT_TITLE" desc="Title of the sync confirmation option to use the default settings">
-        Turn on sync, personalization, and other Google services
-      </message>
-      <message name="IDS_SYNC_CONFIRMATION_UNITY_OPTIONS_USE_DEFAULT_SUBTITLE" desc="Subtitle of the sync confirmation option to use the default settings">
-        You can customize this anytime in Chrome Settings
-      </message>
-      <message name="IDS_SYNC_CONFIRMATION_UNITY_OPTIONS_BACK_BUTTON_LABEL" desc="Label of the sync confirmation options button to go to the previous screen">
-        Back
-      </message>
 
       <!-- "Chrome sync" is the Google Cloud Based service used for sync. Thus this string resource is set to "Chrome sync" even for Chromium builds. -->
       <message name="IDS_SYNC_CONFIRMATION_CHROME_SYNC_TITLE" desc="Title of the chrome sync section of the sync confirmation dialog in the tab modal signin flow" formatter_data="android_java">
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 28f5780..3413ea5 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -2593,6 +2593,8 @@
     sources += [
       "accessibility/invert_bubble_prefs.cc",
       "accessibility/invert_bubble_prefs.h",
+      "apps/app_service/app_icon_factory.cc",
+      "apps/app_service/app_icon_factory.h",
       "apps/app_service/app_service_proxy.cc",
       "apps/app_service/app_service_proxy.h",
       "apps/app_service/app_service_proxy_factory.cc",
@@ -3511,6 +3513,7 @@
       "policy/cloud/machine_level_user_cloud_policy_helper.h",
       "policy/cloud/user_policy_signin_service.cc",
       "policy/cloud/user_policy_signin_service.h",
+      "policy/cloud/user_policy_signin_service_internal.h",
       "policy/machine_level_user_cloud_policy_controller.cc",
       "policy/machine_level_user_cloud_policy_controller.h",
       "policy/machine_level_user_cloud_policy_register_watcher.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index ed42766..245c03e 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -4379,9 +4379,9 @@
     {"enable-ephemeral-tab", flag_descriptions::kEphemeralTabName,
      flag_descriptions::kEphemeralTabDescription, kOsAndroid,
      FEATURE_VALUE_TYPE(chrome::android::kEphemeralTab)},
-#endif  // defined(OS_ANDROID)
-
-#if defined(OS_ANDROID)
+    {"enable-gesture-navigation", flag_descriptions::kGestureNavigationName,
+     flag_descriptions::kGestureNavigationDescription, kOsAndroid,
+     FEATURE_VALUE_TYPE(chrome::android::kGestureNavigation)},
     {"safe-browsing-use-local-blacklists-v2",
      flag_descriptions::kSafeBrowsingUseLocalBlacklistsV2Name,
      flag_descriptions::kSafeBrowsingUseLocalBlacklistsV2Description,
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
index 25c32472..219dc2b8 100644
--- a/chrome/browser/android/chrome_feature_list.cc
+++ b/chrome/browser/android/chrome_feature_list.cc
@@ -113,6 +113,7 @@
     &kEphemeralTab,
     &kExploreSites,
     &kFullscreenActivity,
+    &kGestureNavigation,
     &kHandleMediaIntents,
     &kHideUserDataFromIncognitoNotifications,
     &kHomePageButtonForceEnabled,
@@ -313,6 +314,9 @@
 const base::Feature kFullscreenActivity{"FullscreenActivity",
                                         base::FEATURE_DISABLED_BY_DEFAULT};
 
+const base::Feature kGestureNavigation{"GestureNavigation",
+                                       base::FEATURE_DISABLED_BY_DEFAULT};
+
 const base::Feature kHandleMediaIntents{"HandleMediaIntents",
                                         base::FEATURE_ENABLED_BY_DEFAULT};
 
diff --git a/chrome/browser/android/chrome_feature_list.h b/chrome/browser/android/chrome_feature_list.h
index 4461b713..1db96d6 100644
--- a/chrome/browser/android/chrome_feature_list.h
+++ b/chrome/browser/android/chrome_feature_list.h
@@ -52,6 +52,7 @@
 extern const base::Feature kEphemeralTab;
 extern const base::Feature kExploreSites;
 extern const base::Feature kFullscreenActivity;
+extern const base::Feature kGestureNavigation;
 extern const base::Feature kHandleMediaIntents;
 extern const base::Feature kHideUserDataFromIncognitoNotifications;
 extern const base::Feature kHomePageButtonForceEnabled;
diff --git a/chrome/browser/apps/app_service/app_icon_factory.cc b/chrome/browser/apps/app_service/app_icon_factory.cc
new file mode 100644
index 0000000..770e98e
--- /dev/null
+++ b/chrome/browser/apps/app_service/app_icon_factory.cc
@@ -0,0 +1,153 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/apps/app_service/app_icon_factory.h"
+
+#include <cmath>
+#include <utility>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/files/file_util.h"
+#include "base/numerics/safe_conversions.h"
+#include "base/task/post_task.h"
+#include "base/task/task_traits.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "extensions/browser/extension_system.h"
+#include "extensions/browser/image_loader.h"
+#include "extensions/common/manifest_handlers/icons_handler.h"
+#include "skia/ext/image_operations.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/display/display.h"
+#include "ui/display/screen.h"
+#include "ui/gfx/image/image.h"
+#include "ui/gfx/image/image_skia.h"
+#include "ui/gfx/image/image_skia_operations.h"
+
+namespace {
+
+float GetDeviceScaleFactor() {
+  display::Screen* screen = display::Screen::GetScreen();
+  if (!screen) {
+    return 1.0f;
+  }
+  return screen->GetPrimaryDisplay().device_scale_factor();
+}
+
+int ConvertDipToPx(int dip) {
+  return base::saturated_cast<int>(
+      std::floor(static_cast<float>(dip) * GetDeviceScaleFactor()));
+}
+
+std::string ReadExtensionResource(extensions::ExtensionResource ext_resource) {
+  std::string data;
+  base::ReadFileToString(ext_resource.GetFilePath(), &data);
+  return data;
+}
+
+// Runs |callback| passing an IconValuePtr with a compressed image.
+void RunCallbackWithCompressedImage(apps::LoadIconRepeatingCallback callback,
+                                    std::string data) {
+  apps::mojom::IconValuePtr iv = apps::mojom::IconValue::New();
+  iv->icon_compression = data.empty()
+                             ? apps::mojom::IconCompression::kUnknown
+                             : apps::mojom::IconCompression::kCompressed;
+  iv->compressed = std::vector<uint8_t>(data.begin(), data.end());
+  callback.Run(std::move(iv));
+}
+
+// Runs |callback| passing an IconValuePtr with an uncompressed image.
+void RunCallbackWithUncompressedImage(apps::LoadIconRepeatingCallback callback,
+                                      const gfx::Image& image) {
+  apps::mojom::IconValuePtr iv = apps::mojom::IconValue::New();
+  iv->icon_compression = apps::mojom::IconCompression::kUncompressed;
+  iv->uncompressed = image.AsImageSkia();
+  callback.Run(std::move(iv));
+}
+
+}  // namespace
+
+namespace apps {
+
+void LoadIconFromExtension(apps::mojom::IconCompression icon_compression,
+                           int size_hint_in_dip,
+                           LoadIconRepeatingCallback callback,
+                           content::BrowserContext* context,
+                           const std::string& extension_id) {
+  int size_hint_in_px = ConvertDipToPx(size_hint_in_dip);
+
+  const extensions::Extension* extension =
+      extensions::ExtensionSystem::Get(context)
+          ->extension_service()
+          ->GetInstalledExtension(extension_id);
+  if (extension) {
+    extensions::ExtensionResource ext_resource =
+        extensions::IconsInfo::GetIconResource(extension, size_hint_in_px,
+                                               ExtensionIconSet::MATCH_BIGGER);
+
+    switch (icon_compression) {
+      case apps::mojom::IconCompression::kUnknown:
+        break;
+
+      case apps::mojom::IconCompression::kUncompressed:
+        extensions::ImageLoader::Get(context)->LoadImageAsync(
+            extension, std::move(ext_resource),
+            gfx::Size(size_hint_in_px, size_hint_in_px),
+            base::BindRepeating(&RunCallbackWithUncompressedImage, callback));
+        return;
+
+      case apps::mojom::IconCompression::kCompressed:
+        base::PostTaskWithTraitsAndReplyWithResult(
+            FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
+            base::BindOnce(&ReadExtensionResource, std::move(ext_resource)),
+            base::BindOnce(&RunCallbackWithCompressedImage, callback));
+        return;
+    }
+  }
+
+  std::move(callback).Run(apps::mojom::IconValue::New());
+}
+
+void LoadIconFromResource(apps::mojom::IconCompression icon_compression,
+                          int size_hint_in_dip,
+                          apps::mojom::Publisher::LoadIconCallback callback,
+                          int resource_id) {
+  if (resource_id != 0) {
+    switch (icon_compression) {
+      case apps::mojom::IconCompression::kUnknown:
+        break;
+
+      case apps::mojom::IconCompression::kUncompressed: {
+        gfx::ImageSkia* unscaled =
+            ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
+                resource_id);
+
+        apps::mojom::IconValuePtr iv = apps::mojom::IconValue::New();
+        iv->icon_compression = apps::mojom::IconCompression::kUncompressed;
+        iv->uncompressed = gfx::ImageSkiaOperations::CreateResizedImage(
+            *unscaled, skia::ImageOperations::RESIZE_BEST,
+            gfx::Size(size_hint_in_dip, size_hint_in_dip));
+        std::move(callback).Run(std::move(iv));
+        return;
+      }
+
+      case apps::mojom::IconCompression::kCompressed: {
+        base::StringPiece data =
+            ui::ResourceBundle::GetSharedInstance().GetRawDataResource(
+                resource_id);
+
+        apps::mojom::IconValuePtr iv = apps::mojom::IconValue::New();
+        iv->icon_compression = apps::mojom::IconCompression::kCompressed;
+        iv->compressed = std::vector<uint8_t>(data.begin(), data.end());
+        std::move(callback).Run(std::move(iv));
+        return;
+      }
+    }
+  }
+
+  std::move(callback).Run(apps::mojom::IconValue::New());
+}
+
+}  // namespace apps
diff --git a/chrome/browser/apps/app_service/app_icon_factory.h b/chrome/browser/apps/app_service/app_icon_factory.h
new file mode 100644
index 0000000..1cb213a6d
--- /dev/null
+++ b/chrome/browser/apps/app_service/app_icon_factory.h
@@ -0,0 +1,46 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_APPS_APP_SERVICE_APP_ICON_FACTORY_H_
+#define CHROME_BROWSER_APPS_APP_SERVICE_APP_ICON_FACTORY_H_
+
+#include <string>
+
+#include "base/callback_forward.h"
+#include "chrome/services/app_service/public/mojom/app_service.mojom.h"
+#include "chrome/services/app_service/public/mojom/types.mojom.h"
+#include "ui/gfx/image/image_skia.h"
+
+namespace content {
+class BrowserContext;
+}
+
+namespace apps {
+
+// TODO: delete this. See below.
+using LoadIconRepeatingCallback =
+    base::RepeatingCallback<void(apps::mojom::IconValuePtr icon_value)>;
+
+void LoadIconFromExtension(
+    apps::mojom::IconCompression icon_compression,
+    int size_hint_in_dip,
+    // TODO: the next line should be:
+    //
+    // apps::mojom::Publisher::LoadIconCallback callback,
+    //
+    // In other words, we should drop the "Repeating". This will require fixing
+    // extensions::ImageLoader to take a base::OnceCallback instead of an
+    // (implicitly repeating) base::Callback.
+    LoadIconRepeatingCallback callback,
+    content::BrowserContext* context,
+    const std::string& extension_id);
+
+void LoadIconFromResource(apps::mojom::IconCompression icon_compression,
+                          int size_hint_in_dip,
+                          apps::mojom::Publisher::LoadIconCallback callback,
+                          int resource_id);
+
+}  // namespace apps
+
+#endif  // CHROME_BROWSER_APPS_APP_SERVICE_APP_ICON_FACTORY_H_
diff --git a/chrome/browser/apps/app_service/app_service_proxy.cc b/chrome/browser/apps/app_service/app_service_proxy.cc
index 6703e5e..a13297d 100644
--- a/chrome/browser/apps/app_service/app_service_proxy.cc
+++ b/chrome/browser/apps/app_service/app_service_proxy.cc
@@ -34,7 +34,7 @@
   // The AppServiceProxy is also a publisher, of built-in apps. That
   // responsibility isn't intrinsically part of the AppServiceProxy, but doing
   // that here is as good a place as any.
-  built_in_chrome_os_apps_.Register(app_service_);
+  built_in_chrome_os_apps_.Initialize(app_service_, profile);
 #endif  // OS_CHROMEOS
 }
 
@@ -44,6 +44,30 @@
   return cache_;
 }
 
+void AppServiceProxy::LoadIcon(
+    const std::string& app_id,
+    apps::mojom::IconCompression icon_compression,
+    int32_t size_hint_in_dip,
+    apps::mojom::Publisher::LoadIconCallback callback) {
+  bool found = false;
+  cache_.ForOneApp(app_id, [this, &icon_compression, &size_hint_in_dip,
+                            &callback, &found](const apps::AppUpdate& update) {
+    apps::mojom::IconKeyPtr icon_key = update.IconKey();
+    if (icon_key.is_null()) {
+      return;
+    }
+    found = true;
+    app_service_->LoadIcon(update.AppType(), update.AppId(),
+                           std::move(icon_key), icon_compression,
+                           size_hint_in_dip, std::move(callback));
+  });
+
+  if (!found) {
+    // On failure, we still run the callback, with the zero IconValue.
+    std::move(callback).Run(apps::mojom::IconValue::New());
+  }
+}
+
 void AppServiceProxy::OnApps(std::vector<apps::mojom::AppPtr> deltas) {
   cache_.OnApps(std::move(deltas));
 }
diff --git a/chrome/browser/apps/app_service/app_service_proxy.h b/chrome/browser/apps/app_service/app_service_proxy.h
index df00bca..5caf957d 100644
--- a/chrome/browser/apps/app_service/app_service_proxy.h
+++ b/chrome/browser/apps/app_service/app_service_proxy.h
@@ -8,6 +8,7 @@
 #include "base/macros.h"
 #include "chrome/services/app_service/public/cpp/app_registry_cache.h"
 #include "chrome/services/app_service/public/mojom/app_service.mojom.h"
+#include "chrome/services/app_service/public/mojom/types.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 
@@ -35,6 +36,11 @@
 
   AppRegistryCache& Cache();
 
+  void LoadIcon(const std::string& app_id,
+                apps::mojom::IconCompression icon_compression,
+                int32_t size_hint_in_dip,
+                apps::mojom::Publisher::LoadIconCallback callback);
+
  private:
   // apps::mojom::Subscriber overrides.
   void OnApps(std::vector<apps::mojom::AppPtr> deltas) override;
diff --git a/chrome/browser/apps/app_service/built_in_chromeos_apps.cc b/chrome/browser/apps/app_service/built_in_chromeos_apps.cc
index 9659725..3937ba48 100644
--- a/chrome/browser/apps/app_service/built_in_chromeos_apps.cc
+++ b/chrome/browser/apps/app_service/built_in_chromeos_apps.cc
@@ -7,33 +7,68 @@
 #include <utility>
 #include <vector>
 
+#include "chrome/browser/apps/app_service/app_icon_factory.h"
+#include "chrome/browser/profiles/profile.h"
+// TODO(crbug.com/826982): move source of truth for built-in apps out of
+// ui/app_list when the AppService feature is enabled by default.
+#include "chrome/browser/ui/app_list/internal_app/internal_app_metadata.h"
+#include "chrome/services/app_service/public/mojom/types.mojom.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace {
+
+apps::mojom::AppPtr Convert(const app_list::InternalApp& internal_app) {
+  if ((internal_app.app_id == nullptr) ||
+      (internal_app.name_string_resource_id == 0) ||
+      (internal_app.icon_resource_id <= 0)) {
+    return apps::mojom::AppPtr();
+  }
+  apps::mojom::AppPtr app = apps::mojom::App::New();
+  app->app_type = apps::mojom::AppType::kBuiltIn;
+  app->app_id = internal_app.app_id;
+  app->readiness = apps::mojom::Readiness::kReady;
+  app->name = l10n_util::GetStringUTF8(internal_app.name_string_resource_id);
+  app->icon_key = apps::mojom::IconKey::New();
+  app->icon_key->icon_type = apps::mojom::IconType::kResource;
+  app->icon_key->u_key = static_cast<uint64_t>(internal_app.icon_resource_id);
+  app->show_in_launcher = internal_app.show_in_launcher
+                              ? apps::mojom::OptionalBool::kTrue
+                              : apps::mojom::OptionalBool::kFalse;
+  return app;
+}
+
+}  // namespace
 
 namespace apps {
 
-BuiltInChromeOsApps::BuiltInChromeOsApps() : binding_(this) {}
+BuiltInChromeOsApps::BuiltInChromeOsApps()
+    : binding_(this), profile_(nullptr) {}
 
 BuiltInChromeOsApps::~BuiltInChromeOsApps() = default;
 
-void BuiltInChromeOsApps::Register(apps::mojom::AppServicePtr& app_service) {
+void BuiltInChromeOsApps::Initialize(
+    const apps::mojom::AppServicePtr& app_service,
+    Profile* profile) {
   apps::mojom::PublisherPtr publisher;
   binding_.Bind(mojo::MakeRequest(&publisher));
   app_service->RegisterPublisher(std::move(publisher),
                                  apps::mojom::AppType::kBuiltIn);
+
+  profile_ = profile;
 }
 
 void BuiltInChromeOsApps::Connect(apps::mojom::SubscriberPtr subscriber,
                                   apps::mojom::ConnectOptionsPtr opts) {
   std::vector<apps::mojom::AppPtr> apps;
-
-  // TODO: replace the placeholder app with real ones.
-  //
-  // See also "TODO: process real apps..." in app_service_proxy.h.
-  auto app = apps::mojom::App::New();
-  app->app_type = apps::mojom::AppType::kBuiltIn;
-  app->app_id = "placeholder";
-  apps.push_back(std::move(app));
-
+  if (profile_) {
+    for (const auto& internal_app : app_list::GetInternalAppList(profile_)) {
+      apps::mojom::AppPtr app = Convert(internal_app);
+      if (!app.is_null()) {
+        apps.push_back(std::move(app));
+      }
+    }
+  }
   subscriber->OnApps(std::move(apps));
 
   // Unlike other apps::mojom::Publisher implementations, we don't need to
@@ -43,4 +78,22 @@
   // lifetime of the Chrome OS session. There won't be any further updates.
 }
 
+void BuiltInChromeOsApps::LoadIcon(
+    const std::string& app_id,
+    apps::mojom::IconKeyPtr icon_key,
+    apps::mojom::IconCompression icon_compression,
+    int32_t size_hint_in_dip,
+    LoadIconCallback callback) {
+  if (!icon_key.is_null() &&
+      (icon_key->icon_type == apps::mojom::IconType::kResource) &&
+      (icon_key->u_key != 0) && (icon_key->u_key <= INT_MAX)) {
+    int resource_id = static_cast<int>(icon_key->u_key);
+    LoadIconFromResource(icon_compression, size_hint_in_dip,
+                         std::move(callback), resource_id);
+    return;
+  }
+  // On failure, we still run the callback, with the zero IconValue.
+  std::move(callback).Run(apps::mojom::IconValue::New());
+}
+
 }  // namespace apps
diff --git a/chrome/browser/apps/app_service/built_in_chromeos_apps.h b/chrome/browser/apps/app_service/built_in_chromeos_apps.h
index dc2f040..e848455 100644
--- a/chrome/browser/apps/app_service/built_in_chromeos_apps.h
+++ b/chrome/browser/apps/app_service/built_in_chromeos_apps.h
@@ -9,6 +9,8 @@
 #include "chrome/services/app_service/public/mojom/app_service.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
+class Profile;
+
 namespace apps {
 
 // An app publisher (in the App Service sense) of built-in Chrome OS apps.
@@ -19,14 +21,21 @@
   BuiltInChromeOsApps();
   ~BuiltInChromeOsApps() override;
 
-  void Register(apps::mojom::AppServicePtr& app_service);
+  void Initialize(const apps::mojom::AppServicePtr& app_service,
+                  Profile* profile);
 
  private:
   // apps::mojom::Publisher overrides.
   void Connect(apps::mojom::SubscriberPtr subscriber,
                apps::mojom::ConnectOptionsPtr opts) override;
+  void LoadIcon(const std::string& app_id,
+                apps::mojom::IconKeyPtr icon_key,
+                apps::mojom::IconCompression icon_compression,
+                int32_t size_hint_in_dip,
+                LoadIconCallback callback) override;
 
   mojo::Binding<apps::mojom::Publisher> binding_;
+  Profile* profile_;
 
   DISALLOW_COPY_AND_ASSIGN(BuiltInChromeOsApps);
 };
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index b0ce3e2..71c8fb7 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -1411,6 +1411,8 @@
     "note_taking_helper.h",
     "oauth2_token_service_delegate.cc",
     "oauth2_token_service_delegate.h",
+    "ownership/fake_owner_settings_service.cc",
+    "ownership/fake_owner_settings_service.h",
     "ownership/owner_settings_service_chromeos.cc",
     "ownership/owner_settings_service_chromeos.h",
     "ownership/owner_settings_service_chromeos_factory.cc",
@@ -2263,8 +2265,6 @@
     "night_light/night_light_client_unittest.cc",
     "note_taking_helper_unittest.cc",
     "oauth2_token_service_delegate_unittest.cc",
-    "ownership/fake_owner_settings_service.cc",
-    "ownership/fake_owner_settings_service.h",
     "ownership/owner_settings_service_chromeos_unittest.cc",
     "policy/active_directory_policy_manager_unittest.cc",
     "policy/affiliated_cloud_policy_invalidator_unittest.cc",
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc
index b1b3d38b..b6267431 100644
--- a/chrome/browser/chromeos/login/session/user_session_manager.cc
+++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -1448,7 +1448,7 @@
   BootTimesRecorder::Get()->AddLoginTimeMarker("TPMOwn-Start", false);
 
   if (!tpm_util::TpmIsEnabled() || tpm_util::TpmIsBeingOwned()) {
-    ClearSigninProfileAndFinalizePrepareProfile(profile);
+    FinalizePrepareProfile(profile);
     return;
   }
 
@@ -1475,13 +1475,7 @@
 void UserSessionManager::OnCryptohomeOperationCompleted(Profile* profile,
                                                         bool result) {
   DCHECK(result);
-  ClearSigninProfileAndFinalizePrepareProfile(profile);
-}
-
-void UserSessionManager::ClearSigninProfileAndFinalizePrepareProfile(
-    Profile* profile) {
-  ProfileHelper::Get()->ClearSigninProfile(base::BindRepeating(
-      &UserSessionManager::FinalizePrepareProfile, AsWeakPtr(), profile));
+  FinalizePrepareProfile(profile);
 }
 
 void UserSessionManager::FinalizePrepareProfile(Profile* profile) {
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.h b/chrome/browser/chromeos/login/session/user_session_manager.h
index de89481..2e8e3d29 100644
--- a/chrome/browser/chromeos/login/session/user_session_manager.h
+++ b/chrome/browser/chromeos/login/session/user_session_manager.h
@@ -389,9 +389,6 @@
   // Called on UI thread once Cryptohome operation completes.
   void OnCryptohomeOperationCompleted(Profile* profile, bool result);
 
-  // Clears the sign-in profile, and initiates the user profile finalization.
-  void ClearSigninProfileAndFinalizePrepareProfile(Profile* profile);
-
   // Finalized profile preparation.
   void FinalizePrepareProfile(Profile* profile);
 
diff --git a/chrome/browser/chromeos/ownership/fake_owner_settings_service.cc b/chrome/browser/chromeos/ownership/fake_owner_settings_service.cc
index 3efe4b3..7301e3fb 100644
--- a/chrome/browser/chromeos/ownership/fake_owner_settings_service.cc
+++ b/chrome/browser/chromeos/ownership/fake_owner_settings_service.cc
@@ -6,6 +6,7 @@
 
 #include "base/logging.h"
 #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
+#include "chromeos/settings/install_attributes.h"
 #include "components/ownership/mock_owner_key_util.h"
 
 namespace chromeos {
@@ -29,6 +30,11 @@
 FakeOwnerSettingsService::~FakeOwnerSettingsService() {
 }
 
+bool FakeOwnerSettingsService::IsOwner() {
+  return !InstallAttributes::Get()->IsEnterpriseManaged() &&
+         settings_provider_->current_user_is_owner();
+}
+
 bool FakeOwnerSettingsService::Set(const std::string& setting,
                                    const base::Value& value) {
   CHECK(settings_provider_);
diff --git a/chrome/browser/chromeos/ownership/fake_owner_settings_service.h b/chrome/browser/chromeos/ownership/fake_owner_settings_service.h
index 28f6a24..7f952b8 100644
--- a/chrome/browser/chromeos/ownership/fake_owner_settings_service.h
+++ b/chrome/browser/chromeos/ownership/fake_owner_settings_service.h
@@ -41,6 +41,7 @@
   }
 
   // OwnerSettingsServiceChromeOS:
+  bool IsOwner() override;
   bool Set(const std::string& setting, const base::Value& value) override;
 
   // NotificationObserver:
diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
index 617654e..3d98212 100644
--- a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
+++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
@@ -289,10 +289,6 @@
 }
 
 bool OwnerSettingsServiceChromeOS::HandlesSetting(const std::string& setting) {
-  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kStubCrosSettings)) {
-    return false;
-  }
   return DeviceSettingsProvider::IsDeviceSetting(setting);
 }
 
diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.cc b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.cc
index 1f4cb23e..3a49054 100644
--- a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.cc
+++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.cc
@@ -5,11 +5,14 @@
 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.h"
 
 #include "base/path_service.h"
+#include "chrome/browser/chromeos/ownership/fake_owner_settings_service.h"
 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/chromeos/settings/cros_settings.h"
 #include "chrome/browser/chromeos/settings/device_settings_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chromeos/chromeos_paths.h"
+#include "chromeos/chromeos_switches.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/ownership/owner_key_util.h"
 #include "components/ownership/owner_key_util_impl.h"
@@ -82,6 +85,17 @@
       ProfileHelper::IsLockScreenAppProfile(profile)) {
     return nullptr;
   }
+
+  // If kStubCrosSettings is set, we treat the current user as the owner, and
+  // write settings directly to the stubbed provider in CrosSettings.
+  // This is done using the FakeOwnerSettingsService.
+  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kStubCrosSettings)) {
+    return new FakeOwnerSettingsService(
+        profile, GetInstance()->GetOwnerKeyUtil(),
+        CrosSettings::Get()->stubbed_provider_for_test());
+  }
+
   return new OwnerSettingsServiceChromeOS(
       GetDeviceSettingsService(),
       profile,
diff --git a/chrome/browser/chromeos/profiles/profile_helper.cc b/chrome/browser/chromeos/profiles/profile_helper.cc
index e74d0a2..b5588626 100644
--- a/chrome/browser/chromeos/profiles/profile_helper.cc
+++ b/chrome/browser/chromeos/profiles/profile_helper.cc
@@ -20,7 +20,6 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/profiles/profiles_state.h"
-#include "chrome/browser/ui/browser_list.h"
 #include "chrome/common/chrome_constants.h"
 #include "chrome/common/chrome_switches.h"
 #include "chromeos/chromeos_constants.h"
@@ -53,11 +52,6 @@
       user_id_hash != chrome::kTestUserProfileDir;
 }
 
-void WrapAsBrowsersCloseCallback(const base::RepeatingClosure& callback,
-                                 const base::FilePath& path) {
-  callback.Run();
-}
-
 class UsernameHashMatcher {
  public:
   explicit UsernameHashMatcher(const std::string& h) : username_hash(h) {}
@@ -292,7 +286,7 @@
     return;
   }
   on_clear_profile_stage_finished_ =
-      base::BarrierClosure(3, base::Bind(&ProfileHelper::OnSigninProfileCleared,
+      base::BarrierClosure(2, base::Bind(&ProfileHelper::OnSigninProfileCleared,
                                          weak_factory_.GetWeakPtr()));
   LOG_ASSERT(!browsing_data_remover_);
   browsing_data_remover_ =
@@ -308,16 +302,6 @@
   login::SigninPartitionManager::Factory::GetForBrowserContext(
       GetSigninProfile())
       ->CloseCurrentSigninSession(on_clear_profile_stage_finished_);
-
-  BrowserList::CloseAllBrowsersWithProfile(
-      GetSigninProfile(),
-      base::BindRepeating(
-          &WrapAsBrowsersCloseCallback,
-          on_clear_profile_stage_finished_) /* on_close_success */,
-      base::BindRepeating(
-          &WrapAsBrowsersCloseCallback,
-          on_clear_profile_stage_finished_) /* on_close_aborted */,
-      true /* skip_beforeunload */);
 }
 
 Profile* ProfileHelper::GetProfileByAccountId(const AccountId& account_id) {
diff --git a/chrome/browser/chromeos/settings/stub_cros_settings_provider.h b/chrome/browser/chromeos/settings/stub_cros_settings_provider.h
index 86cb4c5..4a05dcc 100644
--- a/chrome/browser/chromeos/settings/stub_cros_settings_provider.h
+++ b/chrome/browser/chromeos/settings/stub_cros_settings_provider.h
@@ -30,6 +30,8 @@
   void SetTrustedStatus(TrustedStatus status);
   void SetCurrentUserIsOwner(bool owner);
 
+  bool current_user_is_owner() const { return current_user_is_owner_; }
+
  private:
   // CrosSettingsProvider implementation:
   void DoSet(const std::string& path, const base::Value& value) override;
diff --git a/chrome/browser/extensions/api/resources_private/resources_private_api.cc b/chrome/browser/extensions/api/resources_private/resources_private_api.cc
index c12663d..20443bf 100644
--- a/chrome/browser/extensions/api/resources_private/resources_private_api.cc
+++ b/chrome/browser/extensions/api/resources_private/resources_private_api.cc
@@ -64,6 +64,9 @@
   dict->SetKey("pdfFormSaveEnabled",
                base::Value(base::FeatureList::IsEnabled(
                    chrome_pdf::features::kSaveEditedPDFForm)));
+  dict->SetKey("pdfAnnotationsEnabled",
+               base::Value(base::FeatureList::IsEnabled(
+                   chrome_pdf::features::kPDFAnnotations)));
 #endif
 }
 
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc
index 3bac53f..6eccd7ff 100644
--- a/chrome/browser/extensions/api/settings_private/prefs_util.cc
+++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -804,20 +804,12 @@
       chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(
           profile_);
 
-  // Check if setting requires owner.
-  if (service && service->HandlesSetting(pref_name)) {
-    if (service->Set(pref_name, *value))
-      return settings_private::SetPrefResult::SUCCESS;
-    return settings_private::SetPrefResult::PREF_NOT_MODIFIABLE;
+  if (service && service->HandlesSetting(pref_name) &&
+      service->Set(pref_name, *value)) {
+    return settings_private::SetPrefResult::SUCCESS;
   }
+  return settings_private::SetPrefResult::PREF_NOT_MODIFIABLE;
 
-  // TODO(olsen): Remove this call, as per http://crbug.com/433840
-  // Note: Since kSystemTimezone (the only system setting) is already handled,
-  // we should only arrive here in two cases (of which one may be a bug):
-  // 1. User is guest, so service=nullptr. Maybe a bug to call Set in this case?
-  // 2. kStubCrosSettings is true, so service->HandlesSetting is false.
-  CrosSettings::Get()->Set(pref_name, *value);
-  return settings_private::SetPrefResult::SUCCESS;
 #else
   return settings_private::SetPrefResult::PREF_NOT_FOUND;
 #endif
@@ -830,13 +822,9 @@
       chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(
           profile_);
 
-  // Returns false if not the owner, for settings requiring owner.
-  if (service && service->HandlesSetting(pref_name)) {
-    return service->AppendToList(pref_name, value);
-  }
+  return service && service->HandlesSetting(pref_name) &&
+         service->AppendToList(pref_name, value);
 
-  CrosSettings::Get()->AppendToList(pref_name, &value);
-  return true;
 #else
   return false;
 #endif
@@ -849,13 +837,9 @@
       chromeos::OwnerSettingsServiceChromeOSFactory::GetForBrowserContext(
           profile_);
 
-  // Returns false if not the owner, for settings requiring owner.
-  if (service && service->HandlesSetting(pref_name)) {
-    return service->RemoveFromList(pref_name, value);
-  }
+  return service && service->HandlesSetting(pref_name) &&
+         service->RemoveFromList(pref_name, value);
 
-  CrosSettings::Get()->RemoveFromList(pref_name, &value);
-  return true;
 #else
   return false;
 #endif
diff --git a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager_unittest.cc b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager_unittest.cc
index d22960c..cba75303 100644
--- a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager_unittest.cc
+++ b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager_unittest.cc
@@ -6,16 +6,16 @@
 
 #include <memory>
 
-#include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/signin/identity_test_environment_profile_adaptor.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
 #include "chrome/common/extensions/api/signed_in_devices.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/prefs/pref_service.h"
 #include "components/prefs/testing_pref_store.h"
-#include "components/signin/core/browser/signin_manager.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "extensions/browser/event_router.h"
+#include "services/identity/public/cpp/identity_test_environment.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -24,17 +24,19 @@
 // Adds a listener and removes it.
 TEST(SignedInDevicesManager, UpdateListener) {
   content::TestBrowserThreadBundle thread_bundle;
-  std::unique_ptr<TestingProfile> profile(new TestingProfile());
-  SigninManagerFactory::GetForProfile(profile.get())->
-      SetAuthenticatedAccountInfo("gaia_id", "foo");
+
+  std::unique_ptr<TestingProfile> profile =
+      IdentityTestEnvironmentProfileAdaptor::
+          CreateProfileForIdentityTestEnvironment();
+  IdentityTestEnvironmentProfileAdaptor adaptor(profile.get());
+  adaptor.identity_test_env()->SetPrimaryAccount("foo@test.com");
+
   ProfileSyncServiceFactory::GetInstance()->SetTestingFactory(
       profile.get(), BrowserContextKeyedServiceFactory::TestingFactory());
   SignedInDevicesManager manager(profile.get());
 
   EventListenerInfo info(api::signed_in_devices::OnDeviceInfoChange::kEventName,
-                         "extension1",
-                         GURL(),
-                         profile.get());
+                         "extension1", GURL(), profile.get());
 
   // Add a listener.
   manager.OnListenerAdded(info);
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 878fa2a3..549412a 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -1239,6 +1239,11 @@
     "expiry_milestone": 76
   },
   {
+    "name": "enable-gesture-navigation",
+    // "owners": [ "jinsukkim@chromium.org" ],
+    "expiry_milestone": 76
+  },
+  {
     "name": "enable-google-branded-context-menu",
     // "owners": [ "your-team" ],
     "expiry_milestone": 76
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 8ce580bb..3e9e122 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2485,6 +2485,10 @@
 const char kExploreSitesDescription[] =
     "Enables portal from new tab page to explore websites.";
 
+const char kGestureNavigationName[] = "History navigation with gesture";
+const char kGestureNavigationDescription[] =
+    "Enable history navigation with horizontal gesture.";
+
 const char kGrantNotificationsToDSEName[] =
     "Grant notifications to the Default Search Engine";
 const char kGrantNotificationsToDSENameDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 1e1e989..ec96dc3 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1484,6 +1484,9 @@
 extern const char kExploreSitesName[];
 extern const char kExploreSitesDescription[];
 
+extern const char kGestureNavigationName[];
+extern const char kGestureNavigationDescription[];
+
 extern const char kGrantNotificationsToDSEName[];
 extern const char kGrantNotificationsToDSENameDescription[];
 
diff --git a/chrome/browser/lifetime/application_lifetime_unittest.cc b/chrome/browser/lifetime/application_lifetime_unittest.cc
new file mode 100644
index 0000000..85b2cce
--- /dev/null
+++ b/chrome/browser/lifetime/application_lifetime_unittest.cc
@@ -0,0 +1,29 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/lifetime/application_lifetime.h"
+
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/lifetime/browser_shutdown.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/browser_with_test_window_test.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/testing_profile_manager.h"
+#include "components/prefs/testing_pref_service.h"
+
+using ApplicationLifetimeTest = BrowserWithTestWindowTest;
+
+TEST_F(ApplicationLifetimeTest, AttemptRestart) {
+  ASSERT_TRUE(g_browser_process);
+  TestingPrefServiceSimple* testing_pref_service =
+      profile_manager()->local_state()->Get();
+
+  EXPECT_FALSE(testing_pref_service->GetBoolean(prefs::kWasRestarted));
+  chrome::AttemptRestart();
+  EXPECT_TRUE(testing_pref_service->GetBoolean(prefs::kWasRestarted));
+
+  // Cancel the effects of us calling chrome::AttemptRestart. Otherwise tests
+  // ran after this one will fail.
+  browser_shutdown::SetTryingToQuit(false);
+}
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc
index 69792c9..70e0fa0 100644
--- a/chrome/browser/pdf/pdf_extension_test.cc
+++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -73,6 +73,7 @@
 #include "extensions/test/result_catcher.h"
 #include "net/dns/mock_host_resolver.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
+#include "pdf/pdf_features.h"
 #include "services/network/public/cpp/features.h"
 #include "ui/accessibility/ax_enum_util.h"
 #include "ui/accessibility/ax_node.h"
@@ -385,6 +386,19 @@
   base::test::ScopedFeatureList feature_list_;
 };
 
+class PDFAnnotationsTest : public PDFExtensionTest {
+ public:
+  PDFAnnotationsTest() {}
+
+ protected:
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    PDFExtensionTest::SetUpCommandLine(command_line);
+    feature_list_.InitAndEnableFeature(chrome_pdf::features::kPDFAnnotations);
+  }
+
+  base::test::ScopedFeatureList feature_list_;
+};
+
 // Disabled because it's flaky.
 // See the issue for details: https://crbug.com/826055.
 #if defined(MEMORY_SANITIZER) || defined(LEAK_SANITIZER) || \
@@ -624,6 +638,13 @@
   RunTestsInFile("beep_test.js", "test-beep.pdf");
 }
 
+IN_PROC_BROWSER_TEST_F(PDFAnnotationsTest, AnnotationsFeatureEnabled) {
+  RunTestsInFile("annotations_feature_enabled_test.js", "test.pdf");
+}
+IN_PROC_BROWSER_TEST_F(PDFExtensionTest, AnnotationsFeatureDisabled) {
+  RunTestsInFile("annotations_feature_disabled_test.js", "test.pdf");
+}
+
 // TODO(tsepez): See https://crbug.com/696650.
 IN_PROC_BROWSER_TEST_F(PDFExtensionTest, DISABLED_NoBeep) {
   // Block the exact query from pdf/main.js while still allowing enough
diff --git a/chrome/browser/policy/cloud/cloud_policy_browsertest.cc b/chrome/browser/policy/cloud/cloud_policy_browsertest.cc
index 6ac4edc..660d8ad2d 100644
--- a/chrome/browser/policy/cloud/cloud_policy_browsertest.cc
+++ b/chrome/browser/policy/cloud/cloud_policy_browsertest.cc
@@ -71,9 +71,10 @@
 #else
 #include "chrome/browser/net/system_network_context_manager.h"
 #include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h"
-#include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/signin/identity_manager_factory.h"
 #include "components/policy/core/common/cloud/user_cloud_policy_manager.h"
-#include "components/signin/core/browser/signin_manager.h"
+#include "services/identity/public/cpp/identity_manager.h"
+#include "services/identity/public/cpp/identity_test_utils.h"
 #endif
 
 using testing::AnyNumber;
@@ -101,12 +102,6 @@
           IdentityManagerFactory::GetForProfile(profile)));
 }
 
-#if !defined(OS_CHROMEOS)
-const char* GetTestGaiaId() {
-  return "gaia-id-user@example.com";
-}
-#endif
-
 const char* GetTestUser() {
 #if defined(OS_CHROMEOS)
   return user_manager::kStubUserEmail;
@@ -223,10 +218,10 @@
 #else
     // Mock a signed-in user. This is used by the UserCloudPolicyStore to pass
     // the username to the UserCloudPolicyValidator.
-    SigninManager* signin_manager =
-        SigninManagerFactory::GetForProfile(browser()->profile());
-    ASSERT_TRUE(signin_manager);
-    signin_manager->SetAuthenticatedAccountInfo(GetTestGaiaId(), GetTestUser());
+    auto* identity_manager =
+        IdentityManagerFactory::GetForProfile(browser()->profile());
+    ASSERT_TRUE(identity_manager);
+    identity::SetPrimaryAccount(identity_manager, GetTestUser());
 
     UserCloudPolicyManager* policy_manager =
         UserCloudPolicyManagerFactory::GetForBrowserContext(
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service.cc b/chrome/browser/policy/cloud/user_policy_signin_service.cc
index d6f2b6e..82379d7 100644
--- a/chrome/browser/policy/cloud/user_policy_signin_service.cc
+++ b/chrome/browser/policy/cloud/user_policy_signin_service.cc
@@ -11,6 +11,7 @@
 #include "base/callback.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/policy/cloud/user_policy_signin_service_internal.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/signin/signin_util.h"
@@ -25,6 +26,9 @@
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
 namespace policy {
+namespace internal {
+bool g_force_prohibit_signout_for_tests = false;
+}
 
 UserPolicySigninService::UserPolicySigninService(
     Profile* profile,
@@ -224,7 +228,8 @@
 }
 
 void UserPolicySigninService::ProhibitSignoutIfNeeded() {
-  if (policy_manager()->IsClientRegistered()) {
+  if (policy_manager()->IsClientRegistered() ||
+      internal::g_force_prohibit_signout_for_tests) {
     DVLOG(1) << "User is registered for policy - prohibiting signout";
     signin_util::SetUserSignoutAllowedForProfile(profile_, false);
   }
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_internal.h b/chrome/browser/policy/cloud/user_policy_signin_service_internal.h
new file mode 100644
index 0000000..a06bdc8
--- /dev/null
+++ b/chrome/browser/policy/cloud/user_policy_signin_service_internal.h
@@ -0,0 +1,17 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_POLICY_CLOUD_USER_POLICY_SIGNIN_SERVICE_INTERNAL_H_
+#define CHROME_BROWSER_POLICY_CLOUD_USER_POLICY_SIGNIN_SERVICE_INTERNAL_H_
+
+namespace policy {
+namespace internal {
+
+// Allows tests to force all |UserPolicySigninService| to prohibit signout
+// even when the policy manager is not registered.
+extern bool g_force_prohibit_signout_for_tests;
+
+}  // namespace internal
+}  // namespace policy
+#endif  // CHROME_BROWSER_POLICY_CLOUD_USER_POLICY_SIGNIN_SERVICE_INTERNAL_H_
diff --git a/chrome/browser/previews/previews_lite_page_browsertest.cc b/chrome/browser/previews/previews_lite_page_browsertest.cc
index c01042c4..3ae62281 100644
--- a/chrome/browser/previews/previews_lite_page_browsertest.cc
+++ b/chrome/browser/previews/previews_lite_page_browsertest.cc
@@ -271,6 +271,15 @@
 
     content::NavigationEntry* entry =
         GetWebContents()->GetController().GetVisibleEntry();
+
+    // server_lite_page_info does not exist on forward/back navigations.
+    if (!(entry->GetTransitionType() & ui::PAGE_TRANSITION_FORWARD_BACK)) {
+      EXPECT_TRUE(previews_data->server_lite_page_info());
+      EXPECT_NE(
+          previews_data->server_lite_page_info()->original_navigation_start,
+          base::TimeTicks());
+    }
+
     EXPECT_EQ(content::PAGE_TYPE_NORMAL, entry->GetPageType());
     const GURL virtual_url = entry->GetVirtualURL();
 
@@ -803,6 +812,19 @@
 
   GetWebContents()->GetController().Reload(content::ReloadType::NORMAL, false);
   VerifyPreviewLoaded();
+
+  // Set the ECT so that a preview won't be triggered on the reload.
+  g_browser_process->network_quality_tracker()
+      ->ReportEffectiveConnectionTypeForTesting(
+          net::EFFECTIVE_CONNECTION_TYPE_4G);
+
+  GetWebContents()->GetController().Reload(content::ReloadType::NORMAL, false);
+  VerifyPreviewNotLoaded();
+
+  // Reset ECT for future tests.
+  g_browser_process->network_quality_tracker()
+      ->ReportEffectiveConnectionTypeForTesting(
+          net::EFFECTIVE_CONNECTION_TYPE_2G);
 }
 
 IN_PROC_BROWSER_TEST_F(PreviewsLitePageServerBrowserTest,
diff --git a/chrome/browser/previews/previews_lite_page_navigation_throttle.cc b/chrome/browser/previews/previews_lite_page_navigation_throttle.cc
index b41eee0..0539652d 100644
--- a/chrome/browser/previews/previews_lite_page_navigation_throttle.cc
+++ b/chrome/browser/previews/previews_lite_page_navigation_throttle.cc
@@ -543,6 +543,31 @@
 
 content::NavigationThrottle::ThrottleCheckResult
 PreviewsLitePageNavigationThrottle::WillStartRequest() {
+  // Check if the user is trying to navigate to a valid previews URL in the form
+  // of a reload. In such a case, cancel the navigation and start a new one to
+  // the original URL instead. We might trigger this preview again, but if so
+  // there will be a server_lite_page_info associated with it.
+  std::string original_url;
+  if (previews::ExtractOriginalURLFromLitePageRedirectURL(
+          navigation_handle()->GetURL(), &original_url) &&
+      navigation_handle()->GetReloadType() == content::ReloadType::NORMAL) {
+    // Don't use |LoadAndBypass| because we might not want to bypass.
+    WebContentsLifetimeHelper::CreateForWebContents(
+        navigation_handle()->GetWebContents());
+    WebContentsLifetimeHelper* helper =
+        WebContentsLifetimeHelper::FromWebContents(
+            navigation_handle()->GetWebContents());
+
+    base::PostTaskWithTraits(
+        FROM_HERE, {content::BrowserThread::UI},
+        base::BindOnce(&WebContentsLifetimeHelper::PostNewNavigation,
+                       helper->GetWeakPtr(),
+                       MakeOpenURLParams(navigation_handle(),
+                                         GURL(original_url), std::string()),
+                       GetOrCreateServerLitePageInfo(navigation_handle())));
+    return content::NavigationThrottle::CANCEL;
+  }
+
   MaybeReportNavigationRestartPenalty(navigation_handle());
   return MaybeNavigateToPreview();
 }
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
index 608e518..991700e 100644
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -1276,6 +1276,12 @@
       chrome::NOTIFICATION_PROFILE_ADDED,
       content::Source<Profile>(profile),
       content::NotificationService::NoDetails());
+
+  // At this point, the user policy service and the child account service
+  // had enough time to initialize and should have updated the user signout
+  // flag attached to the profile.
+  signin_util::EnsureUserSignoutAllowedIsInitializedForProfile(profile);
+  signin_util::EnsurePrimaryAccountAllowedForProfile(profile);
 }
 
 void ProfileManager::DoFinalInitForServices(Profile* profile,
diff --git a/chrome/browser/profiles/profile_metrics.h b/chrome/browser/profiles/profile_metrics.h
index e6e0372..5c3e3351 100644
--- a/chrome/browser/profiles/profile_metrics.h
+++ b/chrome/browser/profiles/profile_metrics.h
@@ -47,9 +47,12 @@
     DELETE_PROFILE_SETTINGS_SHOW_WARNING,
     // Aborts profile deletion in an OnBeforeUnload event in any browser tab.
     DELETE_PROFILE_ABORTED,
-    // Delete profile from web signout with Dice, when Chrome signout is
-    // prohibited.
-    DELETE_PROFILE_DICE_WEB_SIGNOUT,
+    // Commented out as it is not used anymore (kept in the enum as it was used
+    // as a bucket in a histogram).
+    // DELETE_PROFILE_DICE_WEB_SIGNOUT
+    // Delete profile internally when Chrome signout is prohibited and the
+    // username is no longer allowed.
+    DELETE_PROFILE_PRIMARY_ACCOUNT_NOT_ALLOWED = DELETE_PROFILE_ABORTED + 2,
     NUM_DELETE_PROFILE_METRICS
   };
 
diff --git a/chrome/browser/resources/chromeos/login/discover/modules/discover_module_pin_setup.html b/chrome/browser/resources/chromeos/login/discover/modules/discover_module_pin_setup.html
index e06f039..691b913 100644
--- a/chrome/browser/resources/chromeos/login/discover/modules/discover_module_pin_setup.html
+++ b/chrome/browser/resources/chromeos/login/discover/modules/discover_module_pin_setup.html
@@ -122,7 +122,12 @@
         [[i18nDynamic(locale, 'discoverPinSetupSubtitle1')]]
       </div>
       <div slot="subtitle" hidden="[[isStepHidden_(step_, 'done')]]">
-        [[i18nDynamic(locale, 'discoverPinSetupSubtitle3')]]<BR>
+        <div hidden="[[hasLoginSupport_]]">
+          [[i18nDynamic(locale, 'discoverPinSetupSubtitle3NoLogin')]]<br>
+        </div>
+        <div hidden="[[!hasLoginSupport_]]">
+          [[i18nDynamic(locale, 'discoverPinSetupSubtitle3WithLogin')]]<br>
+        </div>
       </div>
       <div slot="footer" class="flex layout horizontal center-justified">
           <setup-pin-keyboard id="pinKeyboard"
diff --git a/chrome/browser/resources/chromeos/login/discover/modules/discover_module_pin_setup.js b/chrome/browser/resources/chromeos/login/discover/modules/discover_module_pin_setup.js
index a005426..c7cd36d 100644
--- a/chrome/browser/resources/chromeos/login/discover/modules/discover_module_pin_setup.js
+++ b/chrome/browser/resources/chromeos/login/discover/modules/discover_module_pin_setup.js
@@ -118,6 +118,15 @@
         type: Boolean,
         value: false,
       },
+
+      /**
+       * Should be true when device has support for PIN login.
+       * @private
+       */
+      hasLoginSupport_: {
+        type: Boolean,
+        value: false,
+      },
     },
 
     /**
@@ -191,6 +200,11 @@
 
     /** @override */
     show: function() {
+      this.discoverCallWithReply(
+          'discover.pinSetup.getHasLoginSupport', [], (is_available) => {
+            this.hasLoginSupport_ = is_available;
+          });
+
       if (this.firstRun) {
         this.getFirstRunUserPassword_();
       } else {
diff --git a/chrome/browser/resources/pdf/elements/icons.html b/chrome/browser/resources/pdf/elements/icons.html
index 3442301..99295a3 100644
--- a/chrome/browser/resources/pdf/elements/icons.html
+++ b/chrome/browser/resources/pdf/elements/icons.html
@@ -11,6 +11,7 @@
       <g id="add"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path></g>
       <g id="bookmark"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2z"></path></g>
       <g id="bookmark-border"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"></path></g>
+      <g id="create"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"></path></g>
       <g id="fullscreen-exit"><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"></path></g>
       <g id="remove"><path d="M19 13H5v-2h14v2z"></path></g>
       <g id="rotate-right"><path d="M15.55 5.55L11 1v3.07C7.06 4.56 4 7.92 4 12s3.05 7.44 7 7.93v-2.02c-2.84-.48-5-2.94-5-5.91s2.16-5.43 5-5.91V10l4.55-4.45zM19.93 11c-.17-1.39-.72-2.73-1.62-3.89l-1.42 1.42c.54.75.88 1.6 1.02 2.47h2.02zM13 17.9v2.02c1.39-.17 2.74-.71 3.9-1.61l-1.44-1.44c-.75.54-1.59.89-2.46 1.03zm3.89-2.42l1.42 1.41c.9-1.16 1.45-2.5 1.62-3.89h-2.02c-.14.87-.48 1.72-1.02 2.48z"></path></g>
diff --git a/chrome/browser/resources/pdf/elements/viewer-pdf-toolbar/viewer-pdf-toolbar.html b/chrome/browser/resources/pdf/elements/viewer-pdf-toolbar/viewer-pdf-toolbar.html
index 5c44ef31..964ec04 100644
--- a/chrome/browser/resources/pdf/elements/viewer-pdf-toolbar/viewer-pdf-toolbar.html
+++ b/chrome/browser/resources/pdf/elements/viewer-pdf-toolbar/viewer-pdf-toolbar.html
@@ -123,6 +123,13 @@
         </div>
 
         <div id="buttons" class="invisible">
+          <template is="dom-if" if="[[pdfAnnotationsEnabled]]">
+            <paper-icon-button id="annotate" icon="pdf:create"
+                aria-label$="{{strings.tooltipAnnotate}}"
+                title$="{{strings.tooltipAnnotate}}">
+            </paper-icon-button>
+          </template>
+
           <paper-icon-button id="rotate-right" icon="pdf:rotate-right"
               on-click="rotateRight"
               aria-label$="{{strings.tooltipRotateCW}}"
diff --git a/chrome/browser/resources/pdf/elements/viewer-pdf-toolbar/viewer-pdf-toolbar.js b/chrome/browser/resources/pdf/elements/viewer-pdf-toolbar/viewer-pdf-toolbar.js
index b2a7537..62edf11 100644
--- a/chrome/browser/resources/pdf/elements/viewer-pdf-toolbar/viewer-pdf-toolbar.js
+++ b/chrome/browser/resources/pdf/elements/viewer-pdf-toolbar/viewer-pdf-toolbar.js
@@ -36,6 +36,11 @@
      */
     opened: {type: Boolean, value: true},
 
+    /**
+     * Whether the PDF Annotations feature is enabled.
+     */
+    pdfAnnotationsEnabled: Boolean,
+
     strings: Object,
   },
 
diff --git a/chrome/browser/resources/pdf/pdf_viewer.js b/chrome/browser/resources/pdf/pdf_viewer.js
index 5d4bef4..9995670 100644
--- a/chrome/browser/resources/pdf/pdf_viewer.js
+++ b/chrome/browser/resources/pdf/pdf_viewer.js
@@ -654,6 +654,8 @@
 
     loadTimeData.data = strings;
     $('toolbar').strings = strings;
+    $('toolbar').pdfAnnotationsEnabled =
+        loadTimeData.getBoolean('pdfAnnotationsEnabled');
     $('zoom-toolbar').strings = strings;
     $('password-screen').strings = strings;
     $('error-screen').strings = strings;
diff --git a/chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_app.html b/chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_app.html
index f521dd0..ba235cb 100644
--- a/chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_app.html
+++ b/chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_app.html
@@ -1,7 +1,5 @@
 <link rel="import" href="chrome://resources/html/polymer.html">
 
-<link rel="import" href="chrome://resources/cr_elements/cr_radio_button/cr_radio_button.html">
-<link rel="import" href="chrome://resources/cr_elements/cr_radio_group/cr_radio_group.html">
 <link rel="import" href="chrome://resources/cr_elements/icons.html">
 <link rel="import" href="chrome://resources/cr_elements/paper_button_style_css.html">
 <link rel="import" href="chrome://resources/html/cr.html">
@@ -145,36 +143,6 @@
                                             url(./images/ic_google_2x.png) 2x);
       }
 
-      #options-container {
-        background: white;
-        bottom: 0;
-        left: 0;
-        margin-inline-start: 16px;
-        position: absolute;
-        right: 0;
-        top: 0;
-      }
-
-      #options-heading {
-        color: var(--paper-grey-800);
-        font-weight: normal;
-        margin-top: 0;
-      }
-
-      #options-description {
-        padding-bottom: 25px;
-        padding-inline-end: 24px;
-      }
-
-      cr-radio-button {
-        line-height: 1.25rem;
-      }
-
-      .subtitle-text {
-        color: var(--paper-grey-600);
-        line-height: 1.25rem;
-      }
-
       #grey-banner {
         background: var(--paper-grey-50);
         height: 128px;
@@ -206,13 +174,9 @@
       <img src="[[accountImageSrc_]]">
     </div>
     <div id="content-container">
-      <h1 id="syncConfirmationHeading" class="heading" consent-description
-          hidden="[[isConsentBump_]]">
+      <h1 id="syncConfirmationHeading" class="heading" consent-description>
         $i18n{syncConfirmationTitle}
       </h1>
-      <h1 class="heading" consent-description hidden="[[!isConsentBump_]]">
-        $i18n{syncConsentBumpTitle}
-      </h1>
       <div class="message-container">
         <!-- Container needed to contain the icon in a green circle. -->
         <div id="sync-logo-container" class="logo">
@@ -244,59 +208,16 @@
               on-click="onConfirm_" consent-confirmation>
             $i18n{syncConfirmationConfirmLabel}
           </paper-button>
-          <paper-button on-click="onUndo_" hidden="[[isConsentBump_]]">
+          <paper-button on-click="onUndo_">
             $i18n{syncConfirmationUndoLabel}
           </paper-button>
           <paper-button id="settingsButton" on-click="onGoToSettings_"
-              hidden="[[isConsentBump_]]" consent-confirmation>
+              consent-confirmation>
             $i18n{syncConfirmationSettingsLabel}
           </paper-button>
-          <paper-button on-click="onMoreOptions_" hidden="[[!isConsentBump_]]">
-            $i18n{syncConfirmationMoreOptionsLabel}
-          </paper-button>
         </div>
       </div>
 
-      <!-- More options dialog for the consent bump -->
-      <template is="dom-if" if="[[showMoreOptions_]]">
-        <div id="options-container">
-          <h3 id="options-heading" consent-description>
-            $i18n{syncConfirmationOptionsTitle}
-          </h3>
-          <div id="options-description" class="subtitle-text"
-               consent-description>
-            $i18n{syncConfirmationOptionsSubtitle}
-          </div>
-          <cr-radio-group selected="noChanges">
-            <cr-radio-button name="noChanges">
-              $i18n{syncConfirmationOptionsMakeNoChangesTitle}
-              <div class="subtitle-text">
-                $i18n{syncConfirmationOptionsMakeNoChangesSubtitle}
-              </div>
-            </cr-radio-button>
-            <cr-radio-button name="reviewSettings">
-              $i18n{syncConfirmationOptionsReviewSettingsTitle}
-            </cr-radio-button>
-            <cr-radio-button name="defaultSettings">
-              <div consent-description>
-                $i18n{syncConfirmationOptionsUseDefaultTitle}
-              </div>
-              <div class="subtitle-text" consent-description>
-                $i18n{syncConfirmationOptionsUseDefaultSubtitle}
-              </div>
-            </cr-radio-button>
-          </cr-radio-group>
-          <div class="action-container">
-            <paper-button class="action-button" on-click="onOK_"
-                          consent-confirmation>
-              $i18n{syncConfirmationOptionsConfirmLabel}
-            </paper-button>
-            <paper-button on-click="onBack_">
-              $i18n{syncConfirmationOptionsBackLabel}
-            </paper-button>
-          </div>
-        </div>
-      </template>
     </div>
   </template>
   <script src="sync_confirmation_app.js"></script>
diff --git a/chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_app.js b/chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_app.js
index 1b2ff09..3ea18cf5 100644
--- a/chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_app.js
+++ b/chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_app.js
@@ -11,20 +11,6 @@
 
   properties: {
     /** @private */
-    isConsentBump_: {
-      type: Boolean,
-      value: function() {
-        return window.location.search.includes('consent-bump');
-      },
-    },
-
-    /** @private */
-    showMoreOptions_: {
-      type: Boolean,
-      value: false,
-    },
-
-    /** @private */
     accountImageSrc_: {
       type: String,
       value: function() {
@@ -61,20 +47,18 @@
   /** @private */
   onConfirm_: function(e) {
     this.syncConfirmationBrowserProxy_.confirm(
-        this.getConsentDescription_(), this.getConsentConfirmation_(e.path),
-        this.isConsentBump_, this.showMoreOptions_);
+        this.getConsentDescription_(), this.getConsentConfirmation_(e.path));
   },
 
   /** @private */
   onUndo_: function() {
-    this.syncConfirmationBrowserProxy_.undo(this.isConsentBump_);
+    this.syncConfirmationBrowserProxy_.undo();
   },
 
   /** @private */
   onGoToSettings_: function(e) {
     this.syncConfirmationBrowserProxy_.goToSettings(
-        this.getConsentDescription_(), this.getConsentConfirmation_(e.path),
-        this.isConsentBump_);
+        this.getConsentDescription_(), this.getConsentConfirmation_(e.path));
   },
 
   /** @private */
@@ -112,32 +96,6 @@
     return consentDescription;
   },
 
-  /** @private */
-  onOK_: function(e) {
-    switch (this.$$('cr-radio-group').selected) {
-      case 'reviewSettings':
-        this.onGoToSettings_(e);
-        break;
-      case 'noChanges':
-        this.onUndo_();
-        break;
-      case 'defaultSettings':
-        this.onConfirm_(e);
-        break;
-    }
-    assertNotReached();
-  },
-
-  /** @private */
-  onMoreOptions_: function() {
-    this.showMoreOptions_ = true;
-  },
-
-  /** @private */
-  onBack_: function() {
-    this.showMoreOptions_ = false;
-  },
-
   /**
    * Called when the account image changes.
    * @param {string} imageSrc
diff --git a/chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_browser_proxy.js b/chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_browser_proxy.js
index 2a82e24..2f8a6da 100644
--- a/chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_browser_proxy.js
+++ b/chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_browser_proxy.js
@@ -9,32 +9,6 @@
 
 cr.define('sync.confirmation', function() {
 
-  /**
-   * ConsentBumpAction enum.
-   * These values are persisted to logs and should not be renumbered or re-used.
-   * See tools/metrics/histograms/enums.xml.
-   * @enum {number}
-   */
-  const ConsentBumpAction = {
-    DEFAULT_OPT_IN: 0,
-    MORE_OPTIONS_OPT_IN: 1,
-    MORE_OPTIONS_REVIEW_SETTINGS: 2,
-    MORE_OPTIONS_MAKE_NO_CHANGES: 3,
-    ABORT: 4,  // Not actually used in JS, but here to match the C++ type.
-  };
-
-  /**
-   * The number of enum values in ConsentBumpAction. This should
-   * be kept in sync with the enum count in tools/metrics/histograms/enums.xml.
-   * @type {number}
-   */
-  const CONSENT_BUMP_ACTION_COUNT = Object.keys(ConsentBumpAction).length;
-
-  /**
-   * The metrics name corresponding to ConsentBumpAction.
-   */
-  const CONSENT_BUMP_ACTION_METRIC_NAME = 'UnifiedConsent.ConsentBump.Action';
-
   /** @interface */
   class SyncConfirmationBrowserProxy {
     /**
@@ -43,18 +17,12 @@
      *     with in the UI.
      * @param {string} confirmation Text of the element that the user
      *     clicked on.
-     * @param {boolean} isConsentBump Boolean indicating whether the
-     *     confirmation dialog was a consent bump.
-     * @param {boolean} moreOptionsPage Boolean indicating whether the user
-     *     selected confirm from the moreOptions page in the consent bump.
      */
-    confirm(description, confirmation, isConsentBump, moreOptionsPage) {}
+    confirm(description, confirmation) {}
 
     /** Called when the user undoes the Sync confirmation.
-     * @param {boolean} isConsentBump Boolean indicating whether the
-     *     confirmation dialog was a consent bump.
      */
-    undo(isConsentBump) {}
+    undo() {}
 
     /**
      * Called when the user clicks on the Settings link in
@@ -63,10 +31,8 @@
      *     with in the UI.
      * @param {string} confirmation Text of the element that the user
      *     clicked on.
-     * @param {boolean} isConsentBump Boolean indicating whether the
-     *     confirmation dialog was a consent bump.
      */
-    goToSettings(description, confirmation, isConsentBump) {}
+    goToSettings(description, confirmation) {}
 
     /** @param {!Array<number>} height */
     initializedWithSize(height) {}
@@ -80,30 +46,17 @@
   /** @implements {sync.confirmation.SyncConfirmationBrowserProxy} */
   class SyncConfirmationBrowserProxyImpl {
     /** @override */
-    confirm(description, confirmation, isConsentBump, moreOptionsPage) {
-      if (isConsentBump) {
-        this.recordConsentBumpAction_(
-            moreOptionsPage ? ConsentBumpAction.MORE_OPTIONS_OPT_IN :
-                              ConsentBumpAction.DEFAULT_OPT_IN);
-      }
+    confirm(description, confirmation) {
       chrome.send('confirm', [description, confirmation]);
     }
 
     /** @override */
-    undo(isConsentBump) {
-      if (isConsentBump) {
-        this.recordConsentBumpAction_(
-            ConsentBumpAction.MORE_OPTIONS_MAKE_NO_CHANGES);
-      }
+    undo() {
       chrome.send('undo');
     }
 
     /** @override */
-    goToSettings(description, confirmation, isConsentBump) {
-      if (isConsentBump) {
-        this.recordConsentBumpAction_(
-            ConsentBumpAction.MORE_OPTIONS_REVIEW_SETTINGS);
-      }
+    goToSettings(description, confirmation) {
       chrome.send('goToSettings', [description, confirmation]);
     }
 
@@ -116,12 +69,6 @@
     requestAccountImage() {
       chrome.send('accountImageRequest');
     }
-
-    /** @private */
-    recordConsentBumpAction_(action) {
-      chrome.metricsPrivate.recordEnumerationValue(
-          CONSENT_BUMP_ACTION_METRIC_NAME, action, CONSENT_BUMP_ACTION_COUNT);
-    }
   }
 
   cr.addSingletonGetter(SyncConfirmationBrowserProxyImpl);
diff --git a/chrome/browser/signin/chrome_signin_client.cc b/chrome/browser/signin/chrome_signin_client.cc
index a2c3787..a512bd1 100644
--- a/chrome/browser/signin/chrome_signin_client.cc
+++ b/chrome/browser/signin/chrome_signin_client.cc
@@ -66,47 +66,32 @@
 #endif
 
 namespace {
+
+// List of sources for which sign out is always allowed.
+signin_metrics::ProfileSignout kAlwaysAllowedSignoutSources[] = {
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
+    // Allowed, because data has not been synced yet.
+    signin_metrics::ProfileSignout::ABORT_SIGNIN,
+#endif
+    // Allowed, because only used on Android and the primary account must be
+    // cleared when the account is removed from device
+    signin_metrics::ProfileSignout::ACCOUNT_REMOVED_FROM_DEVICE,
+    signin_metrics::ProfileSignout::FORCE_SIGNOUT_ALWAYS_ALLOWED_FOR_TEST};
+
 SigninClient::SignoutDecision IsSignoutAllowed(
     Profile* profile,
-    const signin_metrics::ProfileSignout signout_source_metric) {
-  // TODO(msarda): This logic should be reworked to only prohibit user-
-  // initiated sign-out. For now signin_util::IsUserSignoutAllowedForProfile()
-  // prohibits ALL sign-outs with the exception of ACCOUNT_REMOVED_FROM_DEVICE
-  // because this preserves the original behavior. A follow-up CL will make the
-  // slightly riskier change described above.
+    const signin_metrics::ProfileSignout signout_source) {
   if (signin_util::IsUserSignoutAllowedForProfile(profile))
     return SigninClient::SignoutDecision::ALLOW_SIGNOUT;
 
-  switch (signout_source_metric) {
-    case signin_metrics::ProfileSignout::ACCOUNT_REMOVED_FROM_DEVICE:
+  for (const auto& always_allowed_source : kAlwaysAllowedSignoutSources) {
+    if (signout_source == always_allowed_source)
       return SigninClient::SignoutDecision::ALLOW_SIGNOUT;
-
-    case signin_metrics::ProfileSignout::ABORT_SIGNIN:
-#if BUILDFLAG(ENABLE_DICE_SUPPORT)
-      // Allowed, because data has not been synced yet.
-      return SigninClient::SignoutDecision::ALLOW_SIGNOUT;
-#else
-      // ABORT_SIGNIN is only used on Dice platforms.
-      NOTREACHED();
-      return SigninClient::SignoutDecision::DISALLOW_SIGNOUT;
-#endif
-
-    case signin_metrics::ProfileSignout::SIGNOUT_PREF_CHANGED:
-    case signin_metrics::ProfileSignout::GOOGLE_SERVICE_NAME_PATTERN_CHANGED:
-    case signin_metrics::ProfileSignout::SIGNIN_PREF_CHANGED_DURING_SIGNIN:
-    case signin_metrics::ProfileSignout::USER_CLICKED_SIGNOUT_SETTINGS:
-    case signin_metrics::ProfileSignout::SERVER_FORCED_DISABLE:
-    case signin_metrics::ProfileSignout::TRANSFER_CREDENTIALS:
-    case signin_metrics::ProfileSignout::
-        AUTHENTICATION_FAILED_WITH_FORCE_SIGNIN:
-    case signin_metrics::ProfileSignout::USER_TUNED_OFF_SYNC_FROM_DICE_UI:
-      return SigninClient::SignoutDecision::DISALLOW_SIGNOUT;
-
-    case signin_metrics::ProfileSignout::NUM_PROFILE_SIGNOUT_METRICS:
-      NOTREACHED();
-      return SigninClient::SignoutDecision::DISALLOW_SIGNOUT;
   }
+
+  return SigninClient::SignoutDecision::DISALLOW_SIGNOUT;
 }
+
 }  // namespace
 
 ChromeSigninClient::ChromeSigninClient(
diff --git a/chrome/browser/signin/chrome_signin_client_unittest.cc b/chrome/browser/signin/chrome_signin_client_unittest.cc
index 73f5c18..02f56ae 100644
--- a/chrome/browser/signin/chrome_signin_client_unittest.cc
+++ b/chrome/browser/signin/chrome_signin_client_unittest.cc
@@ -268,33 +268,6 @@
   manager_->SignOut(source_metric, delete_metric);
 }
 
-TEST_F(ChromeSigninClientSignoutTest, SignOutGuestSession) {
-  TestingProfile::Builder builder;
-  builder.SetGuestSession();
-  std::unique_ptr<TestingProfile> profile = builder.Build();
-
-  CreateClient(profile.get());
-  manager_ = std::make_unique<MockSigninManager>(client_.get(),
-                                                 fake_controller_.get());
-
-  signin_metrics::ProfileSignout source_metric =
-      signin_metrics::ProfileSignout::USER_CLICKED_SIGNOUT_SETTINGS;
-  signin_metrics::SignoutDelete delete_metric =
-      signin_metrics::SignoutDelete::IGNORE_METRIC;
-
-  EXPECT_CALL(*client_, ShowUserManager(browser()->profile()->GetPath()))
-      .Times(0);
-  EXPECT_CALL(*client_, LockForceSigninProfile(browser()->profile()->GetPath()))
-      .Times(0);
-  EXPECT_CALL(*manager_,
-              OnSignoutDecisionReached(
-                  source_metric, delete_metric,
-                  SigninManager::RemoveAccountsOption::kRemoveAllAccounts,
-                  SigninClient::SignoutDecision::ALLOW_SIGNOUT))
-      .Times(1);
-  manager_->SignOut(source_metric, delete_metric);
-}
-
 class ChromeSigninClientSignoutSourceTest
     : public ::testing::WithParamInterface<signin_metrics::ProfileSignout>,
       public ChromeSigninClientSignoutTest {};
@@ -312,6 +285,7 @@
     case signin_metrics::ProfileSignout::TRANSFER_CREDENTIALS:
     case signin_metrics::ProfileSignout::
         AUTHENTICATION_FAILED_WITH_FORCE_SIGNIN:
+    case signin_metrics::ProfileSignout::SIGNIN_NOT_ALLOWED_ON_PROFILE_INIT:
     case signin_metrics::ProfileSignout::USER_TUNED_OFF_SYNC_FROM_DICE_UI:
       return true;
     case signin_metrics::ProfileSignout::ACCOUNT_REMOVED_FROM_DEVICE:
@@ -323,6 +297,9 @@
     case signin_metrics::ProfileSignout::ABORT_SIGNIN:
       // Allow signout because data has not been synced yet.
       return false;
+    case signin_metrics::ProfileSignout::FORCE_SIGNOUT_ALWAYS_ALLOWED_FOR_TEST:
+      // Allow signout for tests that want to force it.
+      return false;
     case signin_metrics::ProfileSignout::NUM_PROFILE_SIGNOUT_METRICS:
       NOTREACHED();
       return false;
@@ -339,8 +316,6 @@
   CreateClient(profile.get());
   manager_ = std::make_unique<MockSigninManager>(client_.get(),
                                                  fake_controller_.get());
-
-  // User sign-out is allowed for this test.
   ASSERT_TRUE(signin_util::IsUserSignoutAllowedForProfile(profile.get()));
 
   // Verify SigninManager gets callback indicating sign-out is always allowed.
@@ -356,6 +331,7 @@
   manager_->SignOut(signout_source, delete_metric);
 }
 
+#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
 TEST_P(ChromeSigninClientSignoutSourceTest, UserSignoutDisallowed) {
   signin_metrics::ProfileSignout signout_source = GetParam();
 
@@ -367,7 +343,6 @@
   manager_ = std::make_unique<MockSigninManager>(client_.get(),
                                                  fake_controller_.get());
 
-  // Disallow user sign-out.
   ASSERT_TRUE(signin_util::IsUserSignoutAllowedForProfile(profile.get()));
   signin_util::SetUserSignoutAllowedForProfile(profile.get(), false);
   ASSERT_FALSE(signin_util::IsUserSignoutAllowedForProfile(profile.get()));
@@ -389,9 +364,9 @@
 
   manager_->SignOut(signout_source, delete_metric);
 }
+#endif
 
 const signin_metrics::ProfileSignout kSignoutSources[] = {
-    // NOTE: SIGNOUT_TEST == SIGNOUT_PREF_CHANGED.
     signin_metrics::ProfileSignout::SIGNOUT_PREF_CHANGED,
     signin_metrics::ProfileSignout::GOOGLE_SERVICE_NAME_PATTERN_CHANGED,
     signin_metrics::ProfileSignout::SIGNIN_PREF_CHANGED_DURING_SIGNIN,
@@ -402,6 +377,8 @@
     signin_metrics::ProfileSignout::AUTHENTICATION_FAILED_WITH_FORCE_SIGNIN,
     signin_metrics::ProfileSignout::USER_TUNED_OFF_SYNC_FROM_DICE_UI,
     signin_metrics::ProfileSignout::ACCOUNT_REMOVED_FROM_DEVICE,
+    signin_metrics::ProfileSignout::SIGNIN_NOT_ALLOWED_ON_PROFILE_INIT,
+    signin_metrics::ProfileSignout::FORCE_SIGNOUT_ALWAYS_ALLOWED_FOR_TEST,
 };
 static_assert(base::size(kSignoutSources) ==
                   signin_metrics::ProfileSignout::NUM_PROFILE_SIGNOUT_METRICS,
diff --git a/chrome/browser/signin/dice_browsertest.cc b/chrome/browser/signin/dice_browsertest.cc
index 9d4c8ad..c3d3bfb 100644
--- a/chrome/browser/signin/dice_browsertest.cc
+++ b/chrome/browser/signin/dice_browsertest.cc
@@ -21,7 +21,11 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/policy/cloud/user_policy_signin_service.h"
+#include "chrome/browser/policy/cloud/user_policy_signin_service_internal.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/signin/account_consistency_mode_manager.h"
 #include "chrome/browser/signin/account_reconcilor_factory.h"
 #include "chrome/browser/signin/account_tracker_service_factory.h"
@@ -34,9 +38,11 @@
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/signin/scoped_account_consistency.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/signin/signin_util.h"
 #include "chrome/browser/sync/user_event_service_factory.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/profile_chooser_constants.h"
+#include "chrome/browser/ui/simple_message_box_internal.h"
 #include "chrome/browser/ui/webui/signin/login_ui_service.h"
 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
 #include "chrome/browser/ui/webui/signin/login_ui_test_utils.h"
@@ -99,7 +105,8 @@
 const char kChromeSyncEndpointURL[] = "/signin/chrome/sync";
 const char kEnableSyncURL[] = "/enable_sync";
 const char kGoogleSignoutResponseHeader[] = "Google-Accounts-SignOut";
-const char kMainEmail[] = "main_email@example.com";
+const char kMainGmailEmail[] = "main_email@gmail.com";
+const char kMainManagedEmail[] = "main_email@managed.com";
 const char kMainGaiaID[] = "main_gaia_id";
 const char kNoDiceRequestHeader[] = "NoDiceHeader";
 const char kOAuth2TokenExchangeURL[] = "/oauth2/v4/token";
@@ -147,6 +154,7 @@
 // the Dice response header.
 // Handles both the "Chrome Sync" endpoint and the old endpoint.
 std::unique_ptr<HttpResponse> HandleSigninURL(
+    const std::string& main_email,
     const base::RepeatingCallback<void(const std::string&)>& callback,
     const HttpRequest& request) {
   if (!net::test_server::ShouldHandle(request, kSigninURL) &&
@@ -169,7 +177,7 @@
         kDiceResponseHeader,
         base::StringPrintf(
             "action=SIGNIN,authuser=1,id=%s,email=%s,authorization_code=%s",
-            kMainGaiaID, kMainEmail, kAuthorizationCode));
+            kMainGaiaID, main_email.c_str(), kAuthorizationCode));
   }
 
   // When hitting the Chrome Sync endpoint, redirect to kEnableSyncURL, which
@@ -185,6 +193,7 @@
 
 // Handler for the Gaia endpoint adding the ENABLE_SYNC dice header.
 std::unique_ptr<HttpResponse> HandleEnableSyncURL(
+    const std::string& main_email,
     const base::RepeatingCallback<void(base::OnceClosure)>& callback,
     const HttpRequest& request) {
   if (!net::test_server::ShouldHandle(request, kEnableSyncURL))
@@ -195,7 +204,7 @@
   http_response->AddCustomHeader(
       kDiceResponseHeader,
       base::StringPrintf("action=ENABLE_SYNC,authuser=1,id=%s,email=%s",
-                         kMainGaiaID, kMainEmail));
+                         kMainGaiaID, main_email.c_str()));
   http_response->AddCustomHeader("Cache-Control", "no-store");
   return std::move(http_response);
 }
@@ -204,7 +213,8 @@
 // Responds with a Google-Accounts-SignOut header for the main account, the
 // secondary account, or both (depending on the SignoutType, which is encoded in
 // the query string).
-std::unique_ptr<HttpResponse> HandleSignoutURL(const HttpRequest& request) {
+std::unique_ptr<HttpResponse> HandleSignoutURL(const std::string& main_email,
+                                               const HttpRequest& request) {
   if (!net::test_server::ShouldHandle(request, kSignoutURL))
     return nullptr;
 
@@ -218,7 +228,7 @@
   if (signout_type == kAllAccounts || signout_type == kMainAccount) {
     signout_header_value =
         base::StringPrintf("email=\"%s\", obfuscatedid=\"%s\", sessionindex=1",
-                           kMainEmail, kMainGaiaID);
+                           main_email.c_str(), kMainGaiaID);
   }
   if (signout_type == kAllAccounts || signout_type == kSecondaryAccount) {
     if (!signout_header_value.empty())
@@ -311,8 +321,10 @@
   ~DiceBrowserTestBase() override {}
 
   explicit DiceBrowserTestBase(
-      AccountConsistencyMethod account_consistency_method)
+      AccountConsistencyMethod account_consistency_method,
+      const std::string& main_email)
       : scoped_account_consistency_(account_consistency_method),
+        main_email_(main_email),
         https_server_(net::EmbeddedTestServer::TYPE_HTTPS),
         enable_sync_requested_(false),
         token_requested_(false),
@@ -323,15 +335,15 @@
         reconcilor_unblocked_count_(0),
         reconcilor_started_count_(0) {
     https_server_.RegisterDefaultHandler(base::BindRepeating(
-        &FakeGaia::HandleSigninURL,
+        &FakeGaia::HandleSigninURL, main_email_,
         base::BindRepeating(&DiceBrowserTestBase::OnSigninRequest,
                             base::Unretained(this))));
     https_server_.RegisterDefaultHandler(base::BindRepeating(
-        &FakeGaia::HandleEnableSyncURL,
+        &FakeGaia::HandleEnableSyncURL, main_email_,
         base::BindRepeating(&DiceBrowserTestBase::OnEnableSyncRequest,
                             base::Unretained(this))));
     https_server_.RegisterDefaultHandler(
-        base::BindRepeating(&FakeGaia::HandleSignoutURL));
+        base::BindRepeating(&FakeGaia::HandleSignoutURL, main_email_));
     https_server_.RegisterDefaultHandler(base::BindRepeating(
         &FakeGaia::HandleOAuth2TokenExchangeURL,
         base::BindRepeating(&DiceBrowserTestBase::OnTokenExchangeRequest,
@@ -374,10 +386,10 @@
     return SigninManagerFactory::GetForProfile(browser()->profile());
   }
 
-  // Returns the account ID associated with kMainEmail, kMainGaiaID.
+  // Returns the account ID associated with |main_email_|, kMainGaiaID.
   std::string GetMainAccountID() {
     return GetAccountTrackerService()->PickAccountIdForAccount(kMainGaiaID,
-                                                               kMainEmail);
+                                                               main_email_);
   }
 
   // Returns the account ID associated with kSecondaryEmail, kSecondaryGaiaID.
@@ -395,7 +407,7 @@
     // Signin main account.
     SigninManager* signin_manager = GetSigninManager();
     signin_manager->StartSignInWithRefreshToken(
-        "existing_refresh_token", kMainGaiaID, kMainEmail, "password",
+        "existing_refresh_token", kMainGaiaID, main_email_, "password",
         SigninManager::OAuthTokenFetchedCallback());
     ASSERT_TRUE(GetTokenService()->RefreshTokenIsAvailable(GetMainAccountID()));
     ASSERT_FALSE(GetTokenService()->RefreshTokenHasError(GetMainAccountID()));
@@ -603,7 +615,8 @@
     EXPECT_EQ(count, token_revoked_count_);
   }
 
-  ScopedAccountConsistency scoped_account_consistency_;
+  const ScopedAccountConsistency scoped_account_consistency_;
+  const std::string main_email_;
   net::EmbeddedTestServer https_server_;
   bool enable_sync_requested_;
   bool token_requested_;
@@ -634,13 +647,15 @@
 
 class DiceBrowserTest : public DiceBrowserTestBase {
  public:
-  DiceBrowserTest() : DiceBrowserTestBase(AccountConsistencyMethod::kDice) {}
+  DiceBrowserTest()
+      : DiceBrowserTestBase(AccountConsistencyMethod::kDice, kMainGmailEmail) {}
 };
 
 class DiceFixAuthErrorsBrowserTest : public DiceBrowserTestBase {
  public:
   DiceFixAuthErrorsBrowserTest()
-      : DiceBrowserTestBase(AccountConsistencyMethod::kDiceFixAuthErrors) {}
+      : DiceBrowserTestBase(AccountConsistencyMethod::kDiceFixAuthErrors,
+                            kMainGmailEmail) {}
 };
 
 // Checks that signin on Gaia triggers the fetch for a refresh token.
@@ -1072,3 +1087,63 @@
   EXPECT_FALSE(AccountConsistencyModeManager::IsDiceEnabledForProfile(
       incognito_browser->profile()));
 }
+
+// This test is not specifically related to DICE, but it extends
+// |DiceBrowserTestBase| for convenience.
+class DiceManageAccountBrowserTest : public DiceBrowserTestBase {
+ public:
+  DiceManageAccountBrowserTest()
+      : DiceBrowserTestBase(AccountConsistencyMethod::kDice, kMainManagedEmail),
+        // Skip showing the error message box to avoid freezing the main thread.
+        skip_message_box_auto_reset_(
+            &chrome::internal::g_should_skip_message_box_for_test,
+            true),
+        // Force the policy component to prohibit clearing the primary account
+        // even when the policy core component is not initialized.
+        prohibit_sigout_auto_reset_(
+            &policy::internal::g_force_prohibit_signout_for_tests,
+            true) {}
+
+ protected:
+  base::AutoReset<bool> skip_message_box_auto_reset_;
+  base::AutoReset<bool> prohibit_sigout_auto_reset_;
+  unsigned int number_of_profiles_added_ = 0;
+};
+
+// Tests that prohiting sign-in on startup for a managed profile clears the
+// profile directory on next start-up.
+IN_PROC_BROWSER_TEST_F(DiceManageAccountBrowserTest,
+                       PRE_ClearManagedProfileOnStartup) {
+  // Ensure that there are not deleted profiles before running this test.
+  PrefService* local_state = g_browser_process->local_state();
+  DCHECK(local_state);
+  const base::ListValue* deleted_profiles =
+      local_state->GetList(prefs::kProfilesDeleted);
+  ASSERT_TRUE(deleted_profiles);
+  ASSERT_TRUE(deleted_profiles->GetList().empty());
+
+  // Sign the profile in.
+  SetupSignedInAccounts();
+
+  // Prohibit sign-in on next start-up.
+  browser()->profile()->GetPrefs()->SetBoolean(
+      prefs::kSigninAllowedOnNextStartup, false);
+}
+
+IN_PROC_BROWSER_TEST_F(DiceManageAccountBrowserTest,
+                       ClearManagedProfileOnStartup) {
+  // Initial profile should have been deleted as sign-in and sign out were no
+  // longer allowed.
+  PrefService* local_state = g_browser_process->local_state();
+  DCHECK(local_state);
+  const base::ListValue* deleted_profiles =
+      local_state->GetList(prefs::kProfilesDeleted);
+  EXPECT_TRUE(deleted_profiles);
+  EXPECT_EQ(1U, deleted_profiles->GetList().size());
+
+  // Verify that there is an active profile.
+  Profile* initial_profile = browser()->profile();
+  EXPECT_EQ(1U, g_browser_process->profile_manager()->GetNumberOfProfiles());
+  EXPECT_EQ(g_browser_process->profile_manager()->GetLastUsedProfile(),
+            initial_profile);
+}
diff --git a/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc b/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc
index b5cdd00..0c57d4c 100644
--- a/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc
+++ b/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc
@@ -850,10 +850,18 @@
     return;
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  ScopedBatchChange batch(this);
-
   VLOG(1) << "MutablePO2TS::RevokeAllCredentials";
-  CancelWebTokenFetch();
+
+  ScopedBatchChange batch(this);
+  if (load_credentials_state() == LOAD_CREDENTIALS_IN_PROGRESS) {
+    VLOG(1) << "MutablePO2TS::RevokeAllCredentials before tokens are loaded.";
+    // If |RevokeAllCredentials| is called while credentials are being loaded,
+    // then the load must be cancelled and the load credentials state updated.
+    DCHECK_NE(0, web_data_service_request_);
+    CancelWebTokenFetch();
+    set_load_credentials_state(LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS);
+    FinishLoadingCredentials();
+  }
 
   // Make a temporary copy of the account ids.
   std::vector<std::string> accounts;
@@ -864,7 +872,7 @@
 
   DCHECK_EQ(0u, refresh_tokens_.size());
 
-  // Make sure all tokens are removed.
+  // Make sure all tokens are removed from storage.
   if (token_web_data_)
     token_web_data_->RemoveAllTokens();
 }
diff --git a/chrome/browser/signin/signin_util.cc b/chrome/browser/signin/signin_util.cc
index 90096d8..ea55bfb 100644
--- a/chrome/browser/signin/signin_util.cc
+++ b/chrome/browser/signin/signin_util.cc
@@ -6,19 +6,112 @@
 
 #include <memory>
 
+#include "base/bind.h"
+#include "base/macros.h"
+#include "base/strings/utf_string_conversions.h"
 #include "base/supports_user_data.h"
+#include "base/task/post_task.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
+#include "chrome/browser/policy/cloud/user_policy_signin_service_internal.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profiles_state.h"
+#include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/ui/browser_list_observer.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/simple_message_box.h"
+#include "chrome/browser/ui/startup/startup_types.h"
+#include "chrome/browser/ui/webui/profile_helper.h"
 #include "chrome/common/pref_names.h"
+#include "chrome/common/url_constants.h"
+#include "chrome/grit/generated_resources.h"
+#include "components/google/core/common/google_util.h"
 #include "components/prefs/pref_service.h"
+#include "components/signin/core/browser/signin_manager.h"
+#include "ui/base/l10n/l10n_util.h"
 
 namespace signin_util {
 namespace {
 
 constexpr char kSignoutSettingKey[] = "signout_setting";
 
-class UserSignoutSetting : public base::SupportsUserData::Data {
+#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
+#define CAN_DELETE_PROFILE
+#endif
+
+#if defined(CAN_DELETE_PROFILE)
+// Manager that presents the profile will be deleted dialog on the first active
+// browser window.
+class DeleteProfileDialogManager : public BrowserListObserver {
  public:
+  class Delegate {
+   public:
+    // Called when the profile was marked for deletion. It is safe for the
+    // delegate to delete |manager| when this is called.
+    virtual void OnProfileDeleted(DeleteProfileDialogManager* manager) = 0;
+  };
+
+  DeleteProfileDialogManager(Profile* profile,
+                             std::string primary_account_email,
+                             Delegate* delegate)
+      : profile_(profile),
+        primary_account_email_(primary_account_email),
+        delegate_(delegate),
+        browser_observer_(this) {}
+  ~DeleteProfileDialogManager() override {}
+
+  void PresentDialogOnAllBrowserWindows() {
+    browser_observer_.Add(BrowserList::GetInstance());
+    Browser* active_browser = chrome::FindLastActiveWithProfile(profile_);
+    if (active_browser)
+      OnBrowserSetLastActive(active_browser);
+  }
+
+  void OnBrowserSetLastActive(Browser* browser) override {
+    DCHECK(profile_);
+    if (browser->profile() != profile_)
+      return;
+
+    DCHECK(browser->window()->GetNativeWindow());
+    chrome::ShowWarningMessageBox(
+        browser->window()->GetNativeWindow(),
+        l10n_util::GetStringUTF16(IDS_PROFILE_WILL_BE_DELETED_DIALOG_TITLE),
+        l10n_util::GetStringFUTF16(
+            IDS_PROFILE_WILL_BE_DELETED_DIALOG_DESCRIPTION,
+            base::ASCIIToUTF16(primary_account_email_),
+            base::ASCIIToUTF16(
+                gaia::ExtractDomainName(primary_account_email_))),
+        /*can_close=*/false);
+
+    webui::DeleteProfileAtPath(
+        profile_->GetPath(),
+        ProfileMetrics::DELETE_PROFILE_PRIMARY_ACCOUNT_NOT_ALLOWED);
+    delegate_->OnProfileDeleted(this);
+  }
+
+ private:
+  Profile* profile_;
+  std::string primary_account_email_;
+  Delegate* delegate_;
+  ScopedObserver<BrowserList, DeleteProfileDialogManager> browser_observer_;
+
+  DISALLOW_COPY_AND_ASSIGN(DeleteProfileDialogManager);
+};
+#endif  // defined(CAN_DELETE_PROFILE)
+
+// Per-profile manager for the signout allowed setting.
+#if defined(CAN_DELETE_PROFILE)
+class UserSignoutSetting : public base::SupportsUserData::Data,
+                           public DeleteProfileDialogManager::Delegate {
+#else
+class UserSignoutSetting : public base::SupportsUserData::Data {
+#endif  // defined(CAN_DELETE_PROFILE)
+ public:
+  enum class State { kUndefined, kAllowed, kDisallowed };
+
   // Fetch from Profile. Make and store if not already present.
   static UserSignoutSetting* GetForProfile(Profile* profile) {
     UserSignoutSetting* signout_setting = static_cast<UserSignoutSetting*>(
@@ -34,14 +127,31 @@
     return signout_setting;
   }
 
-  bool is_user_signout_allowed() const { return is_user_signout_allowed_; }
-  void set_is_user_signout_allowed(bool is_allowed) {
-    is_user_signout_allowed_ = is_allowed;
+  State state() const { return state_; }
+  void set_state(State state) { state_ = state; }
+
+#if defined(CAN_DELETE_PROFILE)
+  // Shows the delete profile dialog on the first browser active window.
+  void ShowDeleteProfileDialog(Profile* profile, const std::string& email) {
+    if (delete_profile_dialog_manager_)
+      return;
+    delete_profile_dialog_manager_ =
+        std::make_unique<DeleteProfileDialogManager>(profile, email, this);
+    delete_profile_dialog_manager_->PresentDialogOnAllBrowserWindows();
   }
 
+  void OnProfileDeleted(DeleteProfileDialogManager* dialog_manager) override {
+    DCHECK_EQ(delete_profile_dialog_manager_.get(), dialog_manager);
+    delete_profile_dialog_manager_.reset();
+  }
+#endif
+
  private:
-  // User sign-out allowed by default.
-  bool is_user_signout_allowed_ = true;
+  State state_ = State::kUndefined;
+
+#if defined(CAN_DELETE_PROFILE)
+  std::unique_ptr<DeleteProfileDialogManager> delete_profile_dialog_manager_;
+#endif
 };
 
 enum ForceSigninPolicyCache {
@@ -75,13 +185,70 @@
   g_is_force_signin_enabled_cache = NOT_CACHED;
 }
 
-void SetUserSignoutAllowedForProfile(Profile* profile, bool is_allowed) {
-  UserSignoutSetting::GetForProfile(profile)->set_is_user_signout_allowed(
-      is_allowed);
+bool IsUserSignoutAllowedForProfile(Profile* profile) {
+  return UserSignoutSetting::GetForProfile(profile)->state() ==
+         UserSignoutSetting::State::kAllowed;
 }
 
-bool IsUserSignoutAllowedForProfile(Profile* profile) {
-  return UserSignoutSetting::GetForProfile(profile)->is_user_signout_allowed();
+void EnsureUserSignoutAllowedIsInitializedForProfile(Profile* profile) {
+  if (UserSignoutSetting::GetForProfile(profile)->state() ==
+      UserSignoutSetting::State::kUndefined) {
+    SetUserSignoutAllowedForProfile(profile, true);
+  }
+}
+
+void SetUserSignoutAllowedForProfile(Profile* profile, bool is_allowed) {
+  UserSignoutSetting::State new_state =
+      is_allowed ? UserSignoutSetting::State::kAllowed
+                 : UserSignoutSetting::State::kDisallowed;
+  UserSignoutSetting::GetForProfile(profile)->set_state(new_state);
+}
+
+void EnsurePrimaryAccountAllowedForProfile(Profile* profile) {
+// All primary accounts are allowed on ChromeOS, so this method is a no-op on
+// ChromeOS.
+#if !defined(OS_CHROMEOS)
+  SigninManager* signin_manager = SigninManagerFactory::GetForProfile(profile);
+  if (!signin_manager->IsAuthenticated())
+    return;
+
+  AccountInfo primary_account = signin_manager->GetAuthenticatedAccountInfo();
+  if (signin_manager->IsSigninAllowed() &&
+      signin_manager->IsAllowedUsername(primary_account.email)) {
+    return;
+  }
+
+  UserSignoutSetting* signout_setting =
+      UserSignoutSetting::GetForProfile(profile);
+  switch (signout_setting->state()) {
+    case UserSignoutSetting::State::kUndefined:
+      NOTREACHED();
+      break;
+    case UserSignoutSetting::State::kAllowed:
+      // Force clear the primary account if it is no longer allowed and if sign
+      // out is allowed.
+      signin_manager->SignOut(
+          signin_metrics::SIGNIN_NOT_ALLOWED_ON_PROFILE_INIT,
+          signin_metrics::SignoutDelete::IGNORE_METRIC);
+      break;
+    case UserSignoutSetting::State::kDisallowed:
+#if defined(CAN_DELETE_PROFILE)
+      // Force remove the profile if sign out is not allowed and if the
+      // primary account is no longer allowed.
+      // This may be called while the profile is initializing, so it must be
+      // scheduled for later to allow the profile initialization to complete.
+      CHECK(profiles::IsMultipleProfilesEnabled());
+      base::ThreadTaskRunnerHandle::Get()->PostTask(
+          FROM_HERE,
+          base::BindOnce(&UserSignoutSetting::ShowDeleteProfileDialog,
+                         base::Unretained(signout_setting), profile,
+                         primary_account.email));
+#else
+      CHECK(false) << "Deleting profiles is not supported.";
+#endif  // defined(CAN_DELETE_PROFILE)
+      break;
+  }
+#endif  // !defined(OS_CHROMEOS)
 }
 
 }  // namespace signin_util
diff --git a/chrome/browser/signin/signin_util.h b/chrome/browser/signin/signin_util.h
index b24763ae..a578bbdc 100644
--- a/chrome/browser/signin/signin_util.h
+++ b/chrome/browser/signin/signin_util.h
@@ -19,6 +19,9 @@
 // Reset force sign in to uninitialized state for testing.
 void ResetForceSigninForTesting();
 
+// Returns true if clearing the primary profile is allowed.
+bool IsUserSignoutAllowedForProfile(Profile* profile);
+
 // Sign-out is allowed by default, but some Chrome profiles (e.g. for cloud-
 // managed enterprise accounts) may wish to disallow user-initiated sign-out.
 // Note that this exempts sign-outs that are not user-initiated (e.g. sign-out
@@ -26,7 +29,18 @@
 // ChromeSigninClient::PreSignOut().
 void SetUserSignoutAllowedForProfile(Profile* profile, bool is_allowed);
 
-bool IsUserSignoutAllowedForProfile(Profile* profile);
+// Updates the user sign-out state to |true| if is was never initialized.
+// This should be called at the end of the flow to initialize a profile to
+// ensure that the signout allowed flag is updated.
+void EnsureUserSignoutAllowedIsInitializedForProfile(Profile* profile);
+
+// Ensures that the primary account for |profile| is allowed:
+// * If profile does not have any primary account, then this is a no-op.
+// * If |IsUserSignoutAllowedForProfile| is allowed and the primary account
+//   is no longer allowed, then this clears the primary account.
+// * If |IsUserSignoutAllowedForProfile| is not allowed and the primary account
+//   is not longer allowed, then this removes the profile.
+void EnsurePrimaryAccountAllowedForProfile(Profile* profile);
 
 }  // namespace signin_util
 
diff --git a/chrome/browser/sync/test/integration/single_client_standalone_transport_sync_test.cc b/chrome/browser/sync/test/integration/single_client_standalone_transport_sync_test.cc
index ee8736c..f3c92dc 100644
--- a/chrome/browser/sync/test/integration/single_client_standalone_transport_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_standalone_transport_sync_test.cc
@@ -150,7 +150,7 @@
 
   // Turn off Sync-the-feature by user choice. The machinery should start up
   // again in transport-only mode.
-  GetSyncService(0)->RequestStop(syncer::SyncService::KEEP_DATA);
+  GetSyncService(0)->GetUserSettings()->SetSyncRequested(false);
   EXPECT_TRUE(GetClient(0)->AwaitSyncSetupCompletion(
       /*skip_passphrase_verification=*/false));
 
@@ -165,7 +165,7 @@
   EXPECT_TRUE(bad_types.Empty()) << syncer::ModelTypeSetToString(bad_types);
 
   // Finally, turn Sync-the-feature on again.
-  GetSyncService(0)->RequestStart();
+  GetSyncService(0)->GetUserSettings()->SetSyncRequested(true);
   EXPECT_TRUE(GetClient(0)->AwaitSyncSetupCompletion(
       /*skip_passphrase_verification=*/false));
   EXPECT_EQ(syncer::SyncService::TransportState::ACTIVE,
diff --git a/chrome/browser/ui/android/simple_message_box_android.cc b/chrome/browser/ui/android/simple_message_box_android.cc
index 387061ea..c00b0c0 100644
--- a/chrome/browser/ui/android/simple_message_box_android.cc
+++ b/chrome/browser/ui/android/simple_message_box_android.cc
@@ -13,7 +13,8 @@
 
 void ShowWarningMessageBox(gfx::NativeWindow parent,
                            const base::string16& title,
-                           const base::string16& message) {
+                           const base::string16& message,
+                           bool can_close) {
   NOTIMPLEMENTED();
 }
 
diff --git a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
index ab75458..b4f8f6e 100644
--- a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
+++ b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
@@ -67,6 +67,7 @@
 #include "services/ws/public/mojom/user_activity_monitor.mojom.h"
 #include "ui/aura/mus/property_converter.h"
 #include "ui/aura/mus/user_activity_forwarder.h"
+#include "ui/aura/mus/window_tree_client.h"
 #include "ui/base/ime/chromeos/input_method_manager.h"
 #include "ui/base/ui_base_features.h"
 #include "ui/base/user_activity/user_activity_detector.h"
@@ -327,6 +328,10 @@
   app_list_client_.reset();
   ash_shell_init_.reset();
 
+  // WindowTreeClient needs to do some shutdown while the IO thread is alive.
+  if (mus_client_)
+    mus_client_->window_tree_client()->OnEarlyShutdown();
+
   chromeos::NetworkConnect::Shutdown();
   network_connect_delegate_.reset();
 }
diff --git a/chrome/browser/ui/signin_view_controller.cc b/chrome/browser/ui/signin_view_controller.cc
index 15f66d0b..08c12178 100644
--- a/chrome/browser/ui/signin_view_controller.cc
+++ b/chrome/browser/ui/signin_view_controller.cc
@@ -165,21 +165,11 @@
   // The delegate will delete itself on request of the UI code when the widget
   // is closed.
   delegate_ = SigninViewControllerDelegate::CreateSyncConfirmationDelegate(
-      this, browser, false /* is consent bump */);
+      this, browser);
   chrome::RecordDialogCreation(
       chrome::DialogIdentifier::SIGN_IN_SYNC_CONFIRMATION);
 }
 
-void SigninViewController::ShowModalSyncConsentBump(Browser* browser) {
-  CloseModalSignin();
-  // The delegate will delete itself on request of the UI code when the widget
-  // is closed.
-  delegate_ = SigninViewControllerDelegate::CreateSyncConfirmationDelegate(
-      this, browser, true /* is consent bump */);
-  chrome::RecordDialogCreation(
-      chrome::DialogIdentifier::UNITY_SYNC_CONSENT_BUMP);
-}
-
 void SigninViewController::ShowModalSigninErrorDialog(Browser* browser) {
   CloseModalSignin();
   // The delegate will delete itself on request of the UI code when the widget
diff --git a/chrome/browser/ui/signin_view_controller.h b/chrome/browser/ui/signin_view_controller.h
index 7a3013f..4dd0a897 100644
--- a/chrome/browser/ui/signin_view_controller.h
+++ b/chrome/browser/ui/signin_view_controller.h
@@ -61,10 +61,6 @@
   // of the |browser|'s window.
   void ShowModalSyncConfirmationDialog(Browser* browser);
 
-  // Shows the modal sync consent bump as a browser-modal dialog on top
-  // of the |browser|'s window.
-  void ShowModalSyncConsentBump(Browser* browser);
-
   // Shows the modal sign-in error dialog as a browser-modal dialog on top of
   // the |browser|'s window.
   void ShowModalSigninErrorDialog(Browser* browser);
diff --git a/chrome/browser/ui/signin_view_controller_delegate.h b/chrome/browser/ui/signin_view_controller_delegate.h
index 475247b..5bdf013 100644
--- a/chrome/browser/ui/signin_view_controller_delegate.h
+++ b/chrome/browser/ui/signin_view_controller_delegate.h
@@ -41,8 +41,7 @@
   // itself when the window it's managing is closed.
   static SigninViewControllerDelegate* CreateSyncConfirmationDelegate(
       SigninViewController* signin_view_controller,
-      Browser* browser,
-      bool is_consent_bump = false);
+      Browser* browser);
 
   // Returns a platform-specific SigninViewControllerDelegate instance that
   // displays the modal sign in error dialog. The returned object should delete
diff --git a/chrome/browser/ui/simple_message_box.h b/chrome/browser/ui/simple_message_box.h
index 6a8a7c8..7077891 100644
--- a/chrome/browser/ui/simple_message_box.h
+++ b/chrome/browser/ui/simple_message_box.h
@@ -34,12 +34,16 @@
 // non-NULL, the box will be made modal to the |parent|, except on Mac, where it
 // is always app-modal.
 //
+// If |can_close| is false, then this dialog will not show the close button and
+// the dialog will only be dismissed when the user presses the OK button.
+//
 // NOTE: In general, you should avoid this since it's usually poor UI.
 // We have a variety of other surfaces such as app menu notifications and
 // infobars; consult the UI leads for a recommendation.
 void ShowWarningMessageBox(gfx::NativeWindow parent,
                            const base::string16& title,
-                           const base::string16& message);
+                           const base::string16& message,
+                           bool can_close = true);
 
 // As above, but shows the dialog box asynchronously with a checkbox.
 // |callback| will be invoked after the dialog is dismissed. It is invoked with
diff --git a/chrome/browser/ui/tab_contents/tab_contents_iterator_unittest.cc b/chrome/browser/ui/tab_contents/tab_contents_iterator_unittest.cc
index e15a6d660..a7c97de 100644
--- a/chrome/browser/ui/tab_contents/tab_contents_iterator_unittest.cc
+++ b/chrome/browser/ui/tab_contents/tab_contents_iterator_unittest.cc
@@ -4,29 +4,17 @@
 
 #include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
 
-#include <stddef.h>
-
 #include <algorithm>
+#include <memory>
 
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/lifetime/application_lifetime.h"
-#include "chrome/browser/lifetime/browser_shutdown.h"
-#include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/common/pref_names.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/test_browser_window.h"
-#include "chrome/test/base/testing_profile_manager.h"
-#include "components/prefs/pref_registry_simple.h"
-#include "components/prefs/testing_pref_service.h"
-
-#if defined(OS_WIN)
-#include "components/metrics/metrics_pref_names.h"
-#endif
 
 typedef BrowserWithTestWindowTest BrowserListTest;
 
@@ -162,23 +150,3 @@
   browser3->tab_strip_model()->CloseAllTabs();
 }
 
-#if defined(OS_CHROMEOS)
-// Calling AttemptRestart on ChromeOS will exit the test.
-#define MAYBE_AttemptRestart DISABLED_AttemptRestart
-#else
-#define MAYBE_AttemptRestart AttemptRestart
-#endif
-
-TEST_F(BrowserListTest, MAYBE_AttemptRestart) {
-  ASSERT_TRUE(g_browser_process);
-  TestingPrefServiceSimple* testing_pref_service =
-      profile_manager()->local_state()->Get();
-
-  EXPECT_FALSE(testing_pref_service->GetBoolean(prefs::kWasRestarted));
-  chrome::AttemptRestart();
-  EXPECT_TRUE(testing_pref_service->GetBoolean(prefs::kWasRestarted));
-
-  // Cancel the effects of us calling chrome::AttemptRestart. Otherwise tests
-  // ran after this one will fail.
-  browser_shutdown::SetTryingToQuit(false);
-}
diff --git a/chrome/browser/ui/views/frame/hosted_app_button_container.cc b/chrome/browser/ui/views/frame/hosted_app_button_container.cc
index 6cbeade..a2c54a61 100644
--- a/chrome/browser/ui/views/frame/hosted_app_button_container.cc
+++ b/chrome/browser/ui/views/frame/hosted_app_button_container.cc
@@ -184,15 +184,6 @@
       inactive_color_(inactive_color),
       hosted_app_origin_text_(new HostedAppOriginText(browser_view->browser())),
       content_settings_container_(new ContentSettingsContainer(this)),
-      page_action_icon_container_view_(new PageActionIconContainerView(
-          {PageActionIconType::kManagePasswords, PageActionIconType::kFind,
-           PageActionIconType::kZoom},
-          GetLayoutConstant(HOSTED_APP_PAGE_ACTION_ICON_SIZE),
-          HorizontalPaddingBetweenItems(),
-          browser_view->browser(),
-          browser_view->browser()->command_controller(),
-          this,
-          nullptr)),
       browser_actions_container_(
           new BrowserActionsContainer(browser_view->browser(),
                                       nullptr,
@@ -224,6 +215,17 @@
   AddChildView(content_settings_container_);
   UpdateContentSettingViewsVisibility();
 
+  PageActionIconContainerView::Params params;
+  params.types_enabled.push_back(PageActionIconType::kManagePasswords);
+  params.types_enabled.push_back(PageActionIconType::kFind);
+  params.types_enabled.push_back(PageActionIconType::kZoom);
+  params.icon_size = GetLayoutConstant(HOSTED_APP_PAGE_ACTION_ICON_SIZE);
+  params.icon_color = GetIconColor();
+  params.between_icon_spacing = HorizontalPaddingBetweenItems();
+  params.browser = browser_view_->browser();
+  params.command_updater = browser_view_->browser()->command_controller();
+  params.page_action_icon_delegate = this;
+  page_action_icon_container_view_ = new PageActionIconContainerView(params);
   views::SetHitTestComponent(page_action_icon_container_view_,
                              static_cast<int>(HTCLIENT));
   AddChildView(page_action_icon_container_view_);
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
index dbb9d0e..08cf89b 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -212,20 +212,23 @@
     AddChildView(image_view);
   }
 
-  std::vector<PageActionIconType> page_action_icon_types;
-  page_action_icon_types.push_back(PageActionIconType::kManagePasswords);
+  PageActionIconContainerView::Params params;
+  params.types_enabled.push_back(PageActionIconType::kManagePasswords);
   // |browser_| may be null when LocationBarView is used for non-Browser windows
   // such as PresentationReceiverWindowView, which do not support page actions.
   if (browser_) {
-    page_action_icon_types.push_back(PageActionIconType::kFind);
-    page_action_icon_types.push_back(PageActionIconType::kZoom);
+    params.types_enabled.push_back(PageActionIconType::kFind);
+    params.types_enabled.push_back(PageActionIconType::kZoom);
   }
-
-  page_action_icon_container_view_ = new PageActionIconContainerView(
-      page_action_icon_types, GetLayoutConstant(LOCATION_BAR_ICON_SIZE), 0,
-      browser_, command_updater(), this, delegate_);
+  params.icon_size = GetLayoutConstant(LOCATION_BAR_ICON_SIZE);
+  params.icon_color = icon_color;
+  params.between_icon_spacing = 0;
+  params.browser = browser_;
+  params.command_updater = command_updater();
+  params.page_action_icon_delegate = this;
+  params.location_bar_delegate = delegate_;
+  page_action_icon_container_view_ = new PageActionIconContainerView(params);
   AddChildView(page_action_icon_container_view_);
-  page_action_icon_container_view_->SetIconColor(icon_color);
 
   if (browser_) {
     save_credit_card_icon_view_ = new autofill::SaveCardIconView(
diff --git a/chrome/browser/ui/views/page_action/page_action_icon_container_view.cc b/chrome/browser/ui/views/page_action/page_action_icon_container_view.cc
index bca847b6..f8ca353 100644
--- a/chrome/browser/ui/views/page_action/page_action_icon_container_view.cc
+++ b/chrome/browser/ui/views/page_action/page_action_icon_container_view.cc
@@ -11,35 +11,38 @@
 #include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h"
 #include "ui/views/layout/box_layout.h"
 
-PageActionIconContainerView::PageActionIconContainerView(
-    const std::vector<PageActionIconType>& types_enabled,
-    int icon_size,
-    int between_icon_spacing,
-    Browser* browser,
-    CommandUpdater* command_updater,
-    PageActionIconView::Delegate* page_action_icon_delegate,
-    LocationBarView::Delegate* location_bar_delegate)
+PageActionIconContainerView::Params::Params() = default;
+PageActionIconContainerView::Params::~Params() = default;
+
+PageActionIconContainerView::PageActionIconContainerView(const Params& params)
     : zoom_observer_(this) {
+  DCHECK_GT(params.icon_size, 0);
+  DCHECK_NE(params.icon_color, gfx::kPlaceholderColor);
+  DCHECK(params.page_action_icon_delegate);
+
   views::BoxLayout& layout =
       *SetLayoutManager(std::make_unique<views::BoxLayout>(
-          views::BoxLayout::kHorizontal, gfx::Insets(), between_icon_spacing));
+          views::BoxLayout::kHorizontal, gfx::Insets(),
+          params.between_icon_spacing));
   // Right align to clip the leftmost items first when not enough space.
   layout.set_main_axis_alignment(views::BoxLayout::MAIN_AXIS_ALIGNMENT_END);
 
-  for (PageActionIconType type : types_enabled) {
+  for (PageActionIconType type : params.types_enabled) {
     switch (type) {
       case PageActionIconType::kFind:
-        find_bar_icon_ = new FindBarIcon(browser, page_action_icon_delegate);
+        find_bar_icon_ =
+            new FindBarIcon(params.browser, params.page_action_icon_delegate);
         page_action_icons_.push_back(find_bar_icon_);
         break;
       case PageActionIconType::kManagePasswords:
+        DCHECK(params.command_updater);
         manage_passwords_icon_ = new ManagePasswordsIconViews(
-            command_updater, page_action_icon_delegate);
+            params.command_updater, params.page_action_icon_delegate);
         page_action_icons_.push_back(manage_passwords_icon_);
         break;
       case PageActionIconType::kZoom:
-        zoom_view_ =
-            new ZoomView(location_bar_delegate, page_action_icon_delegate);
+        zoom_view_ = new ZoomView(params.location_bar_delegate,
+                                  params.page_action_icon_delegate);
         page_action_icons_.push_back(zoom_view_);
         break;
     }
@@ -47,14 +50,15 @@
 
   for (PageActionIconView* icon : page_action_icons_) {
     icon->SetVisible(false);
-    icon->set_icon_size(icon_size);
+    icon->set_icon_size(params.icon_size);
     icon->Init();
+    icon->SetIconColor(params.icon_color);
     AddChildView(icon);
   }
 
-  if (browser) {
-    zoom_observer_.Add(
-        zoom::ZoomEventManager::GetForBrowserContext(browser->profile()));
+  if (params.browser) {
+    zoom_observer_.Add(zoom::ZoomEventManager::GetForBrowserContext(
+        params.browser->profile()));
   }
 }
 
diff --git a/chrome/browser/ui/views/page_action/page_action_icon_container_view.h b/chrome/browser/ui/views/page_action/page_action_icon_container_view.h
index 2096751..196dc00 100644
--- a/chrome/browser/ui/views/page_action/page_action_icon_container_view.h
+++ b/chrome/browser/ui/views/page_action/page_action_icon_container_view.h
@@ -12,6 +12,7 @@
 #include "components/zoom/zoom_event_manager.h"
 #include "components/zoom/zoom_event_manager_observer.h"
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/color_palette.h"
 #include "ui/views/view.h"
 
 class Browser;
@@ -24,14 +25,24 @@
                                     public PageActionIconContainer,
                                     public zoom::ZoomEventManagerObserver {
  public:
-  PageActionIconContainerView(
-      const std::vector<PageActionIconType>& types_enabled,
-      int icon_size,
-      int between_icon_spacing,
-      Browser* browser,
-      CommandUpdater* command_updater,
-      PageActionIconView::Delegate* page_action_icon_delegate,
-      LocationBarView::Delegate* location_bar_delegate);
+  struct Params {
+    Params();
+    ~Params();
+
+    std::vector<PageActionIconType> types_enabled;
+    int icon_size = 0;
+    SkColor icon_color = gfx::kPlaceholderColor;
+    int between_icon_spacing = 0;
+    Browser* browser = nullptr;
+    CommandUpdater* command_updater = nullptr;
+    PageActionIconView::Delegate* page_action_icon_delegate = nullptr;
+    LocationBarView::Delegate* location_bar_delegate = nullptr;
+
+   private:
+    DISALLOW_COPY_AND_ASSIGN(Params);
+  };
+
+  explicit PageActionIconContainerView(const Params& params);
   ~PageActionIconContainerView() override;
 
   PageActionIconView* GetPageActionIconView(PageActionIconType type);
@@ -43,7 +54,7 @@
   // whether any icons were activated.
   bool ActivateFirstInactiveBubbleForAccessibility();
 
-  // Update the icons color, must be called before painting.
+  // Update the icons color.
   void SetIconColor(SkColor icon_color);
 
   // See comment in browser_window.h for more info.
diff --git a/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.cc b/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.cc
index 5bfd0b6..d506263 100644
--- a/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.cc
+++ b/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.cc
@@ -197,12 +197,9 @@
 
 std::unique_ptr<views::WebView>
 SigninViewControllerDelegateViews::CreateSyncConfirmationWebView(
-    Browser* browser,
-    bool is_consent_bump) {
+    Browser* browser) {
   return CreateDialogWebView(
-      browser,
-      is_consent_bump ? chrome::kChromeUISyncConsentBumpURL
-                      : chrome::kChromeUISyncConfirmationURL,
+      browser, chrome::kChromeUISyncConfirmationURL,
       GetSyncConfirmationDialogPreferredHeight(browser->profile()),
       GetSyncConfirmationDialogPreferredWidth(browser->profile()));
 }
@@ -256,12 +253,10 @@
 SigninViewControllerDelegate*
 SigninViewControllerDelegate::CreateSyncConfirmationDelegate(
     SigninViewController* signin_view_controller,
-    Browser* browser,
-    bool is_consent_bump) {
+    Browser* browser) {
   return new SigninViewControllerDelegateViews(
       signin_view_controller,
-      SigninViewControllerDelegateViews::CreateSyncConfirmationWebView(
-          browser, is_consent_bump),
+      SigninViewControllerDelegateViews::CreateSyncConfirmationWebView(browser),
       browser, ui::MODAL_TYPE_WINDOW, true);
 }
 
diff --git a/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.h b/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.h
index 9fae456..eebf181 100644
--- a/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.h
+++ b/chrome/browser/ui/views/profiles/signin_view_controller_delegate_views.h
@@ -42,8 +42,7 @@
       signin_metrics::AccessPoint access_point);
 
   static std::unique_ptr<views::WebView> CreateSyncConfirmationWebView(
-      Browser* browser,
-      bool is_consent_bump = false);
+      Browser* browser);
 
   static std::unique_ptr<views::WebView> CreateSigninErrorWebView(
       Browser* browser);
diff --git a/chrome/browser/ui/views/simple_message_box_views.cc b/chrome/browser/ui/views/simple_message_box_views.cc
index 355fd27..93a41ef 100644
--- a/chrome/browser/ui/views/simple_message_box_views.cc
+++ b/chrome/browser/ui/views/simple_message_box_views.cc
@@ -58,7 +58,8 @@
                                   chrome::MessageBoxType type,
                                   const base::string16& yes_text,
                                   const base::string16& no_text,
-                                  const base::string16& checkbox_text) {
+                                  const base::string16& checkbox_text,
+                                  bool can_close) {
   chrome::MessageBoxResult result = chrome::MESSAGE_BOX_RESULT_NO;
 
   // TODO(pkotwicz): Exit message loop when the dialog is closed by some other
@@ -66,7 +67,7 @@
   base::RunLoop run_loop(base::RunLoop::Type::kNestableTasksAllowed);
 
   SimpleMessageBoxViews::Show(
-      parent, title, message, type, yes_text, no_text, checkbox_text,
+      parent, title, message, type, yes_text, no_text, checkbox_text, can_close,
       base::Bind(
           [](base::RunLoop* run_loop, chrome::MessageBoxResult* out_result,
              chrome::MessageBoxResult messagebox_result) {
@@ -92,10 +93,11 @@
     const base::string16& yes_text,
     const base::string16& no_text,
     const base::string16& checkbox_text,
+    bool can_close,
     SimpleMessageBoxViews::MessageBoxResultCallback callback) {
   if (!callback)
     return ShowSync(parent, title, message, type, yes_text, no_text,
-                    checkbox_text);
+                    checkbox_text, can_close);
 
   startup_metric_utils::SetNonBrowserUIDisplayed();
   if (chrome::internal::g_should_skip_message_box_for_test) {
@@ -148,8 +150,9 @@
   is_system_modal = false;
 #endif
 
-  SimpleMessageBoxViews* dialog = new SimpleMessageBoxViews(
-      title, message, type, yes_text, no_text, checkbox_text, is_system_modal);
+  SimpleMessageBoxViews* dialog =
+      new SimpleMessageBoxViews(title, message, type, yes_text, no_text,
+                                checkbox_text, is_system_modal, can_close);
   views::Widget* widget =
       constrained_window::CreateBrowserModalDialogViews(dialog, parent);
 
@@ -180,6 +183,10 @@
   return yes_text_;
 }
 
+bool SimpleMessageBoxViews::Close() {
+  return can_close_ ? DialogDelegate::Close() : false;
+}
+
 bool SimpleMessageBoxViews::Cancel() {
   result_ = chrome::MESSAGE_BOX_RESULT_NO;
   Done();
@@ -238,7 +245,8 @@
     const base::string16& yes_text,
     const base::string16& no_text,
     const base::string16& checkbox_text,
-    bool is_system_modal)
+    bool is_system_modal,
+    bool can_close)
     : window_title_(title),
       type_(type),
       yes_text_(yes_text),
@@ -246,7 +254,8 @@
       result_(chrome::MESSAGE_BOX_RESULT_NO),
       message_box_view_(new views::MessageBoxView(
           views::MessageBoxView::InitParams(message))),
-      is_system_modal_(is_system_modal) {
+      is_system_modal_(is_system_modal),
+      can_close_(can_close) {
   if (yes_text_.empty()) {
     yes_text_ =
         type_ == chrome::MESSAGE_BOX_TYPE_QUESTION
@@ -276,14 +285,19 @@
   std::move(result_callback_).Run(result_);
 }
 
+bool SimpleMessageBoxViews::ShouldShowCloseButton() const {
+  return can_close_;
+}
+
 namespace chrome {
 
 void ShowWarningMessageBox(gfx::NativeWindow parent,
                            const base::string16& title,
-                           const base::string16& message) {
+                           const base::string16& message,
+                           bool can_close) {
   SimpleMessageBoxViews::Show(
       parent, title, message, chrome::MESSAGE_BOX_TYPE_WARNING,
-      base::string16(), base::string16(), base::string16());
+      base::string16(), base::string16(), base::string16(), can_close);
 }
 
 void ShowWarningMessageBoxWithCheckbox(
@@ -294,7 +308,7 @@
     base::OnceCallback<void(bool checked)> callback) {
   SimpleMessageBoxViews::Show(
       parent, title, message, chrome::MESSAGE_BOX_TYPE_WARNING,
-      base::string16(), base::string16(), checkbox_text,
+      base::string16(), base::string16(), checkbox_text, /*can_close=*/true,
       base::Bind(
           [](base::OnceCallback<void(bool checked)> callback,
              MessageBoxResult message_box_result) {
@@ -309,7 +323,7 @@
                                         const base::string16& message) {
   return SimpleMessageBoxViews::Show(
       parent, title, message, chrome::MESSAGE_BOX_TYPE_QUESTION,
-      base::string16(), base::string16(), base::string16());
+      base::string16(), base::string16(), base::string16(), /*can_close=*/true);
 }
 
 MessageBoxResult ShowMessageBoxWithButtonText(gfx::NativeWindow parent,
@@ -319,7 +333,8 @@
                                               const base::string16& no_text) {
   return SimpleMessageBoxViews::Show(parent, title, message,
                                      chrome::MESSAGE_BOX_TYPE_QUESTION,
-                                     yes_text, no_text, base::string16());
+                                     yes_text, no_text, base::string16(),
+                                     /*can_close=*/true);
 }
 
 }  // namespace chrome
diff --git a/chrome/browser/ui/views/simple_message_box_views.h b/chrome/browser/ui/views/simple_message_box_views.h
index fea23b9..b9830ce 100644
--- a/chrome/browser/ui/views/simple_message_box_views.h
+++ b/chrome/browser/ui/views/simple_message_box_views.h
@@ -25,6 +25,7 @@
       const base::string16& yes_text,
       const base::string16& no_text,
       const base::string16& checkbox_text,
+      bool can_close,
       MessageBoxResultCallback callback = MessageBoxResultCallback());
 
   // views::DialogDelegate:
@@ -32,12 +33,14 @@
   base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
   bool Cancel() override;
   bool Accept() override;
+  bool Close() override;
   base::string16 GetWindowTitle() const override;
   void DeleteDelegate() override;
   ui::ModalType GetModalType() const override;
   views::View* GetContentsView() override;
   views::Widget* GetWidget() override;
   const views::Widget* GetWidget() const override;
+  bool ShouldShowCloseButton() const override;
 
   // views::WidgetObserver:
   void OnWidgetActivationChanged(views::Widget* widget, bool active) override;
@@ -49,7 +52,8 @@
                         const base::string16& yes_text,
                         const base::string16& no_text,
                         const base::string16& checkbox_text,
-                        bool is_system_modal);
+                        bool is_system_modal,
+                        bool can_close);
   ~SimpleMessageBoxViews() override;
 
   void Run(MessageBoxResultCallback result_callback);
@@ -63,6 +67,7 @@
   views::MessageBoxView* message_box_view_;
   MessageBoxResultCallback result_callback_;
   bool is_system_modal_;
+  bool can_close_;
 
   DISALLOW_COPY_AND_ASSIGN(SimpleMessageBoxViews);
 };
diff --git a/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_pin_setup.cc b/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_pin_setup.cc
index 3586320..c0d8abe 100644
--- a/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_pin_setup.cc
+++ b/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_pin_setup.cc
@@ -8,6 +8,7 @@
 
 #include "base/i18n/number_formatting.h"
 #include "base/values.h"
+#include "chrome/browser/chromeos/login/quick_unlock/pin_backend.h"
 #include "chrome/browser/ui/webui/chromeos/login/discover/discover_handler.h"
 #include "chrome/grit/browser_resources.h"
 #include "chrome/grit/generated_resources.h"
@@ -34,15 +35,22 @@
  private:
   // Message handlers.
   void HandleGetUserPassword(const std::string& callbackId);
+  void HandleGetHasLoginSupport(const std::string& callbackId);
+
+  // quick_unlock::PinBackend::HasLoginSupport callback.
+  void OnPinLoginAvailable(const std::string& callbackId, bool is_available);
 
   base::WeakPtr<DiscoverModulePinSetup> module_;
 
+  base::WeakPtrFactory<DiscoverModulePinSetupHandler> weak_factory_;
   DISALLOW_COPY_AND_ASSIGN(DiscoverModulePinSetupHandler);
 };
 
 DiscoverModulePinSetupHandler::DiscoverModulePinSetupHandler(
     base::WeakPtr<DiscoverModulePinSetup> module)
-    : DiscoverHandler(DiscoverModulePinSetup::kModuleName), module_(module) {}
+    : DiscoverHandler(DiscoverModulePinSetup::kModuleName),
+      module_(module),
+      weak_factory_(this) {}
 
 void DiscoverModulePinSetupHandler::DeclareLocalizedValues(
     ::login::LocalizedValuesBuilder* builder) {
@@ -57,7 +65,10 @@
   builder->Add("discoverPinSetupSkip", IDS_DISCOVER_PIN_SETUP_SKIP);
   builder->Add("discoverPinSetupTitle2", IDS_DISCOVER_PIN_SETUP_TITLE2);
   builder->Add("discoverPinSetupTitle3", IDS_DISCOVER_PIN_SETUP_TITLE3);
-  builder->Add("discoverPinSetupSubtitle3", IDS_DISCOVER_PIN_SETUP_SUBTITLE3);
+  builder->Add("discoverPinSetupSubtitle3NoLogin",
+               IDS_DISCOVER_PIN_SETUP_SUBTITLE3_NO_LOGIN);
+  builder->Add("discoverPinSetupSubtitle3WithLogin",
+               IDS_DISCOVER_PIN_SETUP_SUBTITLE3_WITH_LOGIN);
   builder->Add("discoverPinSetupPasswordTitle",
                IDS_DISCOVER_PIN_SETUP_PASSWORD_TITLE);
   builder->Add("discoverPinSetupPasswordSubTitle",
@@ -93,6 +104,8 @@
 void DiscoverModulePinSetupHandler::RegisterMessages() {
   AddCallback("discover.pinSetup.getUserPassword",
               &DiscoverModulePinSetupHandler::HandleGetUserPassword);
+  AddCallback("discover.pinSetup.getHasLoginSupport",
+              &DiscoverModulePinSetupHandler::HandleGetHasLoginSupport);
 }
 
 void DiscoverModulePinSetupHandler::HandleGetUserPassword(
@@ -103,6 +116,21 @@
   return;
 }
 
+void DiscoverModulePinSetupHandler::OnPinLoginAvailable(
+    const std::string& callbackId,
+    bool is_available) {
+  web_ui()->CallJavascriptFunctionUnsafe("window.discoverReturn",
+                                         base::Value(callbackId),
+                                         base::Value(is_available));
+}
+
+void DiscoverModulePinSetupHandler::HandleGetHasLoginSupport(
+    const std::string& callbackId) {
+  chromeos::quick_unlock::PinBackend::GetInstance()->HasLoginSupport(
+      base::BindOnce(&DiscoverModulePinSetupHandler::OnPinLoginAvailable,
+                     weak_factory_.GetWeakPtr(), callbackId));
+}
+
 }  // anonymous namespace
 
 /* ***************************************************************** */
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc
index b6c42b0..e53be43 100644
--- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc
+++ b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc
@@ -27,8 +27,7 @@
 #include "chrome/browser/signin/test_signin_client_builder.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
 #include "chrome/browser/sync/profile_sync_test_util.h"
-#include "chrome/browser/unified_consent/unified_consent_service_factory.h"
-#include "chrome/browser/unified_consent/unified_consent_test_util.h"
+#include "chrome/browser/unified_consent/chrome_unified_consent_service_client.h"
 #include "chrome/test/base/scoped_testing_local_state.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
@@ -41,7 +40,7 @@
 #include "components/signin/core/browser/signin_pref_names.h"
 #include "components/unified_consent/feature.h"
 #include "components/unified_consent/scoped_unified_consent.h"
-#include "components/unified_consent/unified_consent_service.h"
+#include "components/unified_consent/url_keyed_data_collection_consent_helper.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "google_apis/gaia/google_service_auth_error.h"
 #include "services/identity/public/cpp/identity_manager.h"
@@ -51,6 +50,7 @@
 using ::testing::AtLeast;
 using ::testing::Return;
 using ::testing::ReturnRef;
+using namespace unified_consent;
 
 class DiceTurnSyncOnHelperTestBase;
 
@@ -201,9 +201,6 @@
     profile_builder.AddTestingFactory(
         policy::UserPolicySigninServiceFactory::GetInstance(),
         base::BindRepeating(&FakeUserPolicySigninService::Build));
-    profile_builder.AddTestingFactory(
-        UnifiedConsentServiceFactory::GetInstance(),
-        base::BindRepeating(&BuildUnifiedConsentServiceForTesting));
     profile_ = profile_builder.Build();
     account_tracker_service_ =
         AccountTrackerServiceFactory::GetForProfile(profile());
@@ -417,13 +414,12 @@
     : public DiceTurnSyncOnHelperTestBase {
  public:
   DiceTurnSyncOnHelperTestWithUnifiedConsent()
-      : scoped_unified_consent_(
-            unified_consent::UnifiedConsentFeatureState::kEnabledNoBump) {}
+      : scoped_unified_consent_(UnifiedConsentFeatureState::kEnabledNoBump) {}
   ~DiceTurnSyncOnHelperTestWithUnifiedConsent() override {}
 
  private:
   ScopedAccountConsistencyDice scoped_dice_;
-  unified_consent::ScopedUnifiedConsent scoped_unified_consent_;
+  ScopedUnifiedConsent scoped_unified_consent_;
 };
 
 // TestDiceTurnSyncOnHelperDelegate implementation.
@@ -704,13 +700,31 @@
 // Tests that the user enabled unified consent,
 TEST_F(DiceTurnSyncOnHelperTestWithUnifiedConsent,
        ShowSyncDialogForEndConsumerAccount_UnifiedConsentEnabled) {
-  ASSERT_TRUE(unified_consent::IsUnifiedConsentFeatureEnabled());
+  ASSERT_TRUE(IsUnifiedConsentFeatureEnabled());
   // Set expectations.
   expected_sync_confirmation_shown_ = true;
   sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult::
       SYNC_WITH_DEFAULT_SETTINGS;
   SetExpectationsForSyncStartupCompleted();
   EXPECT_CALL(*GetProfileSyncServiceMock(), SetFirstSetupComplete()).Times(1);
+  using Service = UnifiedConsentServiceClient::Service;
+  using ServiceState = UnifiedConsentServiceClient::ServiceState;
+  PrefService* pref_service = profile()->GetPrefs();
+  ChromeUnifiedConsentServiceClient consent_service_client(pref_service);
+  std::unique_ptr<UrlKeyedDataCollectionConsentHelper>
+      url_keyed_collection_helper = UrlKeyedDataCollectionConsentHelper::
+          NewAnonymizedDataCollectionConsentHelper(
+              pref_service,
+              ProfileSyncServiceFactory::GetForProfile(profile()));
+  for (int i = 0; i <= static_cast<int>(Service::kLast); ++i) {
+    Service service = static_cast<Service>(i);
+    if (consent_service_client.IsServiceSupported(service)) {
+      consent_service_client.SetServiceEnabled(service, false);
+      EXPECT_EQ(ServiceState::kDisabled,
+                consent_service_client.GetServiceState(service));
+    }
+  }
+  EXPECT_FALSE(url_keyed_collection_helper->IsEnabled());
 
   // Signin flow.
   EXPECT_FALSE(signin_manager()->IsAuthenticated());
@@ -721,7 +735,14 @@
   EXPECT_TRUE(token_service()->RefreshTokenIsAvailable(account_id()));
   EXPECT_EQ(account_id(), signin_manager()->GetAuthenticatedAccountId());
   CheckDelegateCalls();
-  // TODO(crbug.com/908111): Check if Google services are enabled.
+  for (int i = 0; i <= static_cast<int>(Service::kLast); ++i) {
+    Service service = static_cast<Service>(i);
+    if (consent_service_client.IsServiceSupported(service)) {
+      EXPECT_EQ(ServiceState::kEnabled,
+                consent_service_client.GetServiceState(service));
+    }
+  }
+  EXPECT_TRUE(url_keyed_collection_helper->IsEnabled());
 }
 
 // For enterprise user, tests that the user is signed in only after Sync engine
diff --git a/chrome/browser/ui/webui/signin/login_ui_service.cc b/chrome/browser/ui/webui/signin/login_ui_service.cc
index 0f5acba3..c6649e8 100644
--- a/chrome/browser/ui/webui/signin/login_ui_service.cc
+++ b/chrome/browser/ui/webui/signin/login_ui_service.cc
@@ -21,160 +21,7 @@
 #include "components/signin/core/browser/signin_header_helper.h"
 
 #if !defined(OS_CHROMEOS)
-#include "base/scoped_observer.h"
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
-#include "chrome/browser/signin/signin_manager_factory.h"
-#include "chrome/browser/sync/profile_sync_service_factory.h"
-#include "chrome/browser/sync/sync_ui_util.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/browser_list.h"
-#include "chrome/browser/ui/browser_list_observer.h"
 #include "chrome/browser/ui/user_manager.h"
-#include "chrome/browser/unified_consent/unified_consent_service_factory.h"
-#include "components/signin/core/browser/profile_oauth2_token_service.h"
-#include "components/sync/base/sync_prefs.h"
-#include "components/unified_consent/feature.h"
-#include "components/unified_consent/pref_names.h"
-#include "components/unified_consent/unified_consent_service.h"
-
-// The sync consent bump is shown after startup when a profile's browser
-// instance becomes active or when there is already an active instance.
-// It is only shown when |ShouldShowConsentBumpFor(profile)| returns true for a
-// given profile |profile|.
-class ConsentBumpActivator : public BrowserListObserver,
-                             public LoginUIService::Observer,
-                             public OAuth2TokenService::Observer {
- public:
-  // Creates a ConsentBumpActivator for |profile| which is owned by
-  // |login_ui_service|.
-  ConsentBumpActivator(LoginUIService* login_ui_service, Profile* profile)
-      : login_ui_service_(login_ui_service),
-        profile_(profile),
-        scoped_browser_list_observer_(this),
-        scoped_login_ui_service_observer_(this),
-        scoped_token_service_observer_(this) {
-    ProfileOAuth2TokenService* token_service =
-        ProfileOAuth2TokenServiceFactory::GetForProfile(profile_);
-    if (token_service->AreAllCredentialsLoaded())
-      OnRefreshTokensLoaded();
-    else
-      scoped_token_service_observer_.Add(token_service);
-  }
-
-  // OAuth2TokenService::Observer:
-  void OnRefreshTokensLoaded() override {
-    scoped_token_service_observer_.RemoveAll();
-
-    SigninManager* signin_manager =
-        SigninManagerFactory::GetForProfile(profile_);
-    ProfileOAuth2TokenService* token_service =
-        ProfileOAuth2TokenServiceFactory::GetForProfile(profile_);
-
-    // Avoid showing the consent bump if the refresh token is missing or is in
-    // an permanent auth error state. When the tokens are loaded, this
-    // corresponds to the case when the refresh token was invalidated
-    // client-side after the user signed out of a Google website (e.g. the user
-    // signed out of Gmail).
-    if (token_service->RefreshTokenHasError(
-            signin_manager->GetAuthenticatedAccountId())) {
-      unified_consent::UnifiedConsentService* consent_service =
-          UnifiedConsentServiceFactory::GetForProfile(profile_);
-      if (consent_service->ShouldShowConsentBump()) {
-        consent_service->RecordConsentBumpSuppressReason(
-            unified_consent::metrics::ConsentBumpSuppressReason::kSyncPaused);
-      }
-      return;
-    }
-
-    // Check if there is already an active browser window for |profile|.
-    Browser* active_browser = chrome::FindLastActiveWithProfile(profile_);
-    if (active_browser)
-      OnBrowserSetLastActive(active_browser);
-    else
-      scoped_browser_list_observer_.Add(BrowserList::GetInstance());
-  }
-
-  // BrowserListObserver:
-  void OnBrowserSetLastActive(Browser* browser) override {
-    if (browser->profile() != profile_)
-      return;
-    // We only try to show the consent bump once after startup, so remove |this|
-    // as a |BrowserListObserver|.
-    scoped_browser_list_observer_.RemoveAll();
-
-    if (ShouldShowConsentBumpFor(profile_)) {
-      selected_browser_ = browser;
-      scoped_login_ui_service_observer_.Add(login_ui_service_);
-      selected_browser_->signin_view_controller()->ShowModalSyncConsentBump(
-          selected_browser_);
-    }
-  }
-
-  // LoginUIService::Observer:
-  void OnSyncConfirmationUIClosed(
-      LoginUIService::SyncConfirmationUIClosedResult result) override {
-    scoped_login_ui_service_observer_.RemoveAll();
-
-    unified_consent::UnifiedConsentService* consent_service =
-        UnifiedConsentServiceFactory::GetForProfile(profile_);
-
-    consent_service->MarkConsentBumpShown();
-
-    switch (result) {
-      case LoginUIService::CONFIGURE_SYNC_FIRST:
-        // Opt into Unity and open settings page to make configurations.
-        consent_service->EnableGoogleServices();
-        chrome::ShowSettingsSubPage(selected_browser_,
-                                    chrome::kSyncSetupSubPage);
-        break;
-      case LoginUIService::SYNC_WITH_DEFAULT_SETTINGS:
-        // Opt into Unity with default configuration.
-        consent_service->EnableGoogleServices();
-        break;
-      case LoginUIService::ABORT_SIGNIN:
-        // "Make no changes" was selected.
-        break;
-    }
-  }
-
-  // This should only be called after the browser has been set up, otherwise
-  // this might crash because the profile has not been fully initialized yet.
-  static bool ShouldShowConsentBumpFor(Profile* profile) {
-    if (!profile->IsSyncAllowed() ||
-        !unified_consent::IsUnifiedConsentFeatureWithBumpEnabled() ||
-        !ProfileSyncServiceFactory::HasProfileSyncService(profile))
-      return false;
-
-    unified_consent::UnifiedConsentService* consent_service =
-        UnifiedConsentServiceFactory::GetForProfile(profile);
-    if (!consent_service->ShouldShowConsentBump())
-      return false;
-
-    sync_ui_util::MessageType sync_status = sync_ui_util::GetStatus(
-        profile, ProfileSyncServiceFactory::GetForProfile(profile),
-        *SigninManagerFactory::GetForProfile(profile));
-
-    return sync_status == sync_ui_util::SYNCED;
-  }
-
- private:
-  LoginUIService* login_ui_service_;  // owner
-
-  Profile* profile_;
-
-  ScopedObserver<BrowserList, ConsentBumpActivator>
-      scoped_browser_list_observer_;
-  ScopedObserver<LoginUIService, ConsentBumpActivator>
-      scoped_login_ui_service_observer_;
-  ScopedObserver<OAuth2TokenService, ConsentBumpActivator>
-      scoped_token_service_observer_;
-
-  // Used for the action handling of the consent bump.
-  Browser* selected_browser_ = nullptr;
-
-  DISALLOW_COPY_AND_ASSIGN(ConsentBumpActivator);
-};
-
 #endif  // !defined(OS_CHROMEOS)
 
 LoginUIService::LoginUIService(Profile* profile)
@@ -182,12 +29,6 @@
     : profile_(profile)
 #endif
 {
-#if !defined(OS_CHROMEOS)
-  if (unified_consent::IsUnifiedConsentFeatureWithBumpEnabled()) {
-    consent_bump_activator_ =
-        std::make_unique<ConsentBumpActivator>(this, profile);
-  }
-#endif
 }
 
 LoginUIService::~LoginUIService() {}
diff --git a/chrome/browser/ui/webui/signin/login_ui_service.h b/chrome/browser/ui/webui/signin/login_ui_service.h
index 7b154a3..61b80a7d 100644
--- a/chrome/browser/ui/webui/signin/login_ui_service.h
+++ b/chrome/browser/ui/webui/signin/login_ui_service.h
@@ -15,7 +15,6 @@
 
 class Browser;
 class Profile;
-class ConsentBumpActivator;
 
 // The LoginUIService helps track per-profile information for the login related
 // UIs - for example, whether there is login UI currently on-screen.
@@ -107,7 +106,6 @@
   std::list<LoginUI*> ui_list_;
 #if !defined(OS_CHROMEOS)
   Profile* profile_;
-  std::unique_ptr<ConsentBumpActivator> consent_bump_activator_;
 #endif
 
   // List of observers.
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc b/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc
index 06d478d..32ec47bd 100644
--- a/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc
+++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc
@@ -30,19 +30,6 @@
 #include "content/public/browser/web_ui.h"
 #include "url/gurl.h"
 
-namespace {
-// Used for UMA. Do not reorder, append new values at the end.
-enum class UnifiedConsentBumpAction {
-  kOptIn = 0,
-  kMoreOptionsOptIn = 1,
-  kMoreOptionsSettings = 2,
-  kMoreOptionsNoChanges = 3,
-  kAbort = 4,
-
-  kMaxValue = kAbort
-};
-}  // namespace
-
 const int kProfileImageSize = 128;
 
 SyncConfirmationHandler::SyncConfirmationHandler(
@@ -67,12 +54,7 @@
   // sync confirmation dialog are taken by the user.
   if (!did_user_explicitly_interact) {
     HandleUndo(nullptr);
-    if (IsUnifiedConsentBumpDialog()) {
-      UMA_HISTOGRAM_ENUMERATION("UnifiedConsent.ConsentBump.Action",
-                                UnifiedConsentBumpAction::kAbort);
-    } else {
-      base::RecordAction(base::UserMetricsAction("Signin_Abort_Signin"));
-    }
+    base::RecordAction(base::UserMetricsAction("Signin_Abort_Signin"));
   }
 }
 
@@ -221,22 +203,18 @@
 
 void SyncConfirmationHandler::CloseModalSigninWindow(
     LoginUIService::SyncConfirmationUIClosedResult result) {
-  if (!IsUnifiedConsentBumpDialog()) {
-    // Metrics for the unified consent bump are recorded directly from
-    // javascript.
-    switch (result) {
-      case LoginUIService::CONFIGURE_SYNC_FIRST:
-        base::RecordAction(
-            base::UserMetricsAction("Signin_Signin_WithAdvancedSyncSettings"));
-        break;
-      case LoginUIService::SYNC_WITH_DEFAULT_SETTINGS:
-        base::RecordAction(
-            base::UserMetricsAction("Signin_Signin_WithDefaultSyncSettings"));
-        break;
-      case LoginUIService::ABORT_SIGNIN:
-        base::RecordAction(base::UserMetricsAction("Signin_Undo_Signin"));
-        break;
-    }
+  switch (result) {
+    case LoginUIService::CONFIGURE_SYNC_FIRST:
+      base::RecordAction(
+          base::UserMetricsAction("Signin_Signin_WithAdvancedSyncSettings"));
+      break;
+    case LoginUIService::SYNC_WITH_DEFAULT_SETTINGS:
+      base::RecordAction(
+          base::UserMetricsAction("Signin_Signin_WithDefaultSyncSettings"));
+      break;
+    case LoginUIService::ABORT_SIGNIN:
+      base::RecordAction(base::UserMetricsAction("Signin_Undo_Signin"));
+      break;
   }
   LoginUIServiceFactory::GetForProfile(profile_)->SyncConfirmationUIClosed(
       result);
@@ -276,8 +254,3 @@
   // workaround.
   web_ui()->CallJavascriptFunctionUnsafe("sync.confirmation.clearFocus");
 }
-
-bool SyncConfirmationHandler::IsUnifiedConsentBumpDialog() {
-  return web_ui()->GetWebContents()->GetVisibleURL() ==
-         chrome::kChromeUISyncConsentBumpURL;
-}
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_handler.h b/chrome/browser/ui/webui/signin/sync_confirmation_handler.h
index 9269e68..f7d9746b 100644
--- a/chrome/browser/ui/webui/signin/sync_confirmation_handler.h
+++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler.h
@@ -87,10 +87,6 @@
   void CloseModalSigninWindow(
       LoginUIService::SyncConfirmationUIClosedResult result);
 
-  // Returns true if this is a unified consent bump dialog, and false if this is
-  // a regular sync confirmation.
-  bool IsUnifiedConsentBumpDialog();
-
  private:
   Profile* profile_;
 
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc b/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc
index c13a6e1..2146cf89 100644
--- a/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc
+++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc
@@ -65,7 +65,6 @@
   using SyncConfirmationHandler::HandleGoToSettings;
   using SyncConfirmationHandler::RecordConsent;
   using SyncConfirmationHandler::SetUserImageURL;
-  using SyncConfirmationHandler::IsUnifiedConsentBumpDialog;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(TestingSyncConfirmationHandler);
@@ -105,32 +104,16 @@
     signin_manager()->CompletePendingSignin();
     login_ui_service_observer_.Add(
         LoginUIServiceFactory::GetForProfile(profile()));
-
-    EXPECT_FALSE(handler_->IsUnifiedConsentBumpDialog());
   }
 
   void TearDown() override {
-    bool is_unified_consent_bump_dialog =
-        handler_->IsUnifiedConsentBumpDialog();
-
     login_ui_service_observer_.RemoveAll();
     sync_confirmation_ui_.reset();
     web_ui_.reset();
     BrowserWithTestWindowTest::TearDown();
 
-    if (!did_user_explicitly_interact && is_unified_consent_bump_dialog) {
-      const int kAbort = 4;
-      histogram_tester_.ExpectUniqueSample("UnifiedConsent.ConsentBump.Action",
-                                           kAbort, 1);
-      EXPECT_EQ(0, user_action_tester()->GetActionCount("Signin_Abort_Signin"));
-    } else {
-      histogram_tester_.ExpectTotalCount("UnifiedConsent.ConsentBump.Action",
-                                         0);
-    }
-
-    EXPECT_EQ(
-        did_user_explicitly_interact || is_unified_consent_bump_dialog ? 0 : 1,
-        user_action_tester()->GetActionCount("Signin_Abort_Signin"));
+    EXPECT_EQ(did_user_explicitly_interact ? 0 : 1,
+              user_action_tester()->GetActionCount("Signin_Abort_Signin"));
   }
 
   TestingSyncConfirmationHandler* handler() { return handler_; }
@@ -347,31 +330,6 @@
       "Signin_Signin_WithAdvancedSyncSettings"));
 }
 
-TEST_F(SyncConfirmationHandlerTest, TestConsentBump) {
-  // Enable the consent bump by setting the URL of the web ui.
-  NavigateAndCommit(&web_ui()->GetWebContents()->GetController(),
-                    GURL(chrome::kChromeUISyncConsentBumpURL));
-  EXPECT_TRUE(handler()->IsUnifiedConsentBumpDialog());
-
-  handler()->HandleUndo(nullptr);
-  did_user_explicitly_interact = true;
-  ASSERT_TRUE(on_sync_confirmation_ui_closed_called_);
-  ASSERT_EQ(LoginUIService::ABORT_SIGNIN, sync_confirmation_ui_closed_result_);
-
-  // The regular sync confirmation metrics are not recorded for the consent
-  // bump.
-  EXPECT_EQ(0, user_action_tester()->GetActionCount("Signin_Undo_Signin"));
-}
-
-TEST_F(SyncConfirmationHandlerTest, TestConsentBumpAbort) {
-  // Enable the consent bump by setting the URL of the web ui.
-  NavigateAndCommit(&web_ui()->GetWebContents()->GetController(),
-                    GURL(chrome::kChromeUISyncConsentBumpURL));
-  EXPECT_TRUE(handler()->IsUnifiedConsentBumpDialog());
-
-  // The histogram sample will be tested in TearDown().
-}
-
 TEST_F(SyncConfirmationHandlerTest, TestHandleConfirm) {
   // The consent description consists of strings 1, 2, and 4.
   base::ListValue consent_description;
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc b/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc
index df687d3b..ad16d2e 100644
--- a/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc
+++ b/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc
@@ -69,31 +69,6 @@
     AddStringResource(source, "syncConfirmationSettingsLabel",
                       IDS_SYNC_CONFIRMATION_DICE_SETTINGS_BUTTON_LABEL);
 
-    AddStringResource(source, "syncConfirmationMoreOptionsLabel",
-                      IDS_SYNC_CONFIRMATION_UNITY_MORE_OPTIONS_BUTTON_LABEL);
-    AddStringResource(source, "syncConfirmationOptionsTitle",
-                      IDS_SYNC_CONFIRMATION_UNITY_MORE_OPTIONS_TITLE);
-    AddStringResource(source, "syncConfirmationOptionsSubtitle",
-                      IDS_SYNC_CONFIRMATION_UNITY_MORE_OPTIONS_SUBTITLE);
-    AddStringResource(
-        source, "syncConfirmationOptionsReviewSettingsTitle",
-        IDS_SYNC_CONFIRMATION_UNITY_OPTIONS_REVIEW_SETTINGS_TITLE);
-    AddStringResource(
-        source, "syncConfirmationOptionsMakeNoChangesTitle",
-        IDS_SYNC_CONFIRMATION_UNITY_OPTIONS_MAKE_NO_CHANGES_TITLE);
-    AddStringResource(
-        source, "syncConfirmationOptionsMakeNoChangesSubtitle",
-        IDS_SYNC_CONFIRMATION_UNITY_OPTIONS_MAKE_NO_CHANGES_SUBTITLE);
-    AddStringResource(source, "syncConfirmationOptionsUseDefaultTitle",
-                      IDS_SYNC_CONFIRMATION_UNITY_OPTIONS_USE_DEFAULT_TITLE);
-    AddStringResource(source, "syncConfirmationOptionsUseDefaultSubtitle",
-                      IDS_SYNC_CONFIRMATION_UNITY_OPTIONS_USE_DEFAULT_SUBTITLE);
-    AddStringResource(source, "syncConfirmationOptionsConfirmLabel", IDS_OK);
-    AddStringResource(source, "syncConfirmationOptionsBackLabel",
-                      IDS_SYNC_CONFIRMATION_UNITY_OPTIONS_BACK_BUTTON_LABEL);
-    AddStringResource(source, "syncConsentBumpTitle",
-                      IDS_SYNC_CONFIRMATION_UNITY_CONSENT_BUMP_TITLE);
-
     constexpr int kAccountPictureSize = 68;
     std::string custom_picture_url = profiles::GetPlaceholderAvatarIconUrl();
     GURL account_picture_url(IdentityManagerFactory::GetForProfile(profile)
diff --git a/chrome/browser/unified_consent/chrome_unified_consent_service_client.cc b/chrome/browser/unified_consent/chrome_unified_consent_service_client.cc
index 37f6d24..2ca20c3 100644
--- a/chrome/browser/unified_consent/chrome_unified_consent_service_client.cc
+++ b/chrome/browser/unified_consent/chrome_unified_consent_service_client.cc
@@ -95,6 +95,9 @@
 
 void ChromeUnifiedConsentServiceClient::SetServiceEnabled(Service service,
                                                           bool enabled) {
+  if (GetServiceState(service) == ServiceState::kNotSupported)
+    return;
+
   switch (service) {
     case Service::kAlternateErrorPages:
       pref_service_->SetBoolean(prefs::kAlternateErrorPagesEnabled, enabled);
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index 4444ffd..16ca619 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -11,6 +11,8 @@
     "abstract_web_app_database.h",
     "external_web_apps.cc",
     "external_web_apps.h",
+    "file_utils_wrapper.cc",
+    "file_utils_wrapper.h",
     "policy/web_app_policy_constants.cc",
     "policy/web_app_policy_constants.h",
     "policy/web_app_policy_manager.cc",
@@ -23,6 +25,8 @@
     "web_app_database.h",
     "web_app_database_factory.cc",
     "web_app_database_factory.h",
+    "web_app_icon_manager.cc",
+    "web_app_icon_manager.h",
     "web_app_install_finalizer.cc",
     "web_app_install_finalizer.h",
     "web_app_install_manager.cc",
@@ -54,6 +58,8 @@
   sources = [
     "test/test_data_retriever.cc",
     "test/test_data_retriever.h",
+    "test/test_file_utils.cc",
+    "test/test_file_utils.h",
     "test/test_install_finalizer.cc",
     "test/test_install_finalizer.h",
     "test/test_system_web_app_manager.cc",
diff --git a/chrome/browser/web_applications/components/web_app_constants.h b/chrome/browser/web_applications/components/web_app_constants.h
index f3c0b08..9b0bba16 100644
--- a/chrome/browser/web_applications/components/web_app_constants.h
+++ b/chrome/browser/web_applications/components/web_app_constants.h
@@ -34,7 +34,8 @@
   kGetWebApplicationInfoFailed = 3,
   kPreviouslyUninstalled = 4,
   kWebContentsDestroyed = 5,
-  kMaxValue = kWebContentsDestroyed,
+  kWriteDataFailed = 6,
+  kMaxValue = kWriteDataFailed,
 };
 
 // Where an app was installed from. This affects what flags will be used when
diff --git a/chrome/browser/web_applications/file_utils_wrapper.cc b/chrome/browser/web_applications/file_utils_wrapper.cc
new file mode 100644
index 0000000..aac296fc
--- /dev/null
+++ b/chrome/browser/web_applications/file_utils_wrapper.cc
@@ -0,0 +1,62 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/web_applications/file_utils_wrapper.h"
+
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+
+namespace web_app {
+
+std::unique_ptr<FileUtilsWrapper> FileUtilsWrapper::Clone() {
+  return std::make_unique<FileUtilsWrapper>();
+}
+
+bool FileUtilsWrapper::PathExists(const base::FilePath& path) {
+  return base::PathExists(path);
+}
+
+bool FileUtilsWrapper::PathIsWritable(const base::FilePath& path) {
+  return base::PathIsWritable(path);
+}
+
+bool FileUtilsWrapper::DirectoryExists(const base::FilePath& path) {
+  return base::DirectoryExists(path);
+}
+
+bool FileUtilsWrapper::CreateDirectory(const base::FilePath& full_path) {
+  return base::CreateDirectory(full_path);
+}
+
+int FileUtilsWrapper::ReadFile(const base::FilePath& filename,
+                               char* data,
+                               int max_size) {
+  return base::ReadFile(filename, data, max_size);
+}
+
+int FileUtilsWrapper::WriteFile(const base::FilePath& filename,
+                                const char* data,
+                                int size) {
+  return base::WriteFile(filename, data, size);
+}
+
+bool FileUtilsWrapper::Move(const base::FilePath& from_path,
+                            const base::FilePath& to_path) {
+  return base::Move(from_path, to_path);
+}
+
+bool FileUtilsWrapper::IsDirectoryEmpty(const base::FilePath& dir_path) {
+  return base::IsDirectoryEmpty(dir_path);
+}
+
+bool FileUtilsWrapper::ReadFileToString(const base::FilePath& path,
+                                        std::string* contents) {
+  return base::ReadFileToString(path, contents);
+}
+
+bool FileUtilsWrapper::DeleteFile(const base::FilePath& path, bool recursive) {
+  return base::DeleteFile(path, recursive);
+}
+
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/file_utils_wrapper.h b/chrome/browser/web_applications/file_utils_wrapper.h
new file mode 100644
index 0000000..8074386e
--- /dev/null
+++ b/chrome/browser/web_applications/file_utils_wrapper.h
@@ -0,0 +1,66 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_WEB_APPLICATIONS_FILE_UTILS_WRAPPER_H_
+#define CHROME_BROWSER_WEB_APPLICATIONS_FILE_UTILS_WRAPPER_H_
+
+#include <memory>
+#include <string>
+
+#include "base/macros.h"
+#include "build/build_config.h"
+
+// Include this to avoid conflicts with CreateDirectory Win macro.
+// It converts CreateDirectory into CreateDirectoryW.
+#if defined(OS_WIN)
+#include "base/win/windows_types.h"
+#endif  // defined(OS_WIN)
+
+namespace base {
+class FilePath;
+}
+
+namespace web_app {
+
+// A simple wrapper for base/files/file_util.h utilities.
+// See detailed comments for functionality in corresponding
+// base/files/file_util.h functions.
+// Allows a testing implementation to intercept calls to the file system.
+// TODO(loyso): Add more tests and promote mocked methods to |virtual|.
+class FileUtilsWrapper {
+ public:
+  FileUtilsWrapper() = default;
+  virtual ~FileUtilsWrapper() = default;
+
+  // Create a copy to use in IO task.
+  virtual std::unique_ptr<FileUtilsWrapper> Clone();
+
+  bool PathExists(const base::FilePath& path);
+
+  bool PathIsWritable(const base::FilePath& path);
+
+  bool DirectoryExists(const base::FilePath& path);
+
+  bool CreateDirectory(const base::FilePath& full_path);
+
+  int ReadFile(const base::FilePath& filename, char* data, int max_size);
+
+  virtual int WriteFile(const base::FilePath& filename,
+                        const char* data,
+                        int size);
+
+  bool Move(const base::FilePath& from_path, const base::FilePath& to_path);
+
+  bool IsDirectoryEmpty(const base::FilePath& dir_path);
+
+  bool ReadFileToString(const base::FilePath& path, std::string* contents);
+
+  bool DeleteFile(const base::FilePath& path, bool recursive);
+
+  DISALLOW_COPY_AND_ASSIGN(FileUtilsWrapper);
+};
+
+}  // namespace web_app
+
+#endif  // CHROME_BROWSER_WEB_APPLICATIONS_FILE_UTILS_WRAPPER_H_
diff --git a/chrome/browser/web_applications/test/test_data_retriever.h b/chrome/browser/web_applications/test/test_data_retriever.h
index 1ccec14..2d6ef50b 100644
--- a/chrome/browser/web_applications/test/test_data_retriever.h
+++ b/chrome/browser/web_applications/test/test_data_retriever.h
@@ -33,6 +33,8 @@
   // Set icons to respond on |GetIcons|.
   void SetIcons(IconsMap icons_map);
 
+  WebApplicationInfo& web_app_info() { return *web_app_info_; }
+
  private:
   std::unique_ptr<WebApplicationInfo> web_app_info_;
   IconsMap icons_map_;
diff --git a/chrome/browser/web_applications/test/test_file_utils.cc b/chrome/browser/web_applications/test/test_file_utils.cc
new file mode 100644
index 0000000..94f1f36c
--- /dev/null
+++ b/chrome/browser/web_applications/test/test_file_utils.cc
@@ -0,0 +1,40 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <utility>
+
+#include "chrome/browser/web_applications/test/test_file_utils.h"
+
+namespace web_app {
+
+std::unique_ptr<FileUtilsWrapper> TestFileUtils::Clone() {
+  auto clone = std::make_unique<TestFileUtils>();
+  clone->remaining_disk_space_ = remaining_disk_space_;
+  return clone;
+}
+
+void TestFileUtils::SetRemainingDiskSpaceSize(int remaining_disk_space) {
+  remaining_disk_space_ = remaining_disk_space;
+}
+
+int TestFileUtils::WriteFile(const base::FilePath& filename,
+                             const char* data,
+                             int size) {
+  if (remaining_disk_space_ != kNoLimit) {
+    if (size > remaining_disk_space_) {
+      // Disk full:
+      const int size_written = remaining_disk_space_;
+      if (size_written > 0)
+        FileUtilsWrapper::WriteFile(filename, data, size_written);
+      remaining_disk_space_ = 0;
+      return size_written;
+    }
+
+    remaining_disk_space_ -= size;
+  }
+
+  return FileUtilsWrapper::WriteFile(filename, data, size);
+}
+
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/test/test_file_utils.h b/chrome/browser/web_applications/test/test_file_utils.h
new file mode 100644
index 0000000..1168fad
--- /dev/null
+++ b/chrome/browser/web_applications/test/test_file_utils.h
@@ -0,0 +1,40 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_WEB_APPLICATIONS_TEST_TEST_FILE_UTILS_H_
+#define CHROME_BROWSER_WEB_APPLICATIONS_TEST_TEST_FILE_UTILS_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "chrome/browser/web_applications/file_utils_wrapper.h"
+
+namespace web_app {
+
+// A testing implementation to intercept calls to the file system.
+class TestFileUtils : public FileUtilsWrapper {
+ public:
+  TestFileUtils() = default;
+  ~TestFileUtils() override = default;
+
+  // FileUtilsWrapper:
+  std::unique_ptr<FileUtilsWrapper> Clone() override;
+  int WriteFile(const base::FilePath& filename,
+                const char* data,
+                int size) override;
+
+  static constexpr int kNoLimit = -1;
+
+  // Simulate "disk full" error: limit disk space for |WriteFile| operations.
+  void SetRemainingDiskSpaceSize(int remaining_disk_space);
+
+ private:
+  int remaining_disk_space_ = kNoLimit;
+
+  DISALLOW_COPY_AND_ASSIGN(TestFileUtils);
+};
+
+}  // namespace web_app
+
+#endif  // CHROME_BROWSER_WEB_APPLICATIONS_TEST_TEST_FILE_UTILS_H_
diff --git a/chrome/browser/web_applications/web_app_database_factory.cc b/chrome/browser/web_applications/web_app_database_factory.cc
index 6254a80..64152e8 100644
--- a/chrome/browser/web_applications/web_app_database_factory.cc
+++ b/chrome/browser/web_applications/web_app_database_factory.cc
@@ -4,19 +4,15 @@
 
 #include "chrome/browser/web_applications/web_app_database_factory.h"
 
-#include "base/files/file_path.h"
-#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/web_applications/web_app_utils.h"
 #include "components/sync/model_impl/model_type_store_service_impl.h"
 
 namespace web_app {
 
-constexpr base::FilePath::CharType kWebAppsFolderName[] =
-    FILE_PATH_LITERAL("WebApps");
-
 WebAppDatabaseFactory::WebAppDatabaseFactory(Profile* profile)
     : model_type_store_service_(
           std::make_unique<syncer::ModelTypeStoreServiceImpl>(
-              profile->GetPath().Append(base::FilePath(kWebAppsFolderName)))) {}
+              GetWebAppsDirectory(profile))) {}
 
 WebAppDatabaseFactory::~WebAppDatabaseFactory() {}
 
diff --git a/chrome/browser/web_applications/web_app_icon_manager.cc b/chrome/browser/web_applications/web_app_icon_manager.cc
new file mode 100644
index 0000000..e73f859
--- /dev/null
+++ b/chrome/browser/web_applications/web_app_icon_manager.cc
@@ -0,0 +1,159 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/web_applications/web_app_icon_manager.h"
+
+#include "base/callback.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/logging.h"
+#include "base/strings/stringprintf.h"
+#include "base/task/post_task.h"
+#include "base/task/task_traits.h"
+#include "chrome/browser/web_applications/file_utils_wrapper.h"
+#include "chrome/browser/web_applications/web_app_utils.h"
+#include "content/public/browser/browser_thread.h"
+#include "ui/gfx/codec/png_codec.h"
+
+namespace web_app {
+
+namespace {
+
+constexpr base::FilePath::CharType kTempDirectoryName[] =
+    FILE_PATH_LITERAL("Temp");
+
+constexpr base::FilePath::CharType kIconsDirectoryName[] =
+    FILE_PATH_LITERAL("Icons");
+
+base::FilePath GetTempDir(FileUtilsWrapper* utils,
+                          const base::FilePath& web_apps_dir) {
+  // Create the temp directory as a sub-directory of the WebApps directory.
+  // This guarantees it is on the same file system as the WebApp's eventual
+  // install target.
+  base::FilePath temp_path = web_apps_dir.Append(kTempDirectoryName);
+  if (utils->PathExists(temp_path)) {
+    if (!utils->DirectoryExists(temp_path)) {
+      LOG(ERROR) << "Not a directory: " << temp_path.value();
+      return base::FilePath();
+    }
+    if (!utils->PathIsWritable(temp_path)) {
+      LOG(ERROR) << "Can't write to path: " << temp_path.value();
+      return base::FilePath();
+    }
+    // This is a directory we can write to.
+    return temp_path;
+  }
+
+  // Directory doesn't exist, so create it.
+  if (!utils->CreateDirectory(temp_path)) {
+    LOG(ERROR) << "Could not create directory: " << temp_path.value();
+    return base::FilePath();
+  }
+  return temp_path;
+}
+
+bool WriteIcon(FileUtilsWrapper* utils,
+               const base::FilePath& icons_dir,
+               const WebApplicationInfo::IconInfo& icon_info) {
+  base::FilePath icon_file =
+      icons_dir.AppendASCII(base::StringPrintf("%i.png", icon_info.width));
+  std::vector<unsigned char> image_data;
+  const bool discard_transparency = false;
+  if (!gfx::PNGCodec::EncodeBGRASkBitmap(icon_info.data, discard_transparency,
+                                         &image_data)) {
+    LOG(ERROR) << "Could not encode icon data.";
+    return false;
+  }
+
+  const char* image_data_ptr = reinterpret_cast<const char*>(&image_data[0]);
+  int size = base::checked_cast<int>(image_data.size());
+  if (utils->WriteFile(icon_file, image_data_ptr, size) != size) {
+    LOG(ERROR) << "Could not write icon file.";
+    return false;
+  }
+
+  return true;
+}
+
+bool WriteIcons(FileUtilsWrapper* utils,
+                const base::FilePath& app_dir,
+                const WebApplicationInfo& web_app_info) {
+  const base::FilePath icons_dir = app_dir.Append(kIconsDirectoryName);
+  if (!utils->CreateDirectory(icons_dir)) {
+    LOG(ERROR) << "Could not create icons directory.";
+    return false;
+  }
+
+  for (const WebApplicationInfo::IconInfo& icon_info : web_app_info.icons) {
+    // Skip unfetched bitmaps.
+    if (icon_info.data.colorType() == kUnknown_SkColorType)
+      continue;
+
+    if (!WriteIcon(utils, icons_dir, icon_info))
+      return false;
+  }
+
+  return true;
+}
+
+// Performs blocking I/O. May be called on another thread.
+// Returns true if no errors occured.
+bool WriteDataBlocking(std::unique_ptr<FileUtilsWrapper> utils,
+                       base::FilePath web_apps_directory,
+                       AppId app_id,
+                       std::unique_ptr<WebApplicationInfo> web_app_info) {
+  const base::FilePath temp_dir = GetTempDir(utils.get(), web_apps_directory);
+  if (temp_dir.empty()) {
+    LOG(ERROR)
+        << "Could not get path to WebApps temporary directory in profile.";
+    return false;
+  }
+
+  base::ScopedTempDir app_temp_dir;
+  if (!app_temp_dir.CreateUniqueTempDirUnderPath(temp_dir)) {
+    LOG(ERROR) << "Could not create temporary WebApp directory.";
+    return false;
+  }
+
+  if (!WriteIcons(utils.get(), app_temp_dir.GetPath(), *web_app_info))
+    return false;
+
+  // Commit: move whole app data dir to final destination in one mv operation.
+  const base::FilePath app_id_dir = web_apps_directory.AppendASCII(app_id);
+  if (!utils->Move(app_temp_dir.GetPath(), app_id_dir)) {
+    LOG(ERROR) << "Could not move temp WebApp directory to final destination.";
+    return false;
+  }
+
+  app_temp_dir.Take();
+  return true;
+}
+
+}  // namespace
+
+WebAppIconManager::WebAppIconManager(Profile* profile,
+                                     std::unique_ptr<FileUtilsWrapper> utils)
+    : utils_(std::move(utils)) {
+  web_apps_directory_ = GetWebAppsDirectory(profile);
+}
+
+WebAppIconManager::~WebAppIconManager() = default;
+
+void WebAppIconManager::WriteData(
+    AppId app_id,
+    std::unique_ptr<WebApplicationInfo> web_app_info,
+    WriteDataCallback callback) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+  constexpr base::TaskTraits traits = {
+      base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+      base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN};
+
+  base::PostTaskWithTraitsAndReplyWithResult(
+      FROM_HERE, traits,
+      base::BindOnce(WriteDataBlocking, utils_->Clone(), web_apps_directory_,
+                     std::move(app_id), std::move(web_app_info)),
+      std::move(callback));
+}
+
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_icon_manager.h b/chrome/browser/web_applications/web_app_icon_manager.h
new file mode 100644
index 0000000..e7a9134
--- /dev/null
+++ b/chrome/browser/web_applications/web_app_icon_manager.h
@@ -0,0 +1,44 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_ICON_MANAGER_H_
+#define CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_ICON_MANAGER_H_
+
+#include <memory>
+
+#include "base/callback_forward.h"
+#include "base/files/file_path.h"
+#include "base/macros.h"
+#include "chrome/browser/web_applications/components/web_app_helpers.h"
+#include "chrome/common/web_application_info.h"
+
+class Profile;
+struct WebApplicationInfo;
+
+namespace web_app {
+
+class FileUtilsWrapper;
+
+// Exclusively used from the UI thread.
+class WebAppIconManager {
+ public:
+  WebAppIconManager(Profile* profile, std::unique_ptr<FileUtilsWrapper> utils);
+  ~WebAppIconManager();
+
+  using WriteDataCallback = base::OnceCallback<void(bool success)>;
+
+  void WriteData(AppId app_id,
+                 std::unique_ptr<WebApplicationInfo> web_app_info,
+                 WriteDataCallback callback);
+
+ private:
+  base::FilePath web_apps_directory_;
+  std::unique_ptr<FileUtilsWrapper> utils_;
+
+  DISALLOW_COPY_AND_ASSIGN(WebAppIconManager);
+};
+
+}  // namespace web_app
+
+#endif  // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_ICON_MANAGER_H_
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.cc b/chrome/browser/web_applications/web_app_install_finalizer.cc
index 376e8d3..949d89a 100644
--- a/chrome/browser/web_applications/web_app_install_finalizer.cc
+++ b/chrome/browser/web_applications/web_app_install_finalizer.cc
@@ -12,20 +12,30 @@
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_icon_manager.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/common/web_application_info.h"
+#include "content/public/browser/browser_thread.h"
 
 namespace web_app {
 
-WebAppInstallFinalizer::WebAppInstallFinalizer(WebAppRegistrar* registrar)
-    : registrar_(registrar) {}
+WebAppInstallFinalizer::WebAppInstallFinalizer(WebAppRegistrar* registrar,
+                                               WebAppIconManager* icon_manager)
+    : registrar_(registrar), icon_manager_(icon_manager) {}
 
 WebAppInstallFinalizer::~WebAppInstallFinalizer() = default;
 
 void WebAppInstallFinalizer::FinalizeInstall(
     std::unique_ptr<WebApplicationInfo> web_app_info,
     InstallFinalizedCallback callback) {
-  const AppId app_id = GenerateAppIdFromURL(web_app_info->app_url);
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+  AppId app_id = GenerateAppIdFromURL(web_app_info->app_url);
+  if (registrar_->GetAppById(app_id)) {
+    std::move(callback).Run(app_id, InstallResultCode::kAlreadyInstalled);
+    return;
+  }
+
   auto web_app = std::make_unique<WebApp>(app_id);
 
   web_app->SetName(base::UTF16ToUTF8(web_app_info->title));
@@ -34,11 +44,30 @@
   web_app->SetScope(web_app_info->scope);
   web_app->SetThemeColor(web_app_info->theme_color);
 
-  // TODO(loyso): Add web_app_info->icons into web_app. Save them on disk.
+  icon_manager_->WriteData(
+      std::move(app_id), std::move(web_app_info),
+      base::BindOnce(&WebAppInstallFinalizer::OnDataWritten,
+                     weak_ptr_factory_.GetWeakPtr(), std::move(callback),
+                     std::move(web_app)));
+}
+
+void WebAppInstallFinalizer::OnDataWritten(InstallFinalizedCallback callback,
+                                           std::unique_ptr<WebApp> web_app,
+                                           bool success) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  if (!success) {
+    std::move(callback).Run(AppId(), InstallResultCode::kWriteDataFailed);
+    return;
+  }
+
+  // TODO(loyso): Add |Icons| object into WebApp to iterate over icons and to
+  // load SkBitmap pixels asynchronously (save memory).
+
+  AppId app_id = web_app->app_id();
 
   registrar_->RegisterApp(std::move(web_app));
 
-  std::move(callback).Run(app_id, InstallResultCode::kSuccess);
+  std::move(callback).Run(std::move(app_id), InstallResultCode::kSuccess);
 }
 
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.h b/chrome/browser/web_applications/web_app_install_finalizer.h
index 9d60c7b..d7f13d3 100644
--- a/chrome/browser/web_applications/web_app_install_finalizer.h
+++ b/chrome/browser/web_applications/web_app_install_finalizer.h
@@ -8,17 +8,21 @@
 #include <memory>
 
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "chrome/browser/web_applications/components/install_finalizer.h"
 
 struct WebApplicationInfo;
 
 namespace web_app {
 
+class WebApp;
+class WebAppIconManager;
 class WebAppRegistrar;
 
 class WebAppInstallFinalizer final : public InstallFinalizer {
  public:
-  explicit WebAppInstallFinalizer(WebAppRegistrar* registrar);
+  WebAppInstallFinalizer(WebAppRegistrar* registrar,
+                         WebAppIconManager* icon_manager);
   ~WebAppInstallFinalizer() override;
 
   // InstallFinalizer:
@@ -26,7 +30,14 @@
                        InstallFinalizedCallback callback) override;
 
  private:
+  void OnDataWritten(InstallFinalizedCallback callback,
+                     std::unique_ptr<WebApp> web_app,
+                     bool success);
+
   WebAppRegistrar* registrar_;
+  WebAppIconManager* icon_manager_;
+
+  base::WeakPtrFactory<WebAppInstallFinalizer> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(WebAppInstallFinalizer);
 };
diff --git a/chrome/browser/web_applications/web_app_install_manager_unittest.cc b/chrome/browser/web_applications/web_app_install_manager_unittest.cc
index 337a1f7..f70e414 100644
--- a/chrome/browser/web_applications/web_app_install_manager_unittest.cc
+++ b/chrome/browser/web_applications/web_app_install_manager_unittest.cc
@@ -7,8 +7,12 @@
 #include <memory>
 
 #include "base/callback.h"
+#include "base/files/file_enumerator.h"
+#include "base/files/file_path.h"
 #include "base/run_loop.h"
+#include "base/stl_util.h"
 #include "base/strings/nullable_string16.h"
+#include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind_test_util.h"
 #include "chrome/browser/installable/fake_installable_manager.h"
@@ -18,10 +22,12 @@
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_icon_generator.h"
 #include "chrome/browser/web_applications/test/test_data_retriever.h"
+#include "chrome/browser/web_applications/test/test_file_utils.h"
 #include "chrome/browser/web_applications/test/test_install_finalizer.h"
 #include "chrome/browser/web_applications/test/test_web_app_database.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
 #include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_icon_manager.h"
 #include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/browser/web_applications/web_app_utils.h"
@@ -29,30 +35,69 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/manifest/manifest.h"
 #include "third_party/skia/include/core/SkBitmap.h"
+#include "ui/gfx/codec/png_codec.h"
 #include "url/gurl.h"
 
 namespace web_app {
 
 namespace {
 
-SkBitmap CreateSquareIcon(int size, SkColor solid_color) {
+SkBitmap CreateSquareIcon(int size_px, SkColor solid_color) {
   SkBitmap bitmap;
-  bitmap.allocN32Pixels(size, size);
+  bitmap.allocN32Pixels(size_px, size_px);
   bitmap.eraseColor(solid_color);
   return bitmap;
 }
 
-bool ContainsOneIconOfEachSize(const WebApplicationInfo& web_app_info) {
-  constexpr int kIconSizes[] = {
-      icon_size::k32, icon_size::k64,  icon_size::k48,
-      icon_size::k96, icon_size::k128, icon_size::k256,
-  };
+IconsMap GenerateIconsMapWithOneIcon(const GURL& icon_url,
+                                     int size_px,
+                                     SkColor solid_color) {
+  SkBitmap bitmap = CreateSquareIcon(size_px, solid_color);
 
-  for (int size : kIconSizes) {
+  std::vector<SkBitmap> bitmaps;
+  bitmaps.push_back(std::move(bitmap));
+
+  IconsMap icons_map;
+  icons_map.emplace(icon_url, std::move(bitmaps));
+
+  return icons_map;
+}
+
+WebApplicationInfo::IconInfo GenerateIconInfo(const GURL& url,
+                                              int size_px,
+                                              SkColor solid_color) {
+  WebApplicationInfo::IconInfo icon_info;
+  icon_info.url = url;
+  icon_info.width = size_px;
+  icon_info.height = size_px;
+  icon_info.data = CreateSquareIcon(size_px, solid_color);
+
+  return icon_info;
+}
+
+bool ReadBitmap(FileUtilsWrapper* utils,
+                const base::FilePath& file_path,
+                SkBitmap* bitmap) {
+  std::string icon_data;
+  if (!utils->ReadFileToString(file_path, &icon_data))
+    return false;
+
+  return gfx::PNGCodec::Decode(
+      reinterpret_cast<const unsigned char*>(icon_data.c_str()),
+      icon_data.size(), bitmap);
+}
+
+constexpr int kIconSizes[] = {
+    icon_size::k32, icon_size::k64,  icon_size::k48,
+    icon_size::k96, icon_size::k128, icon_size::k256,
+};
+
+bool ContainsOneIconOfEachSize(const WebApplicationInfo& web_app_info) {
+  for (int size_px : kIconSizes) {
     int num_icons_for_size =
         std::count_if(web_app_info.icons.begin(), web_app_info.icons.end(),
-                      [&size](const WebApplicationInfo::IconInfo& icon) {
-                        return icon.width == size && icon.height == size;
+                      [&size_px](const WebApplicationInfo::IconInfo& icon) {
+                        return icon.width == size_px && icon.height == size_px;
                       });
     if (num_icons_for_size != 1)
       return false;
@@ -71,8 +116,15 @@
     database_ = std::make_unique<TestWebAppDatabase>();
     registrar_ = std::make_unique<WebAppRegistrar>(database_.get());
 
-    auto install_finalizer =
-        std::make_unique<WebAppInstallFinalizer>(registrar_.get());
+    auto file_utils = std::make_unique<TestFileUtils>();
+    file_utils_ = file_utils.get();
+
+    icon_manager_ =
+        std::make_unique<WebAppIconManager>(profile(), std::move(file_utils));
+
+    auto install_finalizer = std::make_unique<WebAppInstallFinalizer>(
+        registrar_.get(), icon_manager_.get());
+
     install_manager_ = std::make_unique<WebAppInstallManager>(
         profile(), std::move(install_finalizer));
   }
@@ -144,9 +196,11 @@
  protected:
   std::unique_ptr<TestWebAppDatabase> database_;
   std::unique_ptr<WebAppRegistrar> registrar_;
+  std::unique_ptr<WebAppIconManager> icon_manager_;
   std::unique_ptr<WebAppInstallManager> install_manager_;
 
   // Owned by install_manager_:
+  TestFileUtils* file_utils_ = nullptr;
   TestDataRetriever* data_retriever_ = nullptr;
   TestInstallFinalizer* install_finalizer_ = nullptr;
 };
@@ -193,6 +247,40 @@
   EXPECT_EQ(theme_color, web_app->theme_color());
 }
 
+TEST_F(WebAppInstallManagerTest, AlreadyInstalled) {
+  const GURL url = GURL("https://example.com/path");
+  const std::string name = "Name";
+  const std::string description = "Description";
+
+  const AppId app_id = GenerateAppIdFromURL(url);
+
+  CreateRendererAppInfo(url, name, description);
+  CreateDefaultInstallableManager();
+
+  const AppId installed_web_app = InstallWebApp();
+  EXPECT_EQ(app_id, installed_web_app);
+
+  // Second attempt.
+  CreateRendererAppInfo(url, name, description);
+
+  base::RunLoop run_loop;
+  bool callback_called = false;
+  const bool force_shortcut_app = false;
+
+  install_manager_->InstallWebApp(
+      web_contents(), force_shortcut_app,
+      base::BindLambdaForTesting(
+          [&](const AppId& already_installed_app_id, InstallResultCode code) {
+            EXPECT_EQ(InstallResultCode::kAlreadyInstalled, code);
+            EXPECT_EQ(app_id, already_installed_app_id);
+            callback_called = true;
+            run_loop.Quit();
+          }));
+  run_loop.Run();
+
+  EXPECT_TRUE(callback_called);
+}
+
 TEST_F(WebAppInstallManagerTest, GetWebApplicationInfoFailed) {
   install_manager_->SetDataRetrieverForTesting(
       std::make_unique<TestDataRetriever>(
@@ -311,17 +399,9 @@
   const SkColor color = SK_ColorBLUE;
 
   // Generate one icon as if it was downloaded.
-  {
-    SkBitmap bitmap = CreateSquareIcon(icon_size::k128, color);
-
-    std::vector<SkBitmap> bitmaps;
-    bitmaps.push_back(std::move(bitmap));
-
-    IconsMap icons_map;
-    icons_map.emplace(icon_url, std::move(bitmaps));
-
-    SetIconsMapToRetrieve(std::move(icons_map));
-  }
+  IconsMap icons_map =
+      GenerateIconsMapWithOneIcon(icon_url, icon_size::k128, color);
+  SetIconsMapToRetrieve(std::move(icons_map));
 
   InstallWebApp();
 
@@ -367,6 +447,117 @@
   }
 }
 
+TEST_F(WebAppInstallManagerTest, WriteDataToDisk) {
+  CreateRendererAppInfo(GURL("https://example.com/path"), "Name",
+                        "Description");
+  CreateDefaultInstallableManager();
+
+  // TestingProfile creates temp directory if TestingProfile::path_ is empty
+  // (i.e. if TestingProfile::Builder::SetPath was not called by a test fixture)
+  const base::FilePath profile_dir = profile()->GetPath();
+  const base::FilePath web_apps_dir = profile_dir.AppendASCII("WebApps");
+  EXPECT_FALSE(file_utils_->DirectoryExists(web_apps_dir));
+
+  const SkColor color = SK_ColorGREEN;
+  const int original_icon_size_px = icon_size::k512;
+
+  // Generate one icon as if it was fetched from renderer.
+  {
+    WebApplicationInfo::IconInfo icon_info = GenerateIconInfo(
+        GURL("https://example.com/app.ico"), original_icon_size_px, color);
+    data_retriever_->web_app_info().icons.push_back(std::move(icon_info));
+  }
+
+  const AppId app_id = InstallWebApp();
+
+  EXPECT_TRUE(file_utils_->DirectoryExists(web_apps_dir));
+
+  const base::FilePath temp_dir = web_apps_dir.AppendASCII("Temp");
+  EXPECT_TRUE(file_utils_->DirectoryExists(temp_dir));
+  EXPECT_TRUE(file_utils_->IsDirectoryEmpty(temp_dir));
+
+  const base::FilePath app_dir = web_apps_dir.AppendASCII(app_id);
+  EXPECT_TRUE(file_utils_->DirectoryExists(app_dir));
+
+  const base::FilePath icons_dir = app_dir.AppendASCII("Icons");
+  EXPECT_TRUE(file_utils_->DirectoryExists(icons_dir));
+
+  std::set<int> written_sizes_px;
+
+  base::FileEnumerator enumerator(icons_dir, true, base::FileEnumerator::FILES);
+  for (base::FilePath path = enumerator.Next(); !path.empty();
+       path = enumerator.Next()) {
+    EXPECT_TRUE(path.MatchesExtension(FILE_PATH_LITERAL(".png")));
+
+    SkBitmap bitmap;
+    EXPECT_TRUE(ReadBitmap(file_utils_, path, &bitmap));
+
+    EXPECT_EQ(bitmap.width(), bitmap.height());
+
+    const int size_px = bitmap.width();
+    EXPECT_EQ(0UL, written_sizes_px.count(size_px));
+
+    base::FilePath size_file_name;
+    size_file_name =
+        size_file_name.AppendASCII(base::StringPrintf("%i.png", size_px));
+    EXPECT_EQ(size_file_name, path.BaseName());
+
+    written_sizes_px.insert(size_px);
+
+    EXPECT_EQ(color, bitmap.getColor(0, 0));
+  }
+
+  EXPECT_EQ(base::size(kIconSizes) + 1UL, written_sizes_px.size());
+
+  for (int size_px : kIconSizes)
+    written_sizes_px.erase(size_px);
+  written_sizes_px.erase(original_icon_size_px);
+
+  EXPECT_TRUE(written_sizes_px.empty());
+}
+
+TEST_F(WebAppInstallManagerTest, WriteDataToDiskFailed) {
+  const GURL app_url = GURL("https://example.com/path");
+  CreateRendererAppInfo(app_url, "Name", "Description");
+  CreateDefaultInstallableManager();
+
+  IconsMap icons_map = GenerateIconsMapWithOneIcon(
+      GURL("https://example.com/app.ico"), icon_size::k512, SK_ColorBLUE);
+  SetIconsMapToRetrieve(std::move(icons_map));
+
+  const base::FilePath profile_dir = profile()->GetPath();
+  const base::FilePath web_apps_dir = profile_dir.AppendASCII("WebApps");
+
+  EXPECT_TRUE(file_utils_->CreateDirectory(web_apps_dir));
+
+  // Induce an error: Simulate "Disk Full" for writing icon files.
+  file_utils_->SetRemainingDiskSpaceSize(1024);
+
+  base::RunLoop run_loop;
+  bool callback_called = false;
+  const bool force_shortcut_app = false;
+
+  install_manager_->InstallWebApp(
+      web_contents(), force_shortcut_app,
+      base::BindLambdaForTesting(
+          [&](const AppId& installed_app_id, InstallResultCode code) {
+            EXPECT_EQ(InstallResultCode::kWriteDataFailed, code);
+            EXPECT_EQ(AppId(), installed_app_id);
+            callback_called = true;
+            run_loop.Quit();
+          }));
+  run_loop.Run();
+  EXPECT_TRUE(callback_called);
+
+  const base::FilePath temp_dir = web_apps_dir.AppendASCII("Temp");
+  EXPECT_TRUE(file_utils_->DirectoryExists(temp_dir));
+  EXPECT_TRUE(file_utils_->IsDirectoryEmpty(temp_dir));
+
+  const AppId app_id = GenerateAppIdFromURL(app_url);
+  const base::FilePath app_dir = web_apps_dir.AppendASCII(app_id);
+  EXPECT_FALSE(file_utils_->DirectoryExists(app_dir));
+}
+
 // TODO(loyso): Convert more tests from bookmark_app_helper_unittest.cc
 
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_provider.cc b/chrome/browser/web_applications/web_app_provider.cc
index 90314c87..c61e2a9 100644
--- a/chrome/browser/web_applications/web_app_provider.cc
+++ b/chrome/browser/web_applications/web_app_provider.cc
@@ -17,10 +17,12 @@
 #include "chrome/browser/web_applications/extensions/pending_bookmark_app_manager.h"
 #include "chrome/browser/web_applications/extensions/web_app_extension_ids_map.h"
 #include "chrome/browser/web_applications/external_web_apps.h"
+#include "chrome/browser/web_applications/file_utils_wrapper.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
 #include "chrome/browser/web_applications/system_web_app_manager.h"
 #include "chrome/browser/web_applications/web_app_database.h"
 #include "chrome/browser/web_applications/web_app_database_factory.h"
+#include "chrome/browser/web_applications/web_app_icon_manager.h"
 #include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
 #include "chrome/browser/web_applications/web_app_provider_factory.h"
@@ -62,9 +64,11 @@
   database_factory_ = std::make_unique<WebAppDatabaseFactory>(profile);
   database_ = std::make_unique<WebAppDatabase>(database_factory_.get());
   registrar_ = std::make_unique<WebAppRegistrar>(database_.get());
+  icon_manager_ = std::make_unique<WebAppIconManager>(
+      profile, std::make_unique<FileUtilsWrapper>());
 
-  auto install_finalizer =
-      std::make_unique<WebAppInstallFinalizer>(registrar_.get());
+  auto install_finalizer = std::make_unique<WebAppInstallFinalizer>(
+      registrar_.get(), icon_manager_.get());
   install_manager_ = std::make_unique<WebAppInstallManager>(
       profile, std::move(install_finalizer));
 
@@ -132,6 +136,7 @@
   pending_app_manager_.reset();
 
   install_manager_.reset();
+  icon_manager_.reset();
   registrar_.reset();
   database_.reset();
   database_factory_.reset();
diff --git a/chrome/browser/web_applications/web_app_provider.h b/chrome/browser/web_applications/web_app_provider.h
index 65ed8c4..e37b6cb 100644
--- a/chrome/browser/web_applications/web_app_provider.h
+++ b/chrome/browser/web_applications/web_app_provider.h
@@ -34,6 +34,7 @@
 // Forward declarations for new extension-independent subsystems.
 class WebAppDatabase;
 class WebAppDatabaseFactory;
+class WebAppIconManager;
 class WebAppRegistrar;
 
 // Forward declarations for legacy extension-based subsystems.
@@ -87,6 +88,7 @@
   std::unique_ptr<WebAppDatabaseFactory> database_factory_;
   std::unique_ptr<WebAppDatabase> database_;
   std::unique_ptr<WebAppRegistrar> registrar_;
+  std::unique_ptr<WebAppIconManager> icon_manager_;
 
   // New generalized subsystems:
   std::unique_ptr<InstallManager> install_manager_;
diff --git a/chrome/browser/web_applications/web_app_utils.cc b/chrome/browser/web_applications/web_app_utils.cc
index 6e5bf76..cfe1848 100644
--- a/chrome/browser/web_applications/web_app_utils.cc
+++ b/chrome/browser/web_applications/web_app_utils.cc
@@ -4,13 +4,21 @@
 
 #include "chrome/browser/web_applications/web_app_utils.h"
 
+#include "base/files/file_path.h"
 #include "chrome/browser/profiles/profile.h"
 
 namespace web_app {
 
+constexpr base::FilePath::CharType kWebAppsDirectoryName[] =
+    FILE_PATH_LITERAL("WebApps");
+
 bool AllowWebAppInstallation(Profile* profile) {
   return !profile->IsGuestSession() && !profile->IsOffTheRecord() &&
          !profile->IsSystemProfile();
 }
 
+base::FilePath GetWebAppsDirectory(Profile* profile) {
+  return profile->GetPath().Append(base::FilePath(kWebAppsDirectoryName));
+}
+
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_utils.h b/chrome/browser/web_applications/web_app_utils.h
index e7f0291..3f21e79 100644
--- a/chrome/browser/web_applications/web_app_utils.h
+++ b/chrome/browser/web_applications/web_app_utils.h
@@ -7,10 +7,16 @@
 
 class Profile;
 
+namespace base {
+class FilePath;
+}
+
 namespace web_app {
 
 bool AllowWebAppInstallation(Profile* profile);
 
+base::FilePath GetWebAppsDirectory(Profile* profile);
+
 }  // namespace web_app
 
 #endif  // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_UTILS_H_
diff --git a/chrome/common/extensions/chrome_extensions_client.cc b/chrome/common/extensions/chrome_extensions_client.cc
index 15e98b7..2c4d8cb 100644
--- a/chrome/common/extensions/chrome_extensions_client.cc
+++ b/chrome/common/extensions/chrome_extensions_client.cc
@@ -285,7 +285,7 @@
       is_extension_active) {
     origin_patterns->push_back(network::mojom::CorsOriginPattern::New(
         content::kChromeUIScheme, chrome::kChromeUIThemeHost,
-        false /*allow_destination_subdomains*/,
+        network::mojom::CorsOriginAccessMatchMode::kDisallowSubdomains,
         network::mojom::CorsOriginAccessMatchPriority::kMaxPriority));
   }
 
@@ -296,7 +296,7 @@
                                  extensions::APIPermission::kManagement)) {
     origin_patterns->push_back(network::mojom::CorsOriginPattern::New(
         content::kChromeUIScheme, chrome::kChromeUIExtensionIconHost,
-        false /*allow_destination_subdomains*/,
+        network::mojom::CorsOriginAccessMatchMode::kDisallowSubdomains,
         network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority));
   }
 }
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc
index 0017cbd..7b4dea7 100644
--- a/chrome/common/webui_url_constants.cc
+++ b/chrome/common/webui_url_constants.cc
@@ -143,8 +143,6 @@
     "managed-user-passphrase";
 const char kChromeUISyncConfirmationHost[] = "sync-confirmation";
 const char kChromeUISyncConfirmationURL[] = "chrome://sync-confirmation/";
-const char kChromeUISyncConsentBumpURL[] =
-    "chrome://sync-confirmation/?consent-bump";
 const char kChromeUISyncFileSystemInternalsHost[] = "syncfs-internals";
 const char kChromeUISyncHost[] = "sync";
 const char kChromeUISyncInternalsHost[] = "sync-internals";
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h
index dc23e45a..4e9c2a14 100644
--- a/chrome/common/webui_url_constants.h
+++ b/chrome/common/webui_url_constants.h
@@ -144,7 +144,6 @@
 extern const char kChromeUISupervisedUserPassphrasePageHost[];
 extern const char kChromeUISyncConfirmationHost[];
 extern const char kChromeUISyncConfirmationURL[];
-extern const char kChromeUISyncConsentBumpURL[];
 extern const char kChromeUISyncFileSystemInternalsHost[];
 extern const char kChromeUISyncHost[];
 extern const char kChromeUISyncInternalsHost[];
diff --git a/chrome/renderer/autofill/form_autofill_browsertest.cc b/chrome/renderer/autofill/form_autofill_browsertest.cc
index df931621..debce1f 100644
--- a/chrome/renderer/autofill/form_autofill_browsertest.cc
+++ b/chrome/renderer/autofill/form_autofill_browsertest.cc
@@ -5840,5 +5840,87 @@
                                         EXTRACT_NONE, &form, &field));
 }
 
+TEST_F(FormAutofillTest, AriaLabelAndDescription) {
+  LoadHTML(
+      "<form id='form'>"
+      "  <div id='label'>aria label</div>"
+      "  <div id='description'>aria description</div>"
+      "  <input type='text' id='field0' aria-label='inline aria label'>"
+      "  <input type='text' id='field1' aria-labelledby='label'>"
+      "  <input type='text' id='field2' aria-describedby='description'>"
+      "</form>");
+
+  WebLocalFrame* frame = GetMainFrame();
+  ASSERT_NE(nullptr, frame);
+
+  WebFormElement web_form =
+      frame->GetDocument().GetElementById("form").To<WebFormElement>();
+  ASSERT_FALSE(web_form.IsNull());
+
+  WebFormControlElement control_element =
+      frame->GetDocument().GetElementById("field0").To<WebFormControlElement>();
+  ASSERT_FALSE(control_element.IsNull());
+  FormData form;
+  FormFieldData field;
+  EXPECT_TRUE(WebFormElementToFormData(web_form, control_element, nullptr,
+                                       EXTRACT_NONE, &form, &field));
+
+  const std::vector<FormFieldData>& fields = form.fields;
+  ASSERT_EQ(3U, fields.size());
+
+  // Field 0
+  EXPECT_EQ(ASCIIToUTF16("inline aria label"), fields[0].aria_label);
+  EXPECT_EQ(ASCIIToUTF16(""), fields[0].aria_description);
+
+  // Field 1
+  EXPECT_EQ(ASCIIToUTF16("aria label"), fields[1].aria_label);
+  EXPECT_EQ(ASCIIToUTF16(""), fields[1].aria_description);
+
+  // Field 2
+  EXPECT_EQ(ASCIIToUTF16(""), fields[2].aria_label);
+  EXPECT_EQ(ASCIIToUTF16("aria description"), fields[2].aria_description);
+}
+
+TEST_F(FormAutofillTest, AriaLabelAndDescription2) {
+  LoadHTML(
+      "<form id='form'>"
+      "  <input type='text' id='field0' aria-label='inline aria label'>"
+      "  <input type='text' id='field1' aria-labelledby='label'>"
+      "  <input type='text' id='field2' aria-describedby='description'>"
+      "</form>"
+      "  <div id='label'>aria label</div>"
+      "  <div id='description'>aria description</div>");
+
+  WebLocalFrame* frame = GetMainFrame();
+  ASSERT_NE(nullptr, frame);
+
+  WebFormElement web_form =
+      frame->GetDocument().GetElementById("form").To<WebFormElement>();
+  ASSERT_FALSE(web_form.IsNull());
+
+  WebFormControlElement control_element =
+      frame->GetDocument().GetElementById("field0").To<WebFormControlElement>();
+  ASSERT_FALSE(control_element.IsNull());
+  FormData form;
+  FormFieldData field;
+  EXPECT_TRUE(WebFormElementToFormData(web_form, control_element, nullptr,
+                                       EXTRACT_NONE, &form, &field));
+
+  const std::vector<FormFieldData>& fields = form.fields;
+  ASSERT_EQ(3U, fields.size());
+
+  // Field 0
+  EXPECT_EQ(ASCIIToUTF16("inline aria label"), fields[0].aria_label);
+  EXPECT_EQ(ASCIIToUTF16(""), fields[0].aria_description);
+
+  // Field 1
+  EXPECT_EQ(ASCIIToUTF16("aria label"), fields[1].aria_label);
+  EXPECT_EQ(ASCIIToUTF16(""), fields[1].aria_description);
+
+  // Field 2
+  EXPECT_EQ(ASCIIToUTF16(""), fields[2].aria_label);
+  EXPECT_EQ(ASCIIToUTF16("aria description"), fields[2].aria_description);
+}
+
 }  // namespace form_util
 }  // namespace autofill
diff --git a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
index afd162c..c4ad6be 100644
--- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -608,6 +608,8 @@
     EXPECT_EQ(ASCIIToUTF16(new_password_value), form.new_password_value);
     EXPECT_EQ(SubmissionIndicatorEvent::HTML_FORM_SUBMISSION,
               form.submission_event);
+    EXPECT_EQ(SubmissionIndicatorEvent::HTML_FORM_SUBMISSION,
+              form.form_data.submission_event);
   }
 
   void ExpectFieldPropertiesMasks(
@@ -656,6 +658,7 @@
     EXPECT_EQ(ASCIIToUTF16(password_value), form.password_value);
     EXPECT_EQ(ASCIIToUTF16(new_password_value), form.new_password_value);
     EXPECT_EQ(event, form.submission_event);
+    EXPECT_EQ(event, form.form_data.submission_event);
   }
 
   void CheckIfEventsAreCalled(const std::vector<base::string16>& checkers,
diff --git a/chrome/services/app_service/BUILD.gn b/chrome/services/app_service/BUILD.gn
index 3fb12004..7999f0c 100644
--- a/chrome/services/app_service/BUILD.gn
+++ b/chrome/services/app_service/BUILD.gn
@@ -7,8 +7,6 @@
 
 source_set("lib") {
   sources = [
-    "app_registry/app_registry.cc",
-    "app_registry/app_registry.h",
     "app_service.cc",
     "app_service.h",
     "app_service_impl.cc",
@@ -17,8 +15,6 @@
 
   deps = [
     "//base",
-    "//components/pref_registry",
-    "//components/prefs",
     "//mojo/public/cpp/bindings",
     "//services/preferences/public/cpp",
     "//services/service_manager/public/cpp",
@@ -33,13 +29,11 @@
   testonly = true
 
   sources = [
-    "app_registry/app_registry_unittest.cc",
     "app_service_impl_unittest.cc",
   ]
 
   deps = [
     ":lib",
-    "//components/prefs:test_support",
     "//testing/gtest",
   ]
 }
diff --git a/chrome/services/app_service/DEPS b/chrome/services/app_service/DEPS
index bb89608e..48e88750 100644
--- a/chrome/services/app_service/DEPS
+++ b/chrome/services/app_service/DEPS
@@ -1,5 +1,2 @@
 include_rules = [
-  "+components/pref_registry",
-  "+components/prefs",
-  "+services/preferences/public",
 ]
diff --git a/chrome/services/app_service/README.md b/chrome/services/app_service/README.md
index 3c2b926d..e29a7e3 100644
--- a/chrome/services/app_service/README.md
+++ b/chrome/services/app_service/README.md
@@ -253,7 +253,7 @@
 
 Icon data (even compressed as a PNG) is bulky, relative to the rest of the
 `App` type. `Publisher`s will generally serve icon data lazily, on demand,
-especially as the desired icon resolutions (e.g. 64px or 256px) aren't known
+especially as the desired icon resolutions (e.g. 64dip or 256dip) aren't known
 up-front. Instead of sending an icon at all possible resolutions, the
 `Publisher` sends an `IconKey`: enough information (when combined with the
 `AppType app_type` and `string app_id`) to load the icon at given resoultions.
@@ -278,15 +278,23 @@
 
     interface AppService {
       // App Icon Factory methods.
-      LoadIcon(AppType app_type,
-          string app_id, IconKey icon_key, LoadIconOptions? opts) => (gfx.mojom.ImageSkia image);
+      LoadIcon(
+          AppType app_type,
+          string app_id,
+          IconKey icon_key,
+          IconCompression icon_compression,
+          int32 size_hint_in_dip) => (IconValue icon_value);
 
       // Some additional methods; not App Icon Factory related.
     };
 
     interface Publisher {
       // App Icon Factory methods.
-      LoadIcon(string app_id, IconKey icon_key, LoadIconOptions? opts) => (gfx.mojom.ImageSkia image);
+      LoadIcon(
+          string app_id,
+          IconKey icon_key,
+          IconCompression icon_compression,
+          int32 size_hint_in_dip) => (IconValue icon_value);
 
       // Some additional methods; not App Icon Factory related.
     };
@@ -304,9 +312,16 @@
       string s_key;
     };
 
-    struct LoadIconOptions {
-      // TBD: desired resolutions (e.g. 64px or 256px). This could move out of
-      // LoadIconOptions to be a mandatory (not optional) LoadIcon arg.
+    enum IconCompression {
+      kUnknown,
+      kUncompressed,
+      kCompressed,
+    };
+
+    struct IconValue {
+      IconCompression icon_compression;
+      gfx.mojom.ImageSkia? uncompressed;
+      array<uint8>? compressed;
     };
 
 TBD: post-processing effects like rounded corners, badges or grayed out (for
@@ -368,4 +383,4 @@
 
 ---
 
-Updated on 2018-11-16.
+Updated on 2018-11-22.
diff --git a/chrome/services/app_service/app_registry/app_registry.cc b/chrome/services/app_service/app_registry/app_registry.cc
deleted file mode 100644
index d2bcbcba..0000000
--- a/chrome/services/app_service/app_registry/app_registry.cc
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <utility>
-
-#include "chrome/services/app_service/app_registry/app_registry.h"
-
-#include "base/values.h"
-#include "components/pref_registry/pref_registry_syncable.h"
-#include "components/prefs/pref_service.h"
-#include "components/prefs/scoped_user_pref_update.h"
-
-namespace {
-
-// Key for synced App Registry prefs. The pref format is a dictionary where the
-// key is an app ID and the value is a dictionary of app metadata.
-constexpr char kAppRegistryPrefNameSynced[] = "app_registry_synced";
-
-// Key for per-app preferences within the app metadata dictionary. Used to store
-// arbitrary data per each app.
-constexpr char kAppRegistryPrefNamePrefs[] = "prefs";
-
-// Key for whether an app should be preferred for opening links.
-constexpr char kAppRegistryPrefKeyPreferred[] = "preferred";
-
-}  // namespace
-
-namespace apps {
-
-// static
-void AppRegistry::RegisterPrefs(PrefRegistrySimple* registry) {
-  // Note: it may be desirable to add a non-synced pref if some future app
-  // metadata should remain local to the device.
-  registry->RegisterDictionaryPref(
-      kAppRegistryPrefNameSynced,
-      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
-}
-
-AppRegistry::AppRegistry(std::unique_ptr<PrefService> pref_service)
-    : pref_service_(std::move(pref_service)) {}
-
-AppRegistry::~AppRegistry() = default;
-
-void AppRegistry::BindRequest(apps::mojom::AppRegistryRequest request) {
-  bindings_.AddBinding(this, std::move(request));
-}
-
-apps::mojom::AppPreferred AppRegistry::GetIfAppPreferredForTesting(
-    const std::string& app_id) const {
-  const base::Value* value =
-      pref_service_->GetDictionary(kAppRegistryPrefNameSynced)
-          ->FindPathOfType(
-              {app_id, kAppRegistryPrefNamePrefs, kAppRegistryPrefKeyPreferred},
-              base::Value::Type::INTEGER);
-  return value ? static_cast<apps::mojom::AppPreferred>(value->GetInt())
-               : apps::mojom::AppPreferred::kUnknown;
-}
-
-void AppRegistry::SetAppPreferred(const std::string& app_id,
-                                  apps::mojom::AppPreferred state) {
-  DictionaryPrefUpdate dict_update(pref_service_.get(),
-                                   kAppRegistryPrefNameSynced);
-  dict_update->SetPath(
-      {app_id, kAppRegistryPrefNamePrefs, kAppRegistryPrefKeyPreferred},
-      base::Value(static_cast<int>(state)));
-}
-
-}  // namespace apps
diff --git a/chrome/services/app_service/app_registry/app_registry.h b/chrome/services/app_service/app_registry/app_registry.h
deleted file mode 100644
index 773f9f86..0000000
--- a/chrome/services/app_service/app_registry/app_registry.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_SERVICES_APP_SERVICE_APP_REGISTRY_APP_REGISTRY_H_
-#define CHROME_SERVICES_APP_SERVICE_APP_REGISTRY_APP_REGISTRY_H_
-
-#include <memory>
-#include <string>
-
-#include "base/macros.h"
-#include "chrome/services/app_service/public/mojom/app_registry.mojom.h"
-#include "mojo/public/cpp/bindings/binding_set.h"
-
-class PrefRegistrySimple;
-class PrefService;
-
-namespace apps {
-
-// The app registry maintains metadata on installed apps.
-//
-// TODO: rename this class? See the TODO in app_registry.mojom.
-class AppRegistry : public apps::mojom::AppRegistry {
- public:
-  static void RegisterPrefs(PrefRegistrySimple* registry);
-
-  explicit AppRegistry(std::unique_ptr<PrefService> pref_service);
-  ~AppRegistry() override;
-
-  void BindRequest(apps::mojom::AppRegistryRequest request);
-
-  // Returns |app_id|'s preferred state.
-  apps::mojom::AppPreferred GetIfAppPreferredForTesting(
-      const std::string& app_id) const;
-
-  // mojom::apps::AppRegistry overrides.
-  void SetAppPreferred(const std::string& app_id,
-                       apps::mojom::AppPreferred state) override;
-
- private:
-  std::unique_ptr<PrefService> pref_service_;
-  mojo::BindingSet<apps::mojom::AppRegistry> bindings_;
-
-  DISALLOW_COPY_AND_ASSIGN(AppRegistry);
-};
-
-}  // namespace apps
-
-#endif  // CHROME_SERVICES_APP_SERVICE_APP_REGISTRY_APP_REGISTRY_H_
diff --git a/chrome/services/app_service/app_registry/app_registry_unittest.cc b/chrome/services/app_service/app_registry/app_registry_unittest.cc
deleted file mode 100644
index a45a5474..0000000
--- a/chrome/services/app_service/app_registry/app_registry_unittest.cc
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <algorithm>
-#include <memory>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/message_loop/message_loop.h"
-#include "base/run_loop.h"
-#include "chrome/services/app_service/app_registry/app_registry.h"
-#include "components/prefs/testing_pref_service.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-const char kTestAppId1[] = "test.app.id.1";
-const char kTestAppId2[] = "test.app.id.2";
-}  // namespace
-
-namespace apps {
-
-class AppRegistryTest : public testing::Test {
- protected:
-  std::unique_ptr<AppRegistry> CreateAppRegistry() {
-    auto pref_service = std::make_unique<TestingPrefServiceSimple>();
-    AppRegistry::RegisterPrefs(pref_service->registry());
-    return std::make_unique<AppRegistry>(std::move(pref_service));
-  }
-};
-
-TEST_F(AppRegistryTest, SetAppPreferred) {
-  auto registry = CreateAppRegistry();
-
-  EXPECT_EQ(apps::mojom::AppPreferred::kUnknown,
-            registry->GetIfAppPreferredForTesting(kTestAppId1));
-  EXPECT_EQ(apps::mojom::AppPreferred::kUnknown,
-            registry->GetIfAppPreferredForTesting(kTestAppId2));
-
-  registry->SetAppPreferred(kTestAppId1, apps::mojom::AppPreferred::kPreferred);
-  EXPECT_EQ(apps::mojom::AppPreferred::kPreferred,
-            registry->GetIfAppPreferredForTesting(kTestAppId1));
-  EXPECT_EQ(apps::mojom::AppPreferred::kUnknown,
-            registry->GetIfAppPreferredForTesting(kTestAppId2));
-
-  registry->SetAppPreferred(kTestAppId1,
-                            apps::mojom::AppPreferred::kNotPreferred);
-  EXPECT_EQ(apps::mojom::AppPreferred::kNotPreferred,
-            registry->GetIfAppPreferredForTesting(kTestAppId1));
-  EXPECT_EQ(apps::mojom::AppPreferred::kUnknown,
-            registry->GetIfAppPreferredForTesting(kTestAppId2));
-
-  registry->SetAppPreferred(kTestAppId2, apps::mojom::AppPreferred::kPreferred);
-  EXPECT_EQ(apps::mojom::AppPreferred::kNotPreferred,
-            registry->GetIfAppPreferredForTesting(kTestAppId1));
-  EXPECT_EQ(apps::mojom::AppPreferred::kPreferred,
-            registry->GetIfAppPreferredForTesting(kTestAppId2));
-
-  registry->SetAppPreferred(kTestAppId2,
-                            apps::mojom::AppPreferred::kNotPreferred);
-  EXPECT_EQ(apps::mojom::AppPreferred::kNotPreferred,
-            registry->GetIfAppPreferredForTesting(kTestAppId1));
-  EXPECT_EQ(apps::mojom::AppPreferred::kNotPreferred,
-            registry->GetIfAppPreferredForTesting(kTestAppId2));
-}
-
-}  // namespace apps
diff --git a/chrome/services/app_service/app_service.cc b/chrome/services/app_service/app_service.cc
index 67a64a3..bef0988e 100644
--- a/chrome/services/app_service/app_service.cc
+++ b/chrome/services/app_service/app_service.cc
@@ -2,16 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chrome/services/app_service/app_service.h"
+
 #include <utility>
 
 #include "base/bind.h"
-#include "base/memory/ref_counted.h"
-#include "chrome/services/app_service/app_registry/app_registry.h"
-#include "chrome/services/app_service/app_service.h"
-#include "components/prefs/pref_registry_simple.h"
-#include "components/prefs/pref_service.h"
-#include "services/preferences/public/cpp/pref_service_factory.h"
-#include "services/service_manager/public/cpp/service_context.h"
 
 namespace apps {
 
@@ -20,18 +15,8 @@
 AppService::~AppService() = default;
 
 void AppService::OnStart() {
-  binder_registry_.AddInterface<apps::mojom::AppRegistry>(base::BindRepeating(
-      &AppService::BindAppRegistryRequest, base::Unretained(this)));
   binder_registry_.AddInterface<apps::mojom::AppService>(base::BindRepeating(
       &AppServiceImpl::BindRequest, base::Unretained(&impl_)));
-
-  auto pref_registry = base::MakeRefCounted<PrefRegistrySimple>();
-  AppRegistry::RegisterPrefs(pref_registry.get());
-
-  prefs::ConnectToPrefService(
-      context()->connector(), std::move(pref_registry),
-      base::BindRepeating(&AppService::OnPrefServiceConnected,
-                          base::Unretained(this)));
 }
 
 void AppService::OnBindInterface(const service_manager::BindSourceInfo& source,
@@ -40,28 +25,4 @@
   binder_registry_.BindInterface(interface_name, std::move(interface_pipe));
 }
 
-void AppService::BindAppRegistryRequest(
-    apps::mojom::AppRegistryRequest request) {
-  if (!IsInitializationComplete()) {
-    pending_app_registry_requests_.push_back(std::move(request));
-    return;
-  }
-
-  app_registry_->BindRequest(std::move(request));
-}
-
-void AppService::OnPrefServiceConnected(
-    std::unique_ptr<::PrefService> pref_service) {
-  // Connecting to the pref service is required for the app_registry_ to
-  // function.
-  DCHECK(pref_service);
-  app_registry_ = std::make_unique<AppRegistry>(std::move(pref_service));
-
-  DCHECK(IsInitializationComplete());
-  for (auto& request : pending_app_registry_requests_)
-    BindAppRegistryRequest(std::move(request));
-
-  pending_app_registry_requests_.clear();
-}
-
 }  // namespace apps
diff --git a/chrome/services/app_service/app_service.h b/chrome/services/app_service/app_service.h
index 5397d52d..95e6fc0 100644
--- a/chrome/services/app_service/app_service.h
+++ b/chrome/services/app_service/app_service.h
@@ -5,22 +5,15 @@
 #ifndef CHROME_SERVICES_APP_SERVICE_APP_SERVICE_H_
 #define CHROME_SERVICES_APP_SERVICE_APP_SERVICE_H_
 
-#include <memory>
-#include <vector>
+#include <string>
 
 #include "base/macros.h"
 #include "chrome/services/app_service/app_service_impl.h"
-#include "chrome/services/app_service/public/mojom/app_registry.mojom.h"
-#include "chrome/services/app_service/public/mojom/app_service.mojom.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/cpp/service.h"
 
-class PrefService;
-
 namespace apps {
 
-class AppRegistry;
-
 // The service (in the service_manager::Service sense) aspect of the App
 // Service. For the implementation of the apps::mojom::AppService Mojo
 // interface, see the AppServiceImpl class.
@@ -31,29 +24,17 @@
   AppService();
   ~AppService() override;
 
-  // service_manager::Service:
+  // service_manager::Service overrides.
   void OnStart() override;
   void OnBindInterface(const service_manager::BindSourceInfo& source,
                        const std::string& interface_name,
                        mojo::ScopedMessagePipeHandle interface_pipe) override;
 
  private:
-  void BindAppRegistryRequest(apps::mojom::AppRegistryRequest request);
-
-  bool IsInitializationComplete() const { return app_registry_ != nullptr; }
-
-  void OnPrefServiceConnected(std::unique_ptr<PrefService> pref_service);
-
   service_manager::BinderRegistry binder_registry_;
 
   AppServiceImpl impl_;
 
-  std::unique_ptr<AppRegistry> app_registry_;
-
-  // Requests which will be serviced once initialization of the App Registry is
-  // complete.
-  std::vector<apps::mojom::AppRegistryRequest> pending_app_registry_requests_;
-
   DISALLOW_COPY_AND_ASSIGN(AppService);
 };
 
diff --git a/chrome/services/app_service/app_service_impl.cc b/chrome/services/app_service/app_service_impl.cc
index b54d1b6..0b53175 100644
--- a/chrome/services/app_service/app_service_impl.cc
+++ b/chrome/services/app_service/app_service_impl.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/bind.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 
 namespace {
@@ -38,22 +39,22 @@
   });
 
   // Check that no previous publisher has registered for the same app_type.
-  CHECK(publishers_by_type_.find(app_type) == publishers_by_type_.end());
+  CHECK(publishers_.find(app_type) == publishers_.end());
 
   // Add the new publisher to the set.
-  //
-  // We also track publishers by their app_type, so that we can forward other
-  // App Service method calls on to one particular publisher, instead of
-  // broadcasting to all publishers.
-  publishers_by_type_[app_type] = publishers_.AddPtr(std::move(publisher));
+  publisher.set_connection_error_handler(
+      base::BindOnce(&AppServiceImpl::OnPublisherDisconnected,
+                     base::Unretained(this), app_type));
+  auto result = publishers_.emplace(app_type, std::move(publisher));
+  CHECK(result.second);
 }
 
 void AppServiceImpl::RegisterSubscriber(apps::mojom::SubscriberPtr subscriber,
                                         apps::mojom::ConnectOptionsPtr opts) {
   // Connect the new subscriber with every registered publisher.
-  publishers_.ForAllPtrs([&subscriber](auto* publisher) {
-    ::Connect(publisher, subscriber.get());
-  });
+  for (const auto& iter : publishers_) {
+    ::Connect(iter.second.get(), subscriber.get());
+  }
 
   // TODO: store the opts somewhere.
 
@@ -61,4 +62,23 @@
   subscribers_.AddPtr(std::move(subscriber));
 }
 
+void AppServiceImpl::LoadIcon(apps::mojom::AppType app_type,
+                              const std::string& app_id,
+                              apps::mojom::IconKeyPtr icon_key,
+                              apps::mojom::IconCompression icon_compression,
+                              int32_t size_hint_in_dip,
+                              LoadIconCallback callback) {
+  auto iter = publishers_.find(app_type);
+  if (iter == publishers_.end()) {
+    std::move(callback).Run(apps::mojom::IconValue::New());
+    return;
+  }
+  iter->second->LoadIcon(app_id, std::move(icon_key), icon_compression,
+                         size_hint_in_dip, std::move(callback));
+}
+
+void AppServiceImpl::OnPublisherDisconnected(apps::mojom::AppType app_type) {
+  publishers_.erase(app_type);
+}
+
 }  // namespace apps
diff --git a/chrome/services/app_service/app_service_impl.h b/chrome/services/app_service/app_service_impl.h
index c589ba9..cf4002d 100644
--- a/chrome/services/app_service/app_service_impl.h
+++ b/chrome/services/app_service/app_service_impl.h
@@ -31,13 +31,20 @@
                          apps::mojom::AppType app_type) override;
   void RegisterSubscriber(apps::mojom::SubscriberPtr subscriber,
                           apps::mojom::ConnectOptionsPtr opts) override;
+  void LoadIcon(apps::mojom::AppType app_type,
+                const std::string& app_id,
+                apps::mojom::IconKeyPtr icon_key,
+                apps::mojom::IconCompression icon_compression,
+                int32_t size_hint_in_dip,
+                LoadIconCallback callback) override;
 
  private:
-  mojo::BindingSet<apps::mojom::AppService> bindings_;
+  void OnPublisherDisconnected(apps::mojom::AppType app_type);
 
-  std::map<apps::mojom::AppType, mojo::InterfacePtrSetElementId>
-      publishers_by_type_;
-  mojo::InterfacePtrSet<apps::mojom::Publisher> publishers_;
+  mojo::BindingSet<apps::mojom::AppService> bindings_;
+  // publishers_ is a std::map, not a mojo::InterfacePtrSet, since we want to
+  // be able to find *the* publisher for a given apps::mojom::AppType.
+  std::map<apps::mojom::AppType, apps::mojom::PublisherPtr> publishers_;
   mojo::InterfacePtrSet<apps::mojom::Subscriber> subscribers_;
 
   DISALLOW_COPY_AND_ASSIGN(AppServiceImpl);
diff --git a/chrome/services/app_service/app_service_impl_unittest.cc b/chrome/services/app_service/app_service_impl_unittest.cc
index 22357707..4a3eeca8 100644
--- a/chrome/services/app_service/app_service_impl_unittest.cc
+++ b/chrome/services/app_service/app_service_impl_unittest.cc
@@ -4,11 +4,14 @@
 
 #include <set>
 #include <sstream>
+#include <utility>
 #include <vector>
 
+#include "base/callback.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "chrome/services/app_service/app_service_impl.h"
+#include "chrome/services/app_service/public/mojom/types.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace apps {
@@ -33,6 +36,8 @@
     }
   }
 
+  std::string load_icon_app_id_;
+
  private:
   void Connect(apps::mojom::SubscriberPtr subscriber,
                apps::mojom::ConnectOptionsPtr opts) override {
@@ -40,6 +45,15 @@
     subscribers_.AddPtr(std::move(subscriber));
   }
 
+  void LoadIcon(const std::string& app_id,
+                apps::mojom::IconKeyPtr icon_key,
+                apps::mojom::IconCompression icon_compression,
+                int32_t size_hint_in_dip,
+                LoadIconCallback callback) override {
+    load_icon_app_id_ = app_id;
+    std::move(callback).Run(apps::mojom::IconValue::New());
+  }
+
   void CallOnApps(apps::mojom::Subscriber* subscriber,
                   std::vector<std::string>& app_ids) {
     std::vector<apps::mojom::AppPtr> apps;
@@ -98,6 +112,8 @@
 };
 
 TEST_F(AppServiceImplTest, PubSub) {
+  const int size_hint_in_dip = 64;
+
   AppServiceImpl impl;
 
   // Start with one subscriber.
@@ -154,6 +170,34 @@
   base::RunLoop().RunUntilIdle();
   EXPECT_EQ("$&ABCDEFGmnopqr", sub0.AppIdsSeen());
   EXPECT_EQ("$&ABCDEFGmnopqr", sub1.AppIdsSeen());
+
+  // Call LoadIcon on the impl twice.
+  //
+  // The first time (i == 0), it should be forwarded onto the AppType::kBuiltIn
+  // publisher (which is pub1) and no other publisher.
+  //
+  // The second time (i == 1), passing AppType::kUnknown, none of the
+  // publishers' LoadIcon's should fire, but the callback should still be run.
+  for (int i = 0; i < 2; i++) {
+    auto app_type = i == 0 ? apps::mojom::AppType::kBuiltIn
+                           : apps::mojom::AppType::kUnknown;
+
+    bool callback_ran = false;
+    pub0.load_icon_app_id_ = "-";
+    pub1.load_icon_app_id_ = "-";
+    pub2.load_icon_app_id_ = "-";
+    impl.LoadIcon(
+        app_type, "o", apps::mojom::IconKey::New(),
+        apps::mojom::IconCompression::kUncompressed, size_hint_in_dip,
+        base::BindOnce(
+            [](bool* ran, apps::mojom::IconValuePtr iv) { *ran = true; },
+            &callback_ran));
+    base::RunLoop().RunUntilIdle();
+    EXPECT_TRUE(callback_ran);
+    EXPECT_EQ("-", pub0.load_icon_app_id_);
+    EXPECT_EQ(i == 0 ? "o" : "-", pub1.load_icon_app_id_);
+    EXPECT_EQ("-", pub2.load_icon_app_id_);
+  }
 }
 
 }  // namespace apps
diff --git a/chrome/services/app_service/manifest.json b/chrome/services/app_service/manifest.json
index 54bc1b8..e39e7274 100644
--- a/chrome/services/app_service/manifest.json
+++ b/chrome/services/app_service/manifest.json
@@ -6,7 +6,6 @@
     "service_manager:connector": {
       "provides": {
         "app_service": [
-          "apps.mojom.AppRegistry",
           "apps.mojom.AppService"
         ]
       },
diff --git a/chrome/services/app_service/public/cpp/app_registry_cache.cc b/chrome/services/app_service/public/cpp/app_registry_cache.cc
index 29329907..289582b 100644
--- a/chrome/services/app_service/public/cpp/app_registry_cache.cc
+++ b/chrome/services/app_service/public/cpp/app_registry_cache.cc
@@ -35,11 +35,19 @@
       iter = states_.insert(Pair(delta->app_id, std::move(state))).first;
     }
 
-    for (auto& obs : observers_) {
-      obs.OnAppUpdate(AppUpdate(iter->second, delta));
-    }
-
+    // Merge the delta, updating the internal states_ map. We do this before we
+    // notify the observers, so that if an observer calls back into the cache,
+    // it will see a consistent snapshot.
+    //
+    // We also keep (as the clone variable) the states_ value before the merge,
+    // so that the observers can know which fields (such as name, icon key or
+    // readiness) have changed.
+    apps::mojom::AppPtr clone = iter->second.Clone();
     AppUpdate::Merge(iter->second.get(), delta);
+
+    for (auto& obs : observers_) {
+      obs.OnAppUpdate(AppUpdate(clone, delta));
+    }
   }
 }
 
diff --git a/chrome/services/app_service/public/cpp/app_registry_cache.h b/chrome/services/app_service/public/cpp/app_registry_cache.h
index 0b7b581..3f9526a4 100644
--- a/chrome/services/app_service/public/cpp/app_registry_cache.h
+++ b/chrome/services/app_service/public/cpp/app_registry_cache.h
@@ -68,6 +68,21 @@
     }
   }
 
+  // Calls f, a void-returning function whose arguments are (const
+  // apps::AppUpdate&), on the app in the cache with the given app_id. It will
+  // return true (and call f) if there is such an app, otherwise it will return
+  // false (and not call f). The AppUpdate argument to f has the same semantics
+  // as for ForEachApp, above.
+  template <typename FunctionType>
+  bool ForOneApp(const std::string& app_id, FunctionType f) {
+    auto iter = states_.find(app_id);
+    if (iter != states_.end()) {
+      f(apps::AppUpdate(iter->second, iter->second));
+      return true;
+    }
+    return false;
+  }
+
  private:
   base::ObserverList<Observer> observers_;
 
diff --git a/chrome/services/app_service/public/cpp/app_registry_cache_unittest.cc b/chrome/services/app_service/public/cpp/app_registry_cache_unittest.cc
index b744ef10..9cd3780 100644
--- a/chrome/services/app_service/public/cpp/app_registry_cache_unittest.cc
+++ b/chrome/services/app_service/public/cpp/app_registry_cache_unittest.cc
@@ -41,6 +41,31 @@
   std::set<std::string> updated_names_;
 };
 
+// Responds to a cache's OnAppUpdate to call back into the cache, checking that
+// the cache presents a self-consistent snapshot. For example, the app names
+// should match for the outer and inner AppUpdate.
+class RecursiveObserver : public apps::AppRegistryCache::Observer {
+ public:
+  explicit RecursiveObserver(apps::AppRegistryCache* cache) : cache_(cache) {
+    cache_->AddObserver(this);
+  }
+
+  ~RecursiveObserver() override { cache_->RemoveObserver(this); }
+
+ protected:
+  // apps::AppRegistryCache::Observer overrides.
+  void OnAppUpdate(const apps::AppUpdate& outer) override {
+    cache_->ForOneApp(outer.AppId(), [&outer](const apps::AppUpdate& inner) {
+      EXPECT_EQ(outer.AppType(), inner.AppType());
+      EXPECT_EQ(outer.AppId(), inner.AppId());
+      EXPECT_EQ(outer.Readiness(), inner.Readiness());
+      EXPECT_EQ(outer.Name(), inner.Name());
+    });
+  }
+
+  apps::AppRegistryCache* cache_;
+};
+
 TEST_F(AppRegistryCacheTest, ForEachApp) {
   std::vector<apps::mojom::AppPtr> deltas;
   apps::AppRegistryCache cache;
@@ -77,6 +102,22 @@
   EXPECT_NE(updated_names_.end(), updated_names_.find("banana"));
   EXPECT_NE(updated_names_.end(), updated_names_.find("cherry"));
   EXPECT_NE(updated_names_.end(), updated_names_.find("durian"));
+
+  // Test that ForOneApp succeeds for "c" and fails for "e".
+
+  bool found_c = false;
+  EXPECT_TRUE(cache.ForOneApp("c", [&found_c](const apps::AppUpdate& update) {
+    found_c = true;
+    EXPECT_EQ("c", update.AppId());
+  }));
+  EXPECT_TRUE(found_c);
+
+  bool found_e = false;
+  EXPECT_FALSE(cache.ForOneApp("e", [&found_e](const apps::AppUpdate& update) {
+    found_e = true;
+    EXPECT_EQ("e", update.AppId());
+  }));
+  EXPECT_FALSE(found_e);
 }
 
 TEST_F(AppRegistryCacheTest, Observer) {
@@ -122,3 +163,25 @@
   EXPECT_EQ(0, num_freshly_installed_);
   EXPECT_EQ(0u, updated_ids_.size());
 }
+
+TEST_F(AppRegistryCacheTest, Recursive) {
+  std::vector<apps::mojom::AppPtr> deltas;
+  apps::AppRegistryCache cache;
+  RecursiveObserver observer(&cache);
+
+  deltas.clear();
+  deltas.push_back(MakeApp("o", "orange"));
+  deltas.push_back(MakeApp("p", "peach"));
+  cache.OnApps(std::move(deltas));
+
+  deltas.clear();
+  deltas.push_back(MakeApp("p", "pear", apps::mojom::Readiness::kReady));
+  deltas.push_back(MakeApp("q", "quince"));
+  cache.OnApps(std::move(deltas));
+
+  deltas.clear();
+  deltas.push_back(MakeApp("p", "pear"));
+  deltas.push_back(MakeApp("p", "pear"));
+  deltas.push_back(MakeApp("p", "plum"));
+  cache.OnApps(std::move(deltas));
+}
diff --git a/chrome/services/app_service/public/cpp/app_update.cc b/chrome/services/app_service/public/cpp/app_update.cc
index 5f47d8eb..db04497d 100644
--- a/chrome/services/app_service/public/cpp/app_update.cc
+++ b/chrome/services/app_service/public/cpp/app_update.cc
@@ -21,6 +21,9 @@
   if (delta->name.has_value()) {
     state->name = delta->name;
   }
+  if (!delta->icon_key.is_null()) {
+    state->icon_key = delta->icon_key.Clone();
+  }
   if (delta->show_in_launcher != apps::mojom::OptionalBool::kUnknown) {
     state->show_in_launcher = delta->show_in_launcher;
   }
@@ -68,6 +71,21 @@
   return delta_->name.has_value() && (delta_->name != state_->name);
 }
 
+apps::mojom::IconKeyPtr AppUpdate::IconKey() const {
+  if (!delta_->icon_key.is_null()) {
+    return delta_->icon_key.Clone();
+  }
+  if (!state_->icon_key.is_null()) {
+    return state_->icon_key.Clone();
+  }
+  return apps::mojom::IconKeyPtr();
+}
+
+bool AppUpdate::IconKeyChanged() const {
+  return !delta_->icon_key.is_null() &&
+         !delta_->icon_key.Equals(state_->icon_key);
+}
+
 apps::mojom::OptionalBool AppUpdate::ShowInLauncher() const {
   return (delta_->show_in_launcher != apps::mojom::OptionalBool::kUnknown)
              ? delta_->show_in_launcher
diff --git a/chrome/services/app_service/public/cpp/app_update.h b/chrome/services/app_service/public/cpp/app_update.h
index 1dbfcce..ac875ac 100644
--- a/chrome/services/app_service/public/cpp/app_update.h
+++ b/chrome/services/app_service/public/cpp/app_update.h
@@ -52,6 +52,9 @@
   const std::string& Name() const;
   bool NameChanged() const;
 
+  apps::mojom::IconKeyPtr IconKey() const;
+  bool IconKeyChanged() const;
+
   apps::mojom::OptionalBool ShowInLauncher() const;
   bool ShowInLauncherChanged() const;
 
diff --git a/chrome/services/app_service/public/cpp/app_update_unittest.cc b/chrome/services/app_service/public/cpp/app_update_unittest.cc
index 3149f57c..f66929d 100644
--- a/chrome/services/app_service/public/cpp/app_update_unittest.cc
+++ b/chrome/services/app_service/public/cpp/app_update_unittest.cc
@@ -110,4 +110,29 @@
   EXPECT_EQ("Inigo Montoya", state->name);
   EXPECT_EQ(apps::mojom::OptionalBool::kUnknown, u.ShowInLauncher());
   EXPECT_EQ(apps::mojom::OptionalBool::kUnknown, state->show_in_launcher);
+
+  // IconKey tests.
+
+  EXPECT_TRUE(u.IconKey().is_null());
+  EXPECT_FALSE(u.IconKeyChanged());
+
+  state->icon_key = apps::mojom::IconKey::New(apps::mojom::IconType::kResource,
+                                              100, std::string());
+
+  EXPECT_FALSE(u.IconKey().is_null());
+  EXPECT_EQ(apps::mojom::IconType::kResource, u.IconKey()->icon_type);
+  EXPECT_FALSE(u.IconKeyChanged());
+
+  delta->icon_key = apps::mojom::IconKey::New(apps::mojom::IconType::kExtension,
+                                              0, "one hundred");
+
+  EXPECT_FALSE(u.IconKey().is_null());
+  EXPECT_EQ(apps::mojom::IconType::kExtension, u.IconKey()->icon_type);
+  EXPECT_TRUE(u.IconKeyChanged());
+
+  apps::AppUpdate::Merge(state.get(), delta);
+
+  EXPECT_FALSE(u.IconKey().is_null());
+  EXPECT_EQ(apps::mojom::IconType::kExtension, u.IconKey()->icon_type);
+  EXPECT_FALSE(u.IconKeyChanged());
 }
diff --git a/chrome/services/app_service/public/mojom/BUILD.gn b/chrome/services/app_service/public/mojom/BUILD.gn
index f733f58..81e5f58 100644
--- a/chrome/services/app_service/public/mojom/BUILD.gn
+++ b/chrome/services/app_service/public/mojom/BUILD.gn
@@ -6,14 +6,12 @@
 
 mojom("mojom") {
   sources = [
-    "app_registry.mojom",
     "app_service.mojom",
   ]
 
   public_deps = [
     ":constants",
     ":types",
-    "//mojo/public/mojom/base",
   ]
 }
 
@@ -27,4 +25,9 @@
   sources = [
     "types.mojom",
   ]
+
+  public_deps = [
+    "//mojo/public/mojom/base",
+    "//ui/gfx/image/mojo:interfaces",
+  ]
 }
diff --git a/chrome/services/app_service/public/mojom/app_registry.mojom b/chrome/services/app_service/public/mojom/app_registry.mojom
deleted file mode 100644
index 0883f3b..0000000
--- a/chrome/services/app_service/public/mojom/app_registry.mojom
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module apps.mojom;
-
-import "chrome/services/app_service/public/mojom/types.mojom";
-
-// The interface through which clients of the App Service can query for data on
-// installed apps.
-//
-// TODO: rename this interface to AppCoordinator? Or merge these methods into
-// the App Service interface (note that this method depends on a prefs service;
-// other App Service methods might not)? Or deprecate this method? Or delete
-// this interface entirely, and add AppCoordinator features independently at a
-// later date? See
-// chrome/services/app_service/README.md.
-interface AppRegistry {
-  // Sets the preferred value for the app represented by |app_id| to |state|.
-  // TODO(crbug.com/826982): mandate that |app_id| must exist in the registry,
-  // or decide that this method no-ops.
-  SetAppPreferred(string app_id, AppPreferred state);
-};
diff --git a/chrome/services/app_service/public/mojom/app_service.mojom b/chrome/services/app_service/public/mojom/app_service.mojom
index 3060408f..13fd718e 100644
--- a/chrome/services/app_service/public/mojom/app_service.mojom
+++ b/chrome/services/app_service/public/mojom/app_service.mojom
@@ -17,11 +17,26 @@
   // App Registry methods.
   RegisterPublisher(Publisher publisher, AppType app_type);
   RegisterSubscriber(Subscriber subscriber, ConnectOptions? opts);
+
+  // App Icon Factory methods.
+  LoadIcon(
+      AppType app_type,
+      string app_id,
+      IconKey icon_key,
+      IconCompression icon_compression,
+      int32 size_hint_in_dip) => (IconValue icon_value);
 };
 
 interface Publisher {
   // App Registry methods.
   Connect(Subscriber subscriber, ConnectOptions? opts);
+
+  // App Icon Factory methods.
+  LoadIcon(
+      string app_id,
+      IconKey icon_key,
+      IconCompression icon_compression,
+      int32 size_hint_in_dip) => (IconValue icon_value);
 };
 
 interface Subscriber {
diff --git a/chrome/services/app_service/public/mojom/types.mojom b/chrome/services/app_service/public/mojom/types.mojom
index 548f9f6..36d2006ec 100644
--- a/chrome/services/app_service/public/mojom/types.mojom
+++ b/chrome/services/app_service/public/mojom/types.mojom
@@ -4,6 +4,8 @@
 
 module apps.mojom;
 
+import "ui/gfx/image/mojo/image.mojom";
+
 // Information about an app. See chrome/services/app_service/README.md.
 struct App {
   AppType app_type;
@@ -13,10 +15,9 @@
 
   Readiness readiness;
   string? name;
+  IconKey? icon_key;
   OptionalBool show_in_launcher;
 
-  // TODO: add more fields, e.g. icon_key.
-
   // When adding new fields, also update the Merge method and other helpers in
   // chrome/services/app_service/public/cpp/app_update.*
 };
@@ -47,29 +48,27 @@
   kTrue,
 };
 
-// Whether an app is preferred by the user, e.g. for capturing links within
-// its scope. Multiple preferred apps with overlapping scope may be set, and
-// the best choice will be resolved via the most specific scope.
-enum AppPreferred {
-  // No preference currently saved.
+enum IconType {
   kUnknown,
-
-  kPreferred,
-
-  kNotPreferred,
+  kExtension,
+  kResource,
 };
 
-// A struct representing an app.
-//
-// Deprecated: use App instead. See chrome/services/app_service/README.md.
-struct AppInfo {
-  // The id of the app. For backwards compabitility, this should currently be
-  // the same as the extension ID that would have been generated for the app.
-  string id;
+struct IconKey {
+  IconType icon_type;
+  // The semantics of u_key and s_key depend on the icon_type.
+  uint64 u_key;
+  string s_key;
+};
 
-  // The type of the app.
-  AppType type;
+enum IconCompression {
+  kUnknown,
+  kUncompressed,
+  kCompressed,
+};
 
-  // The app's current preferred state.
-  AppPreferred preferred;
+struct IconValue {
+  IconCompression icon_compression;
+  gfx.mojom.ImageSkia? uncompressed;
+  array<uint8>? compressed;
 };
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 8b234a101..cc91967 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -3065,6 +3065,7 @@
       "../browser/gcm/gcm_profile_service_unittest.cc",
       "../browser/importer/firefox_profile_lock_unittest.cc",
       "../browser/importer/profile_writer_unittest.cc",
+      "../browser/lifetime/application_lifetime_unittest.cc",
 
       # Media remoting is not supported on Android for now.
       "../browser/media/cast_remoting_connector_unittest.cc",
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc
index 7ee4007..5ff2d2a 100644
--- a/chrome/test/base/testing_profile.cc
+++ b/chrome/test/base/testing_profile.cc
@@ -46,6 +46,7 @@
 #include "chrome/browser/profiles/storage_partition_descriptor.h"
 #include "chrome/browser/search_engines/template_url_fetcher_factory.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
+#include "chrome/browser/signin/signin_util.h"
 #include "chrome/browser/sync/bookmark_sync_service_factory.h"
 #include "chrome/browser/sync/glue/sync_start_util.h"
 #include "chrome/browser/web_data_service_factory.h"
@@ -491,8 +492,15 @@
   if (profile_manager)
     profile_manager->InitProfileUserPrefs(this);
 
-  if (delegate_)
+  if (delegate_) {
     delegate_->OnProfileCreated(this, true, false);
+  } else {
+    // It is the role of the delegate to ensure that the signout allowed is
+    // properly updated after the profile is create is initialized.
+    // For testing profiles that do not have a delegate, the signout allowed
+    // must be initialized when the testing profile finishes its initialization.
+    signin_util::EnsureUserSignoutAllowedIsInitializedForProfile(this);
+  }
 }
 
 TestingProfile::~TestingProfile() {
diff --git a/chrome/test/data/pdf/annotations_feature_disabled_test.js b/chrome/test/data/pdf/annotations_feature_disabled_test.js
new file mode 100644
index 0000000..f96531f
--- /dev/null
+++ b/chrome/test/data/pdf/annotations_feature_disabled_test.js
@@ -0,0 +1,12 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+chrome.test.runTests([
+  function testAnnotationsDisabled() {
+    const toolbar = document.body.querySelector('#toolbar');
+    chrome.test.assertFalse(toolbar.pdfAnnotationsEnabled);
+    chrome.test.assertEq(null, toolbar.shadowRoot.querySelector('#annotate'));
+    chrome.test.succeed();
+  },
+]);
diff --git a/chrome/test/data/pdf/annotations_feature_enabled_test.js b/chrome/test/data/pdf/annotations_feature_enabled_test.js
new file mode 100644
index 0000000..72a3e99
--- /dev/null
+++ b/chrome/test/data/pdf/annotations_feature_enabled_test.js
@@ -0,0 +1,13 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+chrome.test.runTests([
+  function testAnnotationsEnabled() {
+    const toolbar = document.body.querySelector('#toolbar');
+    chrome.test.assertTrue(toolbar.pdfAnnotationsEnabled);
+    chrome.test.assertTrue(
+        toolbar.shadowRoot.querySelector('#annotate') != null);
+    chrome.test.succeed();
+  },
+]);
diff --git a/chrome/test/mini_installer/chrome_helper.py b/chrome/test/mini_installer/chrome_helper.py
index 1dcedba..fee75e3e 100644
--- a/chrome/test/mini_installer/chrome_helper.py
+++ b/chrome/test/mini_installer/chrome_helper.py
@@ -36,6 +36,43 @@
           path == process_path]
 
 
+def WaitForChromeExit():
+  """Waits for all chrome.exe processes to exit."""
+  def GetChromeProcesses():
+    """Returns a dict of all chrome.exe processes indexed by pid."""
+    chrome_processes = dict()
+    for process in psutil.process_iter():
+      try:
+        if process.name == 'chrome.exe':
+          chrome_processes[process.pid] = process
+      except psutil.Error:
+        pass
+    return chrome_processes
+
+  def GetBrowserProcess(chrome_processes):
+    """Returns a psutil.Process for the browser process in |chrome_processes|.
+    """
+    # Find the one whose parent isn't a chrome.exe process.
+    for process in chrome_processes.itervalues():
+      try:
+        if process.ppid not in chrome_processes:
+          return process
+      except psutil.Error:
+        pass
+    return None
+
+  chrome_processes = GetChromeProcesses()
+  while chrome_processes:
+    # Prefer waiting on the browser process.
+    process = GetBrowserProcess(chrome_processes)
+    if not process:
+      # Pick any process to wait on if no top-level parent was found.
+      process = next(chrome_processes.itervalues())
+    process.wait()
+    # Check for stragglers and keep waiting until all are gone.
+    chrome_processes = GetChromeProcesses()
+
+
 def GetWindowHandles(process_ids):
   """Returns a list of handles of windows owned by processes in |process_ids|.
 
diff --git a/chrome/test/mini_installer/test_chrome_with_chromedriver.py b/chrome/test/mini_installer/test_chrome_with_chromedriver.py
index 9fedefaa..0bf0df55 100644
--- a/chrome/test/mini_installer/test_chrome_with_chromedriver.py
+++ b/chrome/test/mini_installer/test_chrome_with_chromedriver.py
@@ -21,6 +21,8 @@
 import tempfile
 import time
 
+import chrome_helper
+
 THIS_DIR = os.path.dirname(os.path.abspath(__file__))
 SRC_DIR = os.path.join(THIS_DIR, '..', '..', '..')
 WEBDRIVER_PATH = os.path.join(
@@ -106,6 +108,7 @@
   finally:
     if driver:
       driver.quit()
+    chrome_helper.WaitForChromeExit()
     # To help with local crash analysis, change None to tempfile.gettempdir().
     # TODO(grt): Copy crash dumps into ${ISOLATED_OUTDIR}.
     CollectCrashReports(user_data_dir, None)
diff --git a/chromecast/app/cast_main_delegate.cc b/chromecast/app/cast_main_delegate.cc
index 2e2ffcd..fce86db 100644
--- a/chromecast/app/cast_main_delegate.cc
+++ b/chromecast/app/cast_main_delegate.cc
@@ -204,6 +204,14 @@
 void CastMainDelegate::PostEarlyInitialization(bool is_running_tests) {
   DCHECK(cast_feature_list_creator_);
 
+#if !defined(OS_ANDROID)
+  // PrefService requires home directory to be created before the pref
+  // store can be initialized properly.
+  base::FilePath home_dir;
+  CHECK(base::PathService::Get(DIR_CAST_HOME, &home_dir));
+  CHECK(base::CreateDirectory(home_dir));
+#endif  // !defined(OS_ANDROID)
+
   // The |FieldTrialList| is a dependency of the feature list.
   field_trial_list_ = std::make_unique<base::FieldTrialList>(nullptr);
 
diff --git a/chromecast/browser/android/BUILD.gn b/chromecast/browser/android/BUILD.gn
index cb471e6..77884cdc 100644
--- a/chromecast/browser/android/BUILD.gn
+++ b/chromecast/browser/android/BUILD.gn
@@ -119,6 +119,7 @@
     "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsService.java",
     "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsSurfaceHelper.java",
     "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsScopes.java",
+    "$java_src_dir/org/chromium/chromecast/shell/CastWebContentsView.java",
     "$java_src_dir/org/chromium/chromecast/shell/LogcatElision.java",
     "$java_src_dir/org/chromium/chromecast/shell/ElidedLogcatProvider.java",
   ]
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsScopes.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsScopes.java
index 39d319b..f84adc2e 100644
--- a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsScopes.java
+++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsScopes.java
@@ -7,7 +7,9 @@
 import android.app.Activity;
 import android.content.Context;
 import android.graphics.drawable.ColorDrawable;
+import android.os.IBinder;
 import android.support.annotation.ColorInt;
+import android.support.annotation.Nullable;
 import android.widget.FrameLayout;
 
 import org.chromium.chromecast.base.Observer;
@@ -19,6 +21,11 @@
 import org.chromium.ui.base.WindowAndroid;
 
 class CastWebContentsScopes {
+    interface WindowTokenProvider {
+        @Nullable
+        IBinder provideWindowToken();
+    }
+
     public static Observer<WebContents> onLayoutActivity(
             Activity activity, FrameLayout layout, @ColorInt int backgroundColor) {
         layout.setBackgroundColor(backgroundColor);
@@ -33,6 +40,18 @@
         return onLayoutInternal(activity, layout, window, backgroundColor);
     }
 
+    static Observer<WebContents> onLayoutView(Context context, FrameLayout layout,
+            @ColorInt int backgroundColor, WindowTokenProvider windowTokenProvider) {
+        layout.setBackgroundColor(backgroundColor);
+        WindowAndroid window = new WindowAndroid(context) {
+            @Override
+            protected IBinder getWindowToken() {
+                return windowTokenProvider.provideWindowToken();
+            }
+        };
+        return onLayoutInternal(context, layout, window, backgroundColor);
+    }
+
     private static Observer<WebContents> onLayoutInternal(Context context, FrameLayout layout,
             WindowAndroid window, @ColorInt int backgroundColor) {
         return (WebContents webContents) -> {
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsView.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsView.java
new file mode 100644
index 0000000..f09b25e
--- /dev/null
+++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsView.java
@@ -0,0 +1,92 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chromecast.shell;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.support.annotation.Nullable;
+import android.view.LayoutInflater;
+import android.widget.FrameLayout;
+
+import org.chromium.base.Log;
+import org.chromium.chromecast.base.CastSwitches;
+
+/**
+ * View for displaying a WebContents in CastShell.
+ *
+ * <p>Intended to be used with {@link android.app.Presentation}.
+ *
+ * <p>
+ * Typically, this class is controlled by CastContentWindowAndroid through
+ * CastWebContentsSurfaceHelper. If the CastContentWindowAndroid is destroyed,
+ * CastWebContentsView should be removed from the activity holding it.
+ * Similarily, if the view is removed from a activity or the activity holding
+ * it is destroyed, CastContentWindowAndroid should be notified by intent.
+ */
+public class CastWebContentsView extends FrameLayout {
+    private static final String TAG = "cr_CastWebContentV";
+
+    private CastWebContentsSurfaceHelper mSurfaceHelper;
+
+    public CastWebContentsView(Context context) {
+        super(context);
+        initView();
+    }
+
+    private void initView() {
+        addView(LayoutInflater.from(getContext())
+                        .inflate(R.layout.cast_web_contents_activity, null));
+    }
+
+    public void onStart(Bundle startArgumentsBundle) {
+        Log.d(TAG, "onStart");
+
+        if (mSurfaceHelper != null) {
+            return;
+        }
+
+        mSurfaceHelper = new CastWebContentsSurfaceHelper(
+                CastWebContentsScopes.onLayoutView(getContext(),
+                        findViewById(R.id.web_contents_container),
+                        CastSwitches.getSwitchValueColor(
+                                CastSwitches.CAST_APP_BACKGROUND_COLOR, Color.BLACK),
+                        this ::getHostWindowToken),
+                (Uri uri) -> sendIntentSync(CastWebContentsIntentUtils.onWebContentStopped(uri)));
+
+        CastWebContentsSurfaceHelper.StartParams params =
+                CastWebContentsSurfaceHelper.StartParams.fromBundle(startArgumentsBundle);
+        if (params == null) return;
+
+        mSurfaceHelper.onNewStartParams(params);
+    }
+
+    public void onResume() {
+        Log.d(TAG, "onResume");
+    }
+
+    public void onPause() {
+        Log.d(TAG, "onPause");
+    }
+
+    public void onStop() {
+        Log.d(TAG, "onStop");
+        if (mSurfaceHelper != null) {
+            mSurfaceHelper.onDestroy();
+        }
+    }
+
+    @Nullable
+    protected IBinder getHostWindowToken() {
+        return getWindowToken();
+    }
+
+    private void sendIntentSync(Intent in) {
+        CastWebContentsIntentUtils.getLocalBroadcastManager().sendBroadcastSync(in);
+    }
+}
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc
index e63cfb38..2eac6e8 100644
--- a/chromecast/browser/cast_browser_main_parts.cc
+++ b/chromecast/browser/cast_browser_main_parts.cc
@@ -421,11 +421,6 @@
   crash_reporter::ChildExitObserver::GetInstance()->RegisterClient(
       std::make_unique<crash_reporter::ChildProcessCrashObserver>(
           crash_dumps_dir, kAndroidMinidumpDescriptor));
-#else
-  base::FilePath home_dir;
-  CHECK(base::PathService::Get(DIR_CAST_HOME, &home_dir));
-  if (!base::CreateDirectory(home_dir))
-    return 1;
 #endif
 
   cast_browser_process_->SetPrefService(
diff --git a/chromeos/chromeos_switches.cc b/chromeos/chromeos_switches.cc
index 47b4d16..593dec5d 100644
--- a/chromeos/chromeos_switches.cc
+++ b/chromeos/chromeos_switches.cc
@@ -543,8 +543,9 @@
 
 // Indicates that a stub implementation of CrosSettings that stores settings in
 // memory without signing should be used, treating current user as the owner.
-// This also modifies OwnerSettingsServiceChromeOS::HandlesSetting such that no
-// settings are handled by OwnerSettingsServiceChromeOS.
+// The DeviceSettingsProvider class is replaced with StubCrosSettingsProvider
+// for reading the settings from memory, and OwnerSettingsServiceChromeOS is
+// replaced with FakeOwnerSettingsService for writing the settings to memory.
 // This option is for testing the chromeos build of chrome on the desktop only.
 const char kStubCrosSettings[] = "stub-cros-settings";
 
diff --git a/components/autofill/content/common/autofill_types.mojom b/components/autofill/content/common/autofill_types.mojom
index b9979cdf..8e62015 100644
--- a/components/autofill/content/common/autofill_types.mojom
+++ b/components/autofill/content/common/autofill_types.mojom
@@ -113,6 +113,8 @@
   string autocomplete_attribute;
   mojo_base.mojom.String16 placeholder;
   mojo_base.mojom.String16 css_classes;
+  mojo_base.mojom.String16 aria_label;
+  mojo_base.mojom.String16 aria_description;
   uint32 unique_renderer_id;
   uint32 properties_mask;
 
@@ -147,6 +149,7 @@
   bool is_form_tag;
   bool is_formless_checkout;
   uint32 unique_renderer_id;
+  SubmissionIndicatorEvent submission_event;
   array<FormFieldData> fields;
   array<uint32> username_predictions;
 };
diff --git a/components/autofill/content/common/autofill_types_struct_traits.cc b/components/autofill/content/common/autofill_types_struct_traits.cc
index ef578a9..5f762c7 100644
--- a/components/autofill/content/common/autofill_types_struct_traits.cc
+++ b/components/autofill/content/common/autofill_types_struct_traits.cc
@@ -553,6 +553,12 @@
   if (!data.ReadCssClasses(&out->css_classes))
     return false;
 
+  if (!data.ReadAriaLabel(&out->aria_label))
+    return false;
+
+  if (!data.ReadAriaDescription(&out->aria_description))
+    return false;
+
   if (!data.ReadSection(&out->section))
     return false;
 
@@ -612,6 +618,9 @@
   out->is_formless_checkout = data.is_formless_checkout();
   out->unique_renderer_id = data.unique_renderer_id();
 
+  if (!data.ReadSubmissionEvent(&out->submission_event))
+    return false;
+
   if (!data.ReadFields(&out->fields))
     return false;
 
diff --git a/components/autofill/content/common/autofill_types_struct_traits.h b/components/autofill/content/common/autofill_types_struct_traits.h
index a00a7e5..97c683e4 100644
--- a/components/autofill/content/common/autofill_types_struct_traits.h
+++ b/components/autofill/content/common/autofill_types_struct_traits.h
@@ -160,6 +160,15 @@
     return r.css_classes;
   }
 
+  static const base::string16& aria_label(const autofill::FormFieldData& r) {
+    return r.aria_label;
+  }
+
+  static const base::string16& aria_description(
+      const autofill::FormFieldData& r) {
+    return r.aria_description;
+  }
+
   static uint32_t unique_renderer_id(const autofill::FormFieldData& r) {
     return r.unique_renderer_id;
   }
@@ -270,6 +279,11 @@
     return r.unique_renderer_id;
   }
 
+  static autofill::SubmissionIndicatorEvent submission_event(
+      const autofill::FormData& r) {
+    return r.submission_event;
+  }
+
   static const std::vector<autofill::FormFieldData>& fields(
       const autofill::FormData& r) {
     return r.fields;
diff --git a/components/autofill/content/common/autofill_types_struct_traits_unittest.cc b/components/autofill/content/common/autofill_types_struct_traits_unittest.cc
index d750ab1..df9c815 100644
--- a/components/autofill/content/common/autofill_types_struct_traits_unittest.cc
+++ b/components/autofill/content/common/autofill_types_struct_traits_unittest.cc
@@ -342,6 +342,8 @@
   input.autocomplete_attribute = "on";
   input.placeholder = base::ASCIIToUTF16("placeholder");
   input.css_classes = base::ASCIIToUTF16("class1");
+  input.aria_label = base::ASCIIToUTF16("aria label");
+  input.aria_description = base::ASCIIToUTF16("aria description");
   input.max_length = 12345;
   input.is_autofilled = true;
   input.check_status = FormFieldData::CHECKED;
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc
index 1783554..ee74da2 100644
--- a/components/autofill/content/renderer/form_autofill_util.cc
+++ b/components/autofill/content/renderer/form_autofill_util.cc
@@ -1546,6 +1546,9 @@
         element.UniqueRendererFormControlId());
   }
 
+  field->aria_label = GetAriaLabel(element.GetDocument(), element);
+  field->aria_description = GetAriaDescription(element.GetDocument(), element);
+
   if (!IsAutofillableElement(element))
     return;
 
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc
index 8d6c793..9e2dc80 100644
--- a/components/autofill/content/renderer/password_autofill_agent.cc
+++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -1322,6 +1322,8 @@
     }
     submitted_form->submission_event =
         SubmissionIndicatorEvent::HTML_FORM_SUBMISSION;
+    submitted_form->form_data.submission_event =
+        SubmissionIndicatorEvent::HTML_FORM_SUBMISSION;
 
     if (FrameCanAccessPasswordManager()) {
       // Some observers depend on sending this information now instead of when
diff --git a/components/autofill/content/renderer/provisionally_saved_password_form.cc b/components/autofill/content/renderer/provisionally_saved_password_form.cc
index 7536e36..ef1c4ab 100644
--- a/components/autofill/content/renderer/provisionally_saved_password_form.cc
+++ b/components/autofill/content/renderer/provisionally_saved_password_form.cc
@@ -38,8 +38,10 @@
 
 void ProvisionallySavedPasswordForm::SetSubmissionIndicatorEvent(
     SubmissionIndicatorEvent event) {
-  if (password_form_)
+  if (password_form_) {
     password_form_->submission_event = event;
+    password_form_->form_data.submission_event = event;
+  }
 }
 
 }  // namespace autofill
diff --git a/components/autofill/core/common/form_data.cc b/components/autofill/core/common/form_data.cc
index 3b4d7d3..f0f11cf 100644
--- a/components/autofill/core/common/form_data.cc
+++ b/components/autofill/core/common/form_data.cc
@@ -79,7 +79,7 @@
       is_form_tag(data.is_form_tag),
       is_formless_checkout(data.is_formless_checkout),
       unique_renderer_id(data.unique_renderer_id),
-      submission_event(SubmissionIndicatorEvent::NONE),
+      submission_event(data.submission_event),
       fields(data.fields),
       username_predictions(data.username_predictions) {}
 
@@ -125,6 +125,7 @@
 bool FormData::operator==(const FormData& form) const {
   return name == form.name && origin == form.origin && action == form.action &&
          unique_renderer_id == form.unique_renderer_id &&
+         submission_event == form.submission_event &&
          is_form_tag == form.is_form_tag &&
          is_formless_checkout == form.is_formless_checkout &&
          fields == form.fields &&
diff --git a/components/autofill/core/common/form_data.h b/components/autofill/core/common/form_data.h
index f11fcc06..fc2afba 100644
--- a/components/autofill/core/common/form_data.h
+++ b/components/autofill/core/common/form_data.h
@@ -78,7 +78,7 @@
   // The type of the event that was taken as an indication that this form is
   // being or has already been submitted. This field is filled only in Password
   // Manager for submitted password forms.
-  SubmissionIndicatorEvent submission_event;
+  SubmissionIndicatorEvent submission_event = SubmissionIndicatorEvent::NONE;
   // A vector of all the input fields in the form.
   std::vector<FormFieldData> fields;
   // Contains unique renderer IDs of text elements which are predicted to be
diff --git a/components/autofill/ios/form_util/resources/fill.js b/components/autofill/ios/form_util/resources/fill.js
index 1ada7f7..267f2fc4 100644
--- a/components/autofill/ios/form_util/resources/fill.js
+++ b/components/autofill/ios/form_util/resources/fill.js
@@ -1925,6 +1925,9 @@
     field['role'] = __gCrWeb.fill.ROLE_ATTRIBUTE_PRESENTATION;
   }
 
+  field['aria_label'] = __gCrWeb.fill.getAriaLabel(element);
+  field['aria_description'] = __gCrWeb.fill.getAriaDescription(element);
+
   if (!__gCrWeb.fill.isAutofillableElement(element)) {
     return;
   }
diff --git a/components/autofill_assistant/browser/controller_unittest.cc b/components/autofill_assistant/browser/controller_unittest.cc
index c0b0f6a..ecffaed9 100644
--- a/components/autofill_assistant/browser/controller_unittest.cc
+++ b/components/autofill_assistant/browser/controller_unittest.cc
@@ -101,8 +101,8 @@
         .WillByDefault(RunOnceCallback<2>(true, ""));
 
     // Scripts run, but have no actions.
-    ON_CALL(*mock_service_, OnGetActions(_, _, _, _, _))
-        .WillByDefault(RunOnceCallback<4>(true, ""));
+    ON_CALL(*mock_service_, OnGetActions(_, _, _, _, _, _))
+        .WillByDefault(RunOnceCallback<5>(true, ""));
 
     // Make WebController::GetUrl accessible.
     ON_CALL(*mock_web_controller_, GetUrl()).WillByDefault(ReturnRef(url_));
@@ -213,8 +213,8 @@
       });
 
   // 5. script1 run successfully (no actions).
-  EXPECT_CALL(*mock_service_, OnGetActions(StrEq("script1"), _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, ""));
+  EXPECT_CALL(*mock_service_, OnGetActions(StrEq("script1"), _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, ""));
 
   // 6. As nothing is selected the flow terminates.
 
@@ -256,10 +256,10 @@
   actions_response.add_actions()->mutable_stop();
   std::string actions_response_str;
   actions_response.SerializeToString(&actions_response_str);
-  EXPECT_CALL(*mock_service_, OnGetActions(StrEq("stop"), _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, actions_response_str));
-  EXPECT_CALL(*mock_service_, OnGetNextActions(_, _, _))
-      .WillOnce(RunOnceCallback<2>(true, ""));
+  EXPECT_CALL(*mock_service_, OnGetActions(StrEq("stop"), _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, actions_response_str));
+  EXPECT_CALL(*mock_service_, OnGetNextActions(_, _, _, _))
+      .WillOnce(RunOnceCallback<3>(true, ""));
 
   EXPECT_CALL(*mock_ui_controller_, Shutdown());
   GetUiDelegate()->OnScriptSelected("stop");
@@ -288,12 +288,12 @@
     actions_response.add_actions()->mutable_reset();
     std::string actions_response_str;
     actions_response.SerializeToString(&actions_response_str);
-    EXPECT_CALL(*mock_service_, OnGetActions(StrEq("reset"), _, _, _, _))
-        .WillOnce(RunOnceCallback<4>(true, actions_response_str));
+    EXPECT_CALL(*mock_service_, OnGetActions(StrEq("reset"), _, _, _, _, _))
+        .WillOnce(RunOnceCallback<5>(true, actions_response_str));
 
     // 3. Report the result of running that action.
-    EXPECT_CALL(*mock_service_, OnGetNextActions(_, _, _))
-        .WillOnce(RunOnceCallback<2>(true, ""));
+    EXPECT_CALL(*mock_service_, OnGetNextActions(_, _, _, _))
+        .WillOnce(RunOnceCallback<3>(true, ""));
 
     // 4. The reset action forces a reload of the scripts, even though the URL
     // hasn't changed. The "reset" script is reported again to UpdateScripts.
@@ -346,8 +346,8 @@
   AddRunnableScript(&script_response, "alsorunnable");
   SetNextScriptResponse(script_response);
 
-  EXPECT_CALL(*mock_service_, OnGetActions(StrEq("autostart"), _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, ""));
+  EXPECT_CALL(*mock_service_, OnGetActions(StrEq("autostart"), _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, ""));
 
   SimulateNavigateToUrl(GURL("http://a.example.com/path"));
 }
@@ -371,8 +371,8 @@
   SetNextScriptResponse(script_response);
 
   EXPECT_CALL(*mock_service_,
-              OnGetActions(StrEq("autostart interrupt 1"), _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(false, ""));
+              OnGetActions(StrEq("autostart interrupt 1"), _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(false, ""));
   // The script fails, ending the flow. What matters is that the correct
   // expectation is met.
 
@@ -397,8 +397,9 @@
   {
     testing::InSequence seq;
     EXPECT_CALL(*mock_service_,
-                OnGetActions(StrEq("autostart interrupt"), _, _, _, _));
-    EXPECT_CALL(*mock_service_, OnGetActions(StrEq("autostart"), _, _, _, _));
+                OnGetActions(StrEq("autostart interrupt"), _, _, _, _, _));
+    EXPECT_CALL(*mock_service_,
+                OnGetActions(StrEq("autostart"), _, _, _, _, _));
   }
 
   SimulateNavigateToUrl(GURL("http://a.example.com/path"));
diff --git a/components/autofill_assistant/browser/mock_run_once_callback.h b/components/autofill_assistant/browser/mock_run_once_callback.h
index f5f9540..4f75fe3 100644
--- a/components/autofill_assistant/browser/mock_run_once_callback.h
+++ b/components/autofill_assistant/browser/mock_run_once_callback.h
@@ -61,6 +61,12 @@
   return std::move(std::get<k>(args)).Run(p0, p1, p2, p3, p4);
 }
 
+ACTION_TEMPLATE(RunOnceCallback,
+                HAS_1_TEMPLATE_PARAMS(int, k),
+                AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) {
+  return std::move(std::get<k>(args)).Run(p0, p1, p2, p3, p4, p5);
+}
+
 // Template for capturing a base::OnceCallback passed to a mocked method
 //
 // This is useful to run the callback later on, at an appropriate time.
diff --git a/components/autofill_assistant/browser/mock_service.h b/components/autofill_assistant/browser/mock_service.h
index 02ae803..307df246 100644
--- a/components/autofill_assistant/browser/mock_service.h
+++ b/components/autofill_assistant/browser/mock_service.h
@@ -34,25 +34,31 @@
   void GetActions(const std::string& script_path,
                   const GURL& url,
                   const std::map<std::string, std::string>& parameters,
-                  const std::string& server_payload,
+                  const std::string& global_payload,
+                  const std::string& script_payload,
                   ResponseCallback callback) override {
-    OnGetActions(script_path, url, parameters, server_payload, callback);
+    OnGetActions(script_path, url, parameters, global_payload, script_payload,
+                 callback);
   }
-  MOCK_METHOD5(OnGetActions,
+  MOCK_METHOD6(OnGetActions,
                void(const std::string& script_path,
                     const GURL& url,
                     const std::map<std::string, std::string>& parameters,
-                    const std::string& server_payload,
+                    const std::string& global_payload,
+                    const std::string& script_payload,
                     ResponseCallback& callback));
 
   void GetNextActions(
-      const std::string& previous_server_payload,
+      const std::string& previous_global_payload,
+      const std::string& previous_script_payload,
       const std::vector<ProcessedActionProto>& processed_actions,
       ResponseCallback callback) override {
-    OnGetNextActions(previous_server_payload, processed_actions, callback);
+    OnGetNextActions(previous_global_payload, previous_script_payload,
+                     processed_actions, callback);
   }
-  MOCK_METHOD3(OnGetNextActions,
-               void(const std::string& previous_server_payload,
+  MOCK_METHOD4(OnGetNextActions,
+               void(const std::string& previous_global_payload,
+                    const std::string& previous_script_payload,
                     const std::vector<ProcessedActionProto>& processed_actions,
                     ResponseCallback& callback));
 };
diff --git a/components/autofill_assistant/browser/protocol_utils.cc b/components/autofill_assistant/browser/protocol_utils.cc
index 1b9439d9..d861f3b 100644
--- a/components/autofill_assistant/browser/protocol_utils.cc
+++ b/components/autofill_assistant/browser/protocol_utils.cc
@@ -109,7 +109,8 @@
     const std::string& script_path,
     const GURL& url,
     const std::map<std::string, std::string>& parameters,
-    const std::string& server_payload,
+    const std::string& global_payload,
+    const std::string& script_payload,
     const ClientContextProto& client_context) {
   ScriptActionRequestProto request_proto;
   InitialScriptActionsRequestProto* initial_request_proto =
@@ -123,8 +124,11 @@
       parameters, initial_request_proto->mutable_script_parameters());
   request_proto.mutable_client_context()->CopyFrom(client_context);
 
-  if (!server_payload.empty()) {
-    request_proto.set_server_payload(server_payload);
+  if (!global_payload.empty()) {
+    request_proto.set_global_payload(global_payload);
+  }
+  if (!script_payload.empty()) {
+    request_proto.set_script_payload(script_payload);
   }
 
   std::string serialized_initial_request_proto;
@@ -136,11 +140,13 @@
 
 // static
 std::string ProtocolUtils::CreateNextScriptActionsRequest(
-    const std::string& previous_server_payload,
+    const std::string& global_payload,
+    const std::string& script_payload,
     const std::vector<ProcessedActionProto>& processed_actions,
     const ClientContextProto& client_context) {
   ScriptActionRequestProto request_proto;
-  request_proto.set_server_payload(previous_server_payload);
+  request_proto.set_global_payload(global_payload);
+  request_proto.set_script_payload(script_payload);
   NextScriptActionsRequestProto* next_request =
       request_proto.mutable_next_request();
   for (const auto& processed_action : processed_actions) {
@@ -156,7 +162,8 @@
 // static
 bool ProtocolUtils::ParseActions(
     const std::string& response,
-    std::string* return_server_payload,
+    std::string* return_global_payload,
+    std::string* return_script_payload,
     std::vector<std::unique_ptr<Action>>* actions) {
   DCHECK(actions);
 
@@ -166,8 +173,11 @@
     return false;
   }
 
-  if (return_server_payload && response_proto.has_server_payload()) {
-    *return_server_payload = response_proto.server_payload();
+  if (return_global_payload) {
+    *return_global_payload = response_proto.global_payload();
+  }
+  if (return_script_payload) {
+    *return_script_payload = response_proto.script_payload();
   }
 
   for (const auto& action : response_proto.actions()) {
diff --git a/components/autofill_assistant/browser/protocol_utils.h b/components/autofill_assistant/browser/protocol_utils.h
index f0212d3..1d58b2a 100644
--- a/components/autofill_assistant/browser/protocol_utils.h
+++ b/components/autofill_assistant/browser/protocol_utils.h
@@ -41,26 +41,33 @@
                            std::vector<std::unique_ptr<Script>>* scripts);
 
   // Create initial request to get script actions for the given |script_path|.
+  //
+  // TODO(b/806868): Remove the script payload from initial requests once the
+  // server has transitioned to global payloads.
   static std::string CreateInitialScriptActionsRequest(
       const std::string& script_path,
       const GURL& url,
       const std::map<std::string, std::string>& parameters,
-      const std::string& server_payload,
+      const std::string& global_payload,
+      const std::string& script_payload,
       const ClientContextProto& client_context);
 
   // Create request to get next sequence of actions for a script.
   static std::string CreateNextScriptActionsRequest(
-      const std::string& previous_server_payload,
+      const std::string& global_payload,
+      const std::string& script_payload,
       const std::vector<ProcessedActionProto>& processed_actions,
       const ClientContextProto& client_context);
 
   // Parse actions from the given |response|, which can be an empty string.
   //
-  // Pass in nullptr for |return_server_payload| to indicate no need to return
-  // server payload. Parsed actions are returned through |actions|, which should
-  // not be nullptr. Return false if parse failed, otherwise return true.
+  // Pass in nullptr for |return_global_payload| or |return_script_payload| to
+  // indicate no need to return that payload. Parsed actions are returned
+  // through |actions|, which should not be nullptr. Return false if parse
+  // failed, otherwise return true.
   static bool ParseActions(const std::string& response,
-                           std::string* return_server_payload,
+                           std::string* return_global_payload,
+                           std::string* return_script_payload,
                            std::vector<std::unique_ptr<Action>>* actions);
 
  private:
diff --git a/components/autofill_assistant/browser/protocol_utils_unittest.cc b/components/autofill_assistant/browser/protocol_utils_unittest.cc
index 93a6f0d..37a39bf 100644
--- a/components/autofill_assistant/browser/protocol_utils_unittest.cc
+++ b/components/autofill_assistant/browser/protocol_utils_unittest.cc
@@ -107,7 +107,7 @@
   EXPECT_TRUE(
       request.ParseFromString(ProtocolUtils::CreateInitialScriptActionsRequest(
           "script_path", GURL("http://example.com/"), parameters,
-          "server_payload", CreateClientContextProto())));
+          "global_payload", "script_payload", CreateClientContextProto())));
 
   AssertClientContext(request.client_context());
 
@@ -119,7 +119,8 @@
   EXPECT_EQ("b", initial.script_parameters(0).value());
   EXPECT_EQ("c", initial.script_parameters(1).name());
   EXPECT_EQ("d", initial.script_parameters(1).value());
-  EXPECT_EQ("server_payload", request.server_payload());
+  EXPECT_EQ("global_payload", request.global_payload());
+  EXPECT_EQ("script_payload", request.script_payload());
 }
 
 TEST(ProtocolUtilsTest, CreateGetScriptsRequest) {
diff --git a/components/autofill_assistant/browser/script_executor.cc b/components/autofill_assistant/browser/script_executor.cc
index 8e77646..5a122ee 100644
--- a/components/autofill_assistant/browser/script_executor.cc
+++ b/components/autofill_assistant/browser/script_executor.cc
@@ -33,14 +33,16 @@
 
 ScriptExecutor::ScriptExecutor(
     const std::string& script_path,
-    const std::string& server_payload,
+    const std::string& global_payload,
+    const std::string& script_payload,
     ScriptExecutor::Listener* listener,
     std::map<std::string, ScriptStatusProto>* scripts_state,
     const std::vector<Script*>* ordered_interrupts,
     ScriptExecutorDelegate* delegate)
     : script_path_(script_path),
-      initial_server_payload_(server_payload),
-      last_server_payload_(server_payload),
+      last_global_payload_(global_payload),
+      initial_script_payload_(script_payload),
+      last_script_payload_(script_payload),
       listener_(listener),
       delegate_(delegate),
       at_end_(CONTINUE),
@@ -67,7 +69,7 @@
 
   delegate_->GetService()->GetActions(
       script_path_, delegate_->GetWebController()->GetUrl(),
-      delegate_->GetParameters(), last_server_payload_,
+      delegate_->GetParameters(), last_global_payload_, last_script_payload_,
       base::BindOnce(&ScriptExecutor::OnGetActions,
                      weak_ptr_factory_.GetWeakPtr()));
 }
@@ -310,15 +312,13 @@
   processed_actions_.clear();
   actions_.clear();
 
-  bool parse_result =
-      ProtocolUtils::ParseActions(response, &last_server_payload_, &actions_);
-  if (listener_) {
-    listener_->OnServerPayloadChanged(last_server_payload_);
-  }
+  bool parse_result = ProtocolUtils::ParseActions(
+      response, &last_global_payload_, &last_script_payload_, &actions_);
   if (!parse_result) {
     RunCallback(false);
     return;
   }
+  ReportPayloadsToListener();
 
   if (actions_.empty()) {
     // Finished executing the script if there are no more actions.
@@ -329,6 +329,13 @@
   ProcessNextAction();
 }
 
+void ScriptExecutor::ReportPayloadsToListener() {
+  if (!listener_)
+    return;
+
+  listener_->OnServerPayloadChanged(last_global_payload_, last_script_payload_);
+}
+
 void ScriptExecutor::RunCallback(bool success) {
   DCHECK(callback_);
   if (should_clean_contextual_ui_on_finish_ || !success) {
@@ -382,7 +389,7 @@
 
 void ScriptExecutor::GetNextActions() {
   delegate_->GetService()->GetNextActions(
-      last_server_payload_, processed_actions_,
+      last_global_payload_, last_script_payload_, processed_actions_,
       base::BindOnce(&ScriptExecutor::OnGetActions,
                      weak_ptr_factory_.GetWeakPtr()));
 }
@@ -447,7 +454,7 @@
 }
 
 ScriptExecutor::WaitWithInterrupts::WaitWithInterrupts(
-    const ScriptExecutor* main_script,
+    ScriptExecutor* main_script,
     base::TimeDelta max_wait_time,
     ElementCheckType check_type,
     const Selector& selector,
@@ -491,6 +498,14 @@
   // to this.
 }
 
+void ScriptExecutor::WaitWithInterrupts::OnServerPayloadChanged(
+    const std::string& global_payload,
+    const std::string& script_payload) {
+  // Interrupts and main scripts share global payloads, but not script payloads.
+  main_script_->last_global_payload_ = global_payload;
+  main_script_->ReportPayloadsToListener();
+}
+
 void ScriptExecutor::WaitWithInterrupts::OnPreconditionCheckDone(
     const Script* interrupt,
     bool precondition_match) {
@@ -531,8 +546,9 @@
   batch_element_checker_.reset();
   SavePreInterruptState();
   interrupt_executor_ = std::make_unique<ScriptExecutor>(
-      interrupt->handle.path, main_script_->initial_server_payload_,
-      /* listener= */ nullptr, main_script_->scripts_state_, &no_interrupts_,
+      interrupt->handle.path, main_script_->last_global_payload_,
+      main_script_->initial_script_payload_,
+      /* listener= */ this, main_script_->scripts_state_, &no_interrupts_,
       main_script_->delegate_);
   interrupt_executor_->Run(
       base::BindOnce(&ScriptExecutor::WaitWithInterrupts::OnInterruptDone,
@@ -548,8 +564,6 @@
     return;
   }
   RestorePreInterruptUiState();
-  // TODO(crbug.com/806868): Forward global state change from the server_payload
-  // of a successfully run interrupt to the main script.
 
   // Restart. We use the original wait time since the interruption could have
   // triggered any kind of actions, including actions that wait on the user. We
diff --git a/components/autofill_assistant/browser/script_executor.h b/components/autofill_assistant/browser/script_executor.h
index b94e842..9ad36f0 100644
--- a/components/autofill_assistant/browser/script_executor.h
+++ b/components/autofill_assistant/browser/script_executor.h
@@ -25,20 +25,25 @@
 class ScriptExecutor : public ActionDelegate {
  public:
   // Listens to events on ScriptExecutor.
-  // TODO(b/806868): Make server_payload a part of callback instead of the
+  // TODO(b/806868): Make global_payload a part of callback instead of the
   // listener.
   class Listener {
    public:
     virtual ~Listener() = default;
 
-    // Called when new server_payload is available.
-    virtual void OnServerPayloadChanged(const std::string& server_payload) = 0;
+    // Called when new server payloads are available.
+    //
+    // TODO(b/806868): Stop reporting the script payload once the server has
+    // transitioned to global payloads.
+    virtual void OnServerPayloadChanged(const std::string& global_payload,
+                                        const std::string& script_payload) = 0;
   };
 
   // |delegate|, |listener|, |script_state| and |ordered_interrupts| should
   // outlive this object and should not be nullptr.
   ScriptExecutor(const std::string& script_path,
-                 const std::string& server_payload,
+                 const std::string& global_payload,
+                 const std::string& script_payload,
                  ScriptExecutor::Listener* listener,
                  std::map<std::string, ScriptStatusProto>* scripts_state,
                  const std::vector<Script*>* ordered_interrupts,
@@ -150,7 +155,7 @@
  private:
   // Helper for WaitForElementVisible that keeps track of the state required to
   // run interrupts while waiting for a specific element.
-  class WaitWithInterrupts {
+  class WaitWithInterrupts : public ScriptExecutor::Listener {
    public:
     // Let the caller know about either the result of looking for the element or
     // of an abnormal result from an interrupt.
@@ -161,17 +166,21 @@
         base::OnceCallback<void(bool, const ScriptExecutor::Result*)>;
 
     // |main_script_| must not be null and outlive this instance.
-    WaitWithInterrupts(const ScriptExecutor* main_script,
+    WaitWithInterrupts(ScriptExecutor* main_script,
                        base::TimeDelta max_wait_time,
                        ElementCheckType check_type,
                        const Selector& selectors,
                        WaitWithInterrupts::Callback callback);
-    ~WaitWithInterrupts();
+    ~WaitWithInterrupts() override;
 
     void Run();
     void Shutdown();
 
    private:
+    // Implements ScriptExecutor::Listener
+    void OnServerPayloadChanged(const std::string& global_payload,
+                                const std::string& script_payload) override;
+
     void OnPreconditionCheckDone(const Script* interrupt,
                                  bool precondition_match);
     void OnElementCheckDone(bool found);
@@ -191,7 +200,7 @@
     // the original area.
     void RestorePreInterruptScroll(bool element_found);
 
-    const ScriptExecutor* main_script_;
+    ScriptExecutor* main_script_;
     const base::TimeDelta max_wait_time_;
     const ElementCheckType check_type_;
     const Selector selector_;
@@ -220,6 +229,7 @@
   friend class WaitWithInterrupts;
 
   void OnGetActions(bool result, const std::string& response);
+  void ReportPayloadsToListener();
   void RunCallback(bool success);
   void RunCallbackWithResult(const Result& result);
   void ProcessNextAction();
@@ -239,8 +249,9 @@
                 const std::string& chosen);
 
   std::string script_path_;
-  const std::string initial_server_payload_;
-  std::string last_server_payload_;
+  std::string last_global_payload_;
+  const std::string initial_script_payload_;
+  std::string last_script_payload_;
   ScriptExecutor::Listener* const listener_;
   ScriptExecutorDelegate* delegate_;
   RunScriptCallback callback_;
diff --git a/components/autofill_assistant/browser/script_executor_unittest.cc b/components/autofill_assistant/browser/script_executor_unittest.cc
index 4ee00566..52d1bbc 100644
--- a/components/autofill_assistant/browser/script_executor_unittest.cc
+++ b/components/autofill_assistant/browser/script_executor_unittest.cc
@@ -47,7 +47,8 @@
   void SetUp() override {
     executor_ = std::make_unique<ScriptExecutor>(
         kScriptPath,
-        /* server_payload= */ "initial payload",
+        /* global_payload= */ "initial global payload",
+        /* script_payload= */ "initial payload",
         /* listener= */ this, &scripts_state_, &ordered_interrupts_,
         /* delegate= */ this);
     url_ = GURL("http://example.com/");
@@ -98,8 +99,10 @@
   content::WebContents* GetWebContents() override { return nullptr; }
 
   // Implements ScriptExecutor::Listener
-  void OnServerPayloadChanged(const std::string& server_payload) override {
-    last_server_payload_ = server_payload;
+  void OnServerPayloadChanged(const std::string& global_payload,
+                              const std::string& script_payload) override {
+    last_global_payload_ = global_payload;
+    last_script_payload_ = script_payload;
   }
 
   std::string Serialize(const google::protobuf::MessageLite& message) {
@@ -113,13 +116,14 @@
   void SetupInterruptibleScript(const std::string& path,
                                 const std::string& element) {
     ActionsResponseProto interruptible;
-    interruptible.set_server_payload("main script payload");
+    interruptible.set_global_payload("main script global payload");
+    interruptible.set_script_payload("main script payload");
     auto* wait_action = interruptible.add_actions()->mutable_wait_for_dom();
     wait_action->add_selectors(element);
     wait_action->set_allow_interrupt(true);
     interruptible.add_actions()->mutable_tell()->set_message(path);
-    EXPECT_CALL(mock_service_, OnGetActions(StrEq(path), _, _, _, _))
-        .WillOnce(RunOnceCallback<4>(true, Serialize(interruptible)));
+    EXPECT_CALL(mock_service_, OnGetActions(StrEq(path), _, _, _, _, _))
+        .WillOnce(RunOnceCallback<5>(true, Serialize(interruptible)));
   }
 
   // Creates an interrupt that contains a tell. It will always succeed.
@@ -127,10 +131,12 @@
     RegisterInterrupt(path, trigger);
 
     ActionsResponseProto interrupt_actions;
-    interrupt_actions.set_server_payload(base::StrCat({"payload for ", path}));
+    interrupt_actions.set_global_payload(
+        base::StrCat({"global payload for ", path}));
+    interrupt_actions.set_script_payload(base::StrCat({"payload for ", path}));
     interrupt_actions.add_actions()->mutable_tell()->set_message(path);
-    EXPECT_CALL(mock_service_, OnGetActions(StrEq(path), _, _, _, _))
-        .WillRepeatedly(RunOnceCallback<4>(true, Serialize(interrupt_actions)));
+    EXPECT_CALL(mock_service_, OnGetActions(StrEq(path), _, _, _, _, _))
+        .WillRepeatedly(RunOnceCallback<5>(true, Serialize(interrupt_actions)));
   }
 
   // Registers an interrupt, but do not define actions for it.
@@ -162,7 +168,8 @@
   // An owner for the pointers in |ordered_interrupts_|
   std::vector<std::unique_ptr<Script>> interrupts_;
   std::vector<Script*> ordered_interrupts_;
-  std::string last_server_payload_;
+  std::string last_global_payload_;
+  std::string last_script_payload_;
   std::unique_ptr<ScriptExecutor> executor_;
   std::map<std::string, std::string> parameters_;
   StrictMock<base::MockCallback<ScriptExecutor::RunScriptCallback>>
@@ -172,8 +179,8 @@
 };
 
 TEST_F(ScriptExecutorTest, GetActionsFails) {
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(false, ""));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(false, ""));
   EXPECT_CALL(executor_callback_,
               Run(AllOf(Field(&ScriptExecutor::Result::success, false),
                         Field(&ScriptExecutor::Result::at_end,
@@ -188,8 +195,8 @@
               OnGetActions(StrEq(kScriptPath), _,
                            AllOf(Contains(Pair("param1", "value1")),
                                  Contains(Pair("param2", "value2"))),
-                           _, _))
-      .WillOnce(RunOnceCallback<4>(true, ""));
+                           _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, ""));
 
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, true)));
@@ -198,19 +205,18 @@
 
 TEST_F(ScriptExecutorTest, RunOneActionReportAndReturn) {
   ActionsResponseProto actions_response;
-  actions_response.set_server_payload("payload");
   actions_response.add_actions()
       ->mutable_click()
       ->mutable_element_to_click()
       ->add_selectors("will fail");
 
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(actions_response)));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(actions_response)));
 
   std::vector<ProcessedActionProto> processed_actions_capture;
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillOnce(DoAll(SaveArg<1>(&processed_actions_capture),
-                      RunOnceCallback<2>(true, "")));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillOnce(DoAll(SaveArg<2>(&processed_actions_capture),
+                      RunOnceCallback<3>(true, "")));
   EXPECT_CALL(executor_callback_,
               Run(AllOf(Field(&ScriptExecutor::Result::success, true),
                         Field(&ScriptExecutor::Result::at_end,
@@ -223,23 +229,21 @@
 
 TEST_F(ScriptExecutorTest, RunMultipleActions) {
   ActionsResponseProto initial_actions_response;
-  initial_actions_response.set_server_payload("payload1");
   initial_actions_response.add_actions()->mutable_tell()->set_message("1");
   initial_actions_response.add_actions()->mutable_tell()->set_message("2");
-  EXPECT_CALL(mock_service_, OnGetActions(StrEq(kScriptPath), _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(initial_actions_response)));
+  EXPECT_CALL(mock_service_, OnGetActions(StrEq(kScriptPath), _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(initial_actions_response)));
 
   ActionsResponseProto next_actions_response;
-  next_actions_response.set_server_payload("payload2");
   next_actions_response.add_actions()->mutable_tell()->set_message("3");
   std::vector<ProcessedActionProto> processed_actions1_capture;
   std::vector<ProcessedActionProto> processed_actions2_capture;
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
       .WillOnce(
-          DoAll(SaveArg<1>(&processed_actions1_capture),
-                RunOnceCallback<2>(true, Serialize(next_actions_response))))
-      .WillOnce(DoAll(SaveArg<1>(&processed_actions2_capture),
-                      RunOnceCallback<2>(true, "")));
+          DoAll(SaveArg<2>(&processed_actions1_capture),
+                RunOnceCallback<3>(true, Serialize(next_actions_response))))
+      .WillOnce(DoAll(SaveArg<2>(&processed_actions2_capture),
+                      RunOnceCallback<3>(true, "")));
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, true)));
   executor_->Run(executor_callback_.Get());
@@ -250,16 +254,15 @@
 
 TEST_F(ScriptExecutorTest, UnsupportedAction) {
   ActionsResponseProto actions_response;
-  actions_response.set_server_payload("payload");
   actions_response.add_actions();  // action definition missing
 
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(actions_response)));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(actions_response)));
 
   std::vector<ProcessedActionProto> processed_actions_capture;
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillOnce(DoAll(SaveArg<1>(&processed_actions_capture),
-                      RunOnceCallback<2>(true, "")));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillOnce(DoAll(SaveArg<2>(&processed_actions_capture),
+                      RunOnceCallback<3>(true, "")));
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, true)));
   executor_->Run(executor_callback_.Get());
@@ -270,14 +273,13 @@
 
 TEST_F(ScriptExecutorTest, StopAfterEnd) {
   ActionsResponseProto actions_response;
-  actions_response.set_server_payload("payload");
   actions_response.add_actions()->mutable_stop();
 
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(actions_response)));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(actions_response)));
 
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillOnce(RunOnceCallback<2>(true, ""));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillOnce(RunOnceCallback<3>(true, ""));
   EXPECT_CALL(executor_callback_,
               Run(AllOf(Field(&ScriptExecutor::Result::success, true),
                         Field(&ScriptExecutor::Result::at_end,
@@ -287,14 +289,13 @@
 
 TEST_F(ScriptExecutorTest, ResetAfterEnd) {
   ActionsResponseProto actions_response;
-  actions_response.set_server_payload("payload");
   actions_response.add_actions()->mutable_reset();
 
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(actions_response)));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(actions_response)));
 
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillOnce(RunOnceCallback<2>(true, ""));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillOnce(RunOnceCallback<3>(true, ""));
   EXPECT_CALL(executor_callback_,
               Run(AllOf(Field(&ScriptExecutor::Result::success, true),
                         Field(&ScriptExecutor::Result::at_end,
@@ -304,7 +305,6 @@
 
 TEST_F(ScriptExecutorTest, InterruptActionListOnError) {
   ActionsResponseProto initial_actions_response;
-  initial_actions_response.set_server_payload("payload");
   initial_actions_response.add_actions()->mutable_tell()->set_message(
       "will pass");
   initial_actions_response.add_actions()
@@ -314,21 +314,20 @@
   initial_actions_response.add_actions()->mutable_tell()->set_message(
       "never run");
 
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(initial_actions_response)));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(initial_actions_response)));
 
   ActionsResponseProto next_actions_response;
-  next_actions_response.set_server_payload("payload2");
   next_actions_response.add_actions()->mutable_tell()->set_message(
       "will run after error");
   std::vector<ProcessedActionProto> processed_actions1_capture;
   std::vector<ProcessedActionProto> processed_actions2_capture;
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
       .WillOnce(
-          DoAll(SaveArg<1>(&processed_actions1_capture),
-                RunOnceCallback<2>(true, Serialize(next_actions_response))))
-      .WillOnce(DoAll(SaveArg<1>(&processed_actions2_capture),
-                      RunOnceCallback<2>(true, "")));
+          DoAll(SaveArg<2>(&processed_actions1_capture),
+                RunOnceCallback<3>(true, Serialize(next_actions_response))))
+      .WillOnce(DoAll(SaveArg<2>(&processed_actions2_capture),
+                      RunOnceCallback<3>(true, "")));
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, true)));
   executor_->Run(executor_callback_.Get());
@@ -346,18 +345,17 @@
 
 TEST_F(ScriptExecutorTest, RunDelayedAction) {
   ActionsResponseProto actions_response;
-  actions_response.set_server_payload("payload");
   ActionProto* action = actions_response.add_actions();
   action->mutable_tell()->set_message("delayed");
   action->set_action_delay_ms(1000);
 
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(actions_response)));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(actions_response)));
 
   std::vector<ProcessedActionProto> processed_actions_capture;
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillOnce(DoAll(SaveArg<1>(&processed_actions_capture),
-                      RunOnceCallback<2>(true, "")));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillOnce(DoAll(SaveArg<2>(&processed_actions_capture),
+                      RunOnceCallback<3>(true, "")));
 
   // executor_callback_.Run() not expected to be run just yet, as the action is
   // delayed.
@@ -374,17 +372,16 @@
 
 TEST_F(ScriptExecutorTest, HideDetailsWhenFinished) {
   ActionsResponseProto actions_response;
-  actions_response.set_server_payload("payload");
   ActionProto click_with_clean_contextual_ui;
   click_with_clean_contextual_ui.set_clean_contextual_ui(true);
   click_with_clean_contextual_ui.mutable_tell()->set_message("clean");
 
   *actions_response.add_actions() = click_with_clean_contextual_ui;
 
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(actions_response)));
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillOnce(RunOnceCallback<2>(true, ""));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(actions_response)));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillOnce(RunOnceCallback<3>(true, ""));
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, true)));
   EXPECT_CALL(mock_ui_controller_, HideDetails());
@@ -393,17 +390,16 @@
 
 TEST_F(ScriptExecutorTest, DontHideDetailsIfOtherActionsAreLeft) {
   ActionsResponseProto actions_response;
-  actions_response.set_server_payload("payload");
   ActionProto click_with_clean_contextual_ui;
   click_with_clean_contextual_ui.set_clean_contextual_ui(true);
   click_with_clean_contextual_ui.mutable_tell()->set_message("clean");
   *actions_response.add_actions() = click_with_clean_contextual_ui;
   actions_response.add_actions()->mutable_tell()->set_message("Wait no!");
 
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(actions_response)));
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillOnce(RunOnceCallback<2>(true, ""));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(actions_response)));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillOnce(RunOnceCallback<3>(true, ""));
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, true)));
 
@@ -414,12 +410,11 @@
 
 TEST_F(ScriptExecutorTest, HideDetailsOnError) {
   ActionsResponseProto actions_response;
-  actions_response.set_server_payload("payload");
   actions_response.add_actions()->mutable_tell()->set_message("Hello");
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(actions_response)));
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillOnce(RunOnceCallback<2>(false, ""));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(actions_response)));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillOnce(RunOnceCallback<3>(false, ""));
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, false)));
 
@@ -431,7 +426,7 @@
 TEST_F(ScriptExecutorTest, UpdateScriptStateWhileRunning) {
   // OnGetNextActions never calls the callback, so Run() returns immediately
   // without doing anything.
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _));
 
   EXPECT_THAT(scripts_state_, IsEmpty());
   executor_->Run(executor_callback_.Get());
@@ -440,8 +435,8 @@
 }
 
 TEST_F(ScriptExecutorTest, UpdateScriptStateOnError) {
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(false, ""));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(false, ""));
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, false)));
   executor_->Run(executor_callback_.Get());
@@ -452,12 +447,11 @@
 
 TEST_F(ScriptExecutorTest, UpdateScriptStateOnSuccess) {
   ActionsResponseProto initial_actions_response;
-  initial_actions_response.set_server_payload("payload1");
   initial_actions_response.add_actions()->mutable_tell()->set_message("ok");
-  EXPECT_CALL(mock_service_, OnGetActions(StrEq(kScriptPath), _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(initial_actions_response)));
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillOnce(RunOnceCallback<2>(true, ""));
+  EXPECT_CALL(mock_service_, OnGetActions(StrEq(kScriptPath), _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(initial_actions_response)));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillOnce(RunOnceCallback<3>(true, ""));
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, true)));
   executor_->Run(executor_callback_.Get());
@@ -468,38 +462,47 @@
 
 TEST_F(ScriptExecutorTest, ForwardLastPayloadOnSuccess) {
   ActionsResponseProto actions_response;
-  actions_response.set_server_payload("actions payload");
+  actions_response.set_global_payload("actions global payload");
+  actions_response.set_script_payload("actions payload");
   actions_response.add_actions()->mutable_tell()->set_message("ok");
 
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, "initial payload", _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(actions_response)));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, "initial global payload",
+                                          "initial payload", _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(actions_response)));
 
   ActionsResponseProto next_actions_response;
-  next_actions_response.set_server_payload("last payload");
-  EXPECT_CALL(mock_service_, OnGetNextActions("actions payload", _, _))
-      .WillOnce(RunOnceCallback<2>(true, Serialize(next_actions_response)));
+  next_actions_response.set_global_payload("last global payload");
+  next_actions_response.set_script_payload("last payload");
+  EXPECT_CALL(mock_service_, OnGetNextActions("actions global payload",
+                                              "actions payload", _, _))
+      .WillOnce(RunOnceCallback<3>(true, Serialize(next_actions_response)));
 
   EXPECT_CALL(executor_callback_, Run(_));
   executor_->Run(executor_callback_.Get());
 
-  EXPECT_EQ("last payload", last_server_payload_);
+  EXPECT_EQ("last global payload", last_global_payload_);
+  EXPECT_EQ("last payload", last_script_payload_);
 }
 
 TEST_F(ScriptExecutorTest, ForwardLastPayloadOnError) {
   ActionsResponseProto actions_response;
-  actions_response.set_server_payload("actions payload");
+  actions_response.set_global_payload("actions global payload");
+  actions_response.set_script_payload("actions payload");
   actions_response.add_actions()->mutable_tell()->set_message("ok");
 
-  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, "initial payload", _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(actions_response)));
+  EXPECT_CALL(mock_service_, OnGetActions(_, _, _, "initial global payload",
+                                          "initial payload", _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(actions_response)));
 
-  EXPECT_CALL(mock_service_, OnGetNextActions("actions payload", _, _))
-      .WillOnce(RunOnceCallback<2>(false, ""));
+  EXPECT_CALL(mock_service_, OnGetNextActions("actions global payload",
+                                              "actions payload", _, _))
+      .WillOnce(RunOnceCallback<3>(false, ""));
 
   EXPECT_CALL(executor_callback_, Run(_));
   executor_->Run(executor_callback_.Get());
 
-  EXPECT_EQ("actions payload", last_server_payload_);
+  EXPECT_EQ("actions global payload", last_global_payload_);
+  EXPECT_EQ("actions payload", last_script_payload_);
 }
 
 TEST_F(ScriptExecutorTest, RunInterrupt) {
@@ -511,11 +514,11 @@
   // Both scripts ends after the first set of actions. Capture the results.
   std::vector<ProcessedActionProto> processed_actions1_capture;
   std::vector<ProcessedActionProto> processed_actions2_capture;
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillOnce(DoAll(SaveArg<1>(&processed_actions1_capture),
-                      RunOnceCallback<2>(true, "")))
-      .WillOnce(DoAll(SaveArg<1>(&processed_actions2_capture),
-                      RunOnceCallback<2>(true, "")));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillOnce(DoAll(SaveArg<2>(&processed_actions1_capture),
+                      RunOnceCallback<3>(true, "")))
+      .WillOnce(DoAll(SaveArg<2>(&processed_actions2_capture),
+                      RunOnceCallback<3>(true, "")));
 
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, true)));
@@ -550,12 +553,14 @@
 
   {
     testing::InSequence seq;
-    EXPECT_CALL(mock_service_, OnGetNextActions("payload for interrupt1", _, _))
-        .WillOnce(RunOnceCallback<2>(true, ""));
-    EXPECT_CALL(mock_service_, OnGetNextActions("payload for interrupt2", _, _))
-        .WillOnce(RunOnceCallback<2>(true, ""));
-    EXPECT_CALL(mock_service_, OnGetNextActions("main script payload", _, _))
-        .WillOnce(RunOnceCallback<2>(true, ""));
+    EXPECT_CALL(mock_service_,
+                OnGetNextActions(_, "payload for interrupt1", _, _))
+        .WillOnce(RunOnceCallback<3>(true, ""));
+    EXPECT_CALL(mock_service_,
+                OnGetNextActions(_, "payload for interrupt2", _, _))
+        .WillOnce(RunOnceCallback<3>(true, ""));
+    EXPECT_CALL(mock_service_, OnGetNextActions(_, "main script payload", _, _))
+        .WillOnce(RunOnceCallback<3>(true, ""));
   }
 
   EXPECT_CALL(executor_callback_,
@@ -575,39 +580,46 @@
   SetupInterrupt("interrupt", "interrupt_trigger");
 
   ActionsResponseProto next_interrupt_actions_response;
-  next_interrupt_actions_response.set_server_payload(
+  next_interrupt_actions_response.set_global_payload(
+      "last global payload from interrupt");
+  next_interrupt_actions_response.set_script_payload(
       "last payload from interrupt");
-  EXPECT_CALL(mock_service_, OnGetNextActions("payload for interrupt", _, _))
+  EXPECT_CALL(mock_service_, OnGetNextActions("global payload for interrupt",
+                                              "payload for interrupt", _, _))
       .WillOnce(
-          RunOnceCallback<2>(true, Serialize(next_interrupt_actions_response)));
+          RunOnceCallback<3>(true, Serialize(next_interrupt_actions_response)));
 
   ActionsResponseProto next_main_actions_response;
-  next_main_actions_response.set_server_payload("last payload from main");
-  EXPECT_CALL(mock_service_, OnGetNextActions("main script payload", _, _))
+  next_main_actions_response.set_global_payload(
+      "last global payload from main");
+  next_main_actions_response.set_script_payload("last payload from main");
+  EXPECT_CALL(mock_service_,
+              OnGetNextActions("last global payload from interrupt",
+                               "main script payload", _, _))
       .WillOnce(
-          RunOnceCallback<2>(true, Serialize(next_main_actions_response)));
+          RunOnceCallback<3>(true, Serialize(next_main_actions_response)));
 
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, true)));
   executor_->Run(executor_callback_.Get());
 
-  EXPECT_EQ("last payload from main", last_server_payload_);
+  EXPECT_EQ("last global payload from main", last_global_payload_);
+  EXPECT_EQ("last payload from main", last_script_payload_);
 }
 
 TEST_F(ScriptExecutorTest, ForwardMainScriptPayloadWhenInterruptFails) {
   SetupInterruptibleScript(kScriptPath, "element");
   SetupInterrupt("interrupt", "interrupt_trigger");
 
-  ActionsResponseProto next_interrupt_actions_response;
-  next_interrupt_actions_response.set_server_payload(
-      "last payload from interrupt");
-  EXPECT_CALL(mock_service_, OnGetNextActions("payload for interrupt", _, _))
-      .WillOnce(RunOnceCallback<2>(false, ""));
+  EXPECT_CALL(mock_service_, OnGetNextActions("global payload for interrupt",
+                                              "payload for interrupt", _, _))
+      .WillOnce(RunOnceCallback<3>(false, ""));
 
   EXPECT_CALL(executor_callback_, Run(_));
   executor_->Run(executor_callback_.Get());
 
-  EXPECT_EQ("main script payload", last_server_payload_);
+  EXPECT_EQ("global payload for interrupt", last_global_payload_);
+  EXPECT_EQ("main script payload", last_script_payload_);
 }
 
 TEST_F(ScriptExecutorTest, DoNotRunInterruptIfPreconditionsDontMatch) {
@@ -623,8 +635,8 @@
               OnElementCheck(_, Eq(Selector({"interrupt_trigger"})), _))
       .WillRepeatedly(RunOnceCallback<2>(false));
 
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillRepeatedly(RunOnceCallback<2>(true, ""));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillRepeatedly(RunOnceCallback<3>(true, ""));
 
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, true)));
@@ -641,15 +653,15 @@
   auto* wait_action = interruptible.add_actions()->mutable_wait_for_dom();
   wait_action->add_selectors("element");
   // allow_interrupt is not set
-  EXPECT_CALL(mock_service_, OnGetActions(StrEq(kScriptPath), _, _, _, _))
-      .WillOnce(RunOnceCallback<4>(true, Serialize(interruptible)));
+  EXPECT_CALL(mock_service_, OnGetActions(StrEq(kScriptPath), _, _, _, _, _))
+      .WillOnce(RunOnceCallback<5>(true, Serialize(interruptible)));
 
   // The interrupt would trigger, since interrupt_trigger exits, but it's not
   // given an opportunity to.
   SetupInterrupt("interrupt", "interrupt_trigger");
 
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillRepeatedly(RunOnceCallback<2>(true, ""));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillRepeatedly(RunOnceCallback<3>(true, ""));
 
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, true)));
@@ -665,8 +677,8 @@
   SetupInterruptibleScript(kScriptPath, "element");
   SetupInterrupt("interrupt", "interrupt_trigger");
 
-  EXPECT_CALL(mock_service_, OnGetNextActions("payload for interrupt", _, _))
-      .WillOnce(RunOnceCallback<2>(false, ""));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, "payload for interrupt", _, _))
+      .WillOnce(RunOnceCallback<3>(false, ""));
 
   EXPECT_CALL(executor_callback_,
               Run(Field(&ScriptExecutor::Result::success, false)));
@@ -687,11 +699,11 @@
   ActionsResponseProto interrupt_actions;
   interrupt_actions.add_actions()->mutable_stop();
 
-  EXPECT_CALL(mock_service_, OnGetActions(StrEq("interrupt"), _, _, _, _))
-      .WillRepeatedly(RunOnceCallback<4>(true, Serialize(interrupt_actions)));
+  EXPECT_CALL(mock_service_, OnGetActions(StrEq("interrupt"), _, _, _, _, _))
+      .WillRepeatedly(RunOnceCallback<5>(true, Serialize(interrupt_actions)));
 
-  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _))
-      .WillOnce(RunOnceCallback<2>(true, ""));
+  EXPECT_CALL(mock_service_, OnGetNextActions(_, _, _, _))
+      .WillOnce(RunOnceCallback<3>(true, ""));
 
   EXPECT_CALL(executor_callback_,
               Run(AllOf(Field(&ScriptExecutor::Result::success, true),
diff --git a/components/autofill_assistant/browser/script_tracker.cc b/components/autofill_assistant/browser/script_tracker.cc
index bcfa67bd..a723484b 100644
--- a/components/autofill_assistant/browser/script_tracker.cc
+++ b/components/autofill_assistant/browser/script_tracker.cc
@@ -117,8 +117,8 @@
   }
 
   executor_ = std::make_unique<ScriptExecutor>(
-      script_path, last_server_payload_, /* listener= */ this, &scripts_state_,
-      &interrupts_, delegate_);
+      script_path, last_global_payload_, last_script_payload_,
+      /* listener= */ this, &scripts_state_, &interrupts_, delegate_);
   ScriptExecutor::RunScriptCallback run_script_callback = base::BindOnce(
       &ScriptTracker::OnScriptRun, weak_ptr_factory_.GetWeakPtr(), script_path,
       std::move(callback));
@@ -141,9 +141,14 @@
 
 base::Value ScriptTracker::GetDebugContext() const {
   base::Value dict(base::Value::Type::DICTIONARY);
-  std::string last_server_payload_js = last_server_payload_;
-  base::Base64Encode(last_server_payload_js, &last_server_payload_js);
-  dict.SetKey("last-payload", base::Value(last_server_payload_js));
+
+  std::string last_global_payload_js = last_global_payload_;
+  base::Base64Encode(last_global_payload_js, &last_global_payload_js);
+  dict.SetKey("last-global-payload", base::Value(last_global_payload_js));
+
+  std::string last_script_payload_js = last_script_payload_;
+  base::Base64Encode(last_script_payload_js, &last_script_payload_js);
+  dict.SetKey("last-script-payload", base::Value(last_script_payload_js));
 
   std::vector<base::Value> scripts_state_js;
   for (const auto& entry : scripts_state_) {
@@ -229,8 +234,10 @@
     pending_runnable_scripts_.push_back(script);
 }
 
-void ScriptTracker::OnServerPayloadChanged(const std::string& server_payload) {
-  last_server_payload_ = server_payload;
+void ScriptTracker::OnServerPayloadChanged(const std::string& global_payload,
+                                           const std::string& script_payload) {
+  last_global_payload_ = global_payload;
+  last_script_payload_ = script_payload;
 }
 
 }  // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/script_tracker.h b/components/autofill_assistant/browser/script_tracker.h
index 9719a7d..90ad7b7 100644
--- a/components/autofill_assistant/browser/script_tracker.h
+++ b/components/autofill_assistant/browser/script_tracker.h
@@ -114,7 +114,8 @@
   void OnCheckDone();
 
   // Overrides ScriptExecutor::Listener.
-  void OnServerPayloadChanged(const std::string& server_payload) override;
+  void OnServerPayloadChanged(const std::string& global_payload,
+                              const std::string& script_payload) override;
 
   // Stops running pending checks and cleans up any state used by pending
   // checks. This can safely be called at any time, including when no checks are
@@ -163,7 +164,8 @@
   // this is nullptr.
   std::unique_ptr<ScriptExecutor> executor_;
 
-  std::string last_server_payload_;
+  std::string last_global_payload_;
+  std::string last_script_payload_;
 
   base::WeakPtrFactory<ScriptTracker> weak_ptr_factory_;
 
diff --git a/components/autofill_assistant/browser/script_tracker_unittest.cc b/components/autofill_assistant/browser/script_tracker_unittest.cc
index 3c09f47..c276fc61b 100644
--- a/components/autofill_assistant/browser/script_tracker_unittest.cc
+++ b/components/autofill_assistant/browser/script_tracker_unittest.cc
@@ -43,8 +43,8 @@
     ON_CALL(mock_web_controller_, GetUrl()).WillByDefault(ReturnRef(url_));
 
     // Scripts run, but have no actions.
-    ON_CALL(mock_service_, OnGetActions(_, _, _, _, _))
-        .WillByDefault(RunOnceCallback<4>(true, ""));
+    ON_CALL(mock_service_, OnGetActions(_, _, _, _, _, _))
+        .WillByDefault(RunOnceCallback<5>(true, ""));
   }
 
  protected:
diff --git a/components/autofill_assistant/browser/service.cc b/components/autofill_assistant/browser/service.cc
index 7669b148..0a249e3 100644
--- a/components/autofill_assistant/browser/service.cc
+++ b/components/autofill_assistant/browser/service.cc
@@ -98,28 +98,28 @@
 void Service::GetActions(const std::string& script_path,
                          const GURL& url,
                          const std::map<std::string, std::string>& parameters,
-                         const std::string& server_payload,
+                         const std::string& global_payload,
+                         const std::string& script_payload,
                          ResponseCallback callback) {
   DCHECK(!script_path.empty());
 
-  SendRequest(AddLoader(
-      script_action_server_url_,
-      ProtocolUtils::CreateInitialScriptActionsRequest(
-          script_path, url, parameters, server_payload, client_context_),
-      std::move(callback)));
+  SendRequest(AddLoader(script_action_server_url_,
+                        ProtocolUtils::CreateInitialScriptActionsRequest(
+                            script_path, url, parameters, global_payload,
+                            script_payload, client_context_),
+                        std::move(callback)));
 }
 
 void Service::GetNextActions(
-    const std::string& previous_server_payload,
+    const std::string& previous_global_payload,
+    const std::string& previous_script_payload,
     const std::vector<ProcessedActionProto>& processed_actions,
     ResponseCallback callback) {
-  DCHECK(!previous_server_payload.empty());
-
-  SendRequest(AddLoader(
-      script_action_server_url_,
-      ProtocolUtils::CreateNextScriptActionsRequest(
-          previous_server_payload, processed_actions, client_context_),
-      std::move(callback)));
+  SendRequest(AddLoader(script_action_server_url_,
+                        ProtocolUtils::CreateNextScriptActionsRequest(
+                            previous_global_payload, previous_script_payload,
+                            processed_actions, client_context_),
+                        std::move(callback)));
 }
 
 void Service::SendRequest(Loader* loader) {
diff --git a/components/autofill_assistant/browser/service.h b/components/autofill_assistant/browser/service.h
index 6723daad..b19f3bb 100644
--- a/components/autofill_assistant/browser/service.h
+++ b/components/autofill_assistant/browser/service.h
@@ -50,13 +50,15 @@
   virtual void GetActions(const std::string& script_path,
                           const GURL& url,
                           const std::map<std::string, std::string>& parameters,
-                          const std::string& server_payload,
+                          const std::string& global_payload,
+                          const std::string& script_payload,
                           ResponseCallback callback);
 
-  // Get next sequence of actions according to server payload in previous
+  // Get next sequence of actions according to server payloads in previous
   // response.
   virtual void GetNextActions(
-      const std::string& previous_server_payload,
+      const std::string& previous_global_payload,
+      const std::string& previous_script_payload,
       const std::vector<ProcessedActionProto>& processed_actions,
       ResponseCallback callback);
 
diff --git a/components/autofill_assistant/browser/service.proto b/components/autofill_assistant/browser/service.proto
index cbac17d..653f45c 100644
--- a/components/autofill_assistant/browser/service.proto
+++ b/components/autofill_assistant/browser/service.proto
@@ -166,8 +166,14 @@
 message ScriptActionRequestProto {
   optional ClientContextProto client_context = 7;
 
-  // The server payload received from the previous response.
-  optional bytes server_payload = 2;
+  // Global payload from the previous response, possibly for another script.
+  optional bytes global_payload = 8;
+
+  // Script payload from the previous response, for the same script.
+  //
+  // For backward compatibility, for initial requests, forward the last returned
+  // script_payload.
+  optional bytes script_payload = 2;
 
   oneof request {
     InitialScriptActionsRequestProto initial_request = 4;
@@ -200,9 +206,12 @@
 
 // Response of a script's actions.
 message ActionsResponseProto {
-  // Opaque data that should not be interpreted and must pass this back
-  // unchanged in the next request.
-  optional bytes server_payload = 2;
+  // Opaque data to send to the next ScriptActionRequestProto.
+  optional bytes global_payload = 4;
+
+  // Opaque data to send to the next ScriptActionRequestProto for the same
+  // script.
+  optional bytes script_payload = 2;
 
   // Actions to be performed in order.
   // Should stop processing as soon as an action fails.
diff --git a/components/browser_sync/profile_sync_service.h b/components/browser_sync/profile_sync_service.h
index 4062c497ba..5e0c3d8 100644
--- a/components/browser_sync/profile_sync_service.h
+++ b/components/browser_sync/profile_sync_service.h
@@ -230,7 +230,7 @@
   void TriggerRefresh(const syncer::ModelTypeSet& types) override;
   void OnDataTypeRequestsSyncStartup(syncer::ModelType type) override;
   void RequestStop(SyncStopDataFate data_fate) override;
-  void RequestStart() override;
+  virtual void RequestStart();  // Virtual for testing.
   syncer::ModelTypeSet GetActiveDataTypes() const override;
   void AddObserver(syncer::SyncServiceObserver* observer) override;
   void RemoveObserver(syncer::SyncServiceObserver* observer) override;
diff --git a/components/password_manager/core/browser/form_parsing/form_parser.cc b/components/password_manager/core/browser/form_parsing/form_parser.cc
index ec742e8..e88ee97 100644
--- a/components/password_manager/core/browser/form_parsing/form_parser.cc
+++ b/components/password_manager/core/browser/form_parsing/form_parser.cc
@@ -808,6 +808,7 @@
   result->username_may_use_prefilled_placeholder =
       GetMayUsePrefilledPlaceholder(form_predictions, significant_fields);
   result->only_for_fallback_saving = significant_fields.is_fallback;
+  result->submission_event = form_data.submission_event;
 
   // Set data related to specific fields.
   SetFields(significant_fields, result.get());
diff --git a/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc b/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
index b11c104..6fe3d26 100644
--- a/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
+++ b/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
@@ -19,6 +19,7 @@
 #include "components/autofill/core/common/form_data.h"
 #include "components/autofill/core/common/form_field_data.h"
 #include "components/autofill/core/common/password_form.h"
+#include "components/autofill/core/common/submission_indicator_event.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
@@ -27,6 +28,7 @@
 using autofill::FormData;
 using autofill::FormFieldData;
 using autofill::PasswordForm;
+using autofill::SubmissionIndicatorEvent;
 using base::ASCIIToUTF16;
 
 namespace password_manager {
@@ -88,6 +90,7 @@
   base::Optional<FormDataParser::ReadonlyPasswordFields> readonly_status;
   // If the result should be marked as only useful for fallbacks.
   bool fallback_only = false;
+  SubmissionIndicatorEvent submission_event = SubmissionIndicatorEvent::NONE;
 };
 
 // Returns numbers which are distinct from each other within the scope of one
@@ -154,15 +157,15 @@
 // described in |fields_description|. Generates |fill_result| and |save_result|
 // expectations about the result in FILLING and SAVING mode, respectively. Also
 // fills |predictions| with the predictions contained in FieldDataDescriptions.
-FormData GetFormDataAndExpectation(
-    const std::vector<FieldDataDescription>& fields_description,
-    FormPredictions* predictions,
-    ParseResultIds* fill_result,
-    ParseResultIds* save_result) {
+FormData GetFormDataAndExpectation(const FormParsingTestCase& test_case,
+                                   FormPredictions* predictions,
+                                   ParseResultIds* fill_result,
+                                   ParseResultIds* save_result) {
   FormData form_data;
   form_data.action = GURL("http://example1.com");
   form_data.origin = GURL("http://example2.com");
-  for (const FieldDataDescription& field_description : fields_description) {
+  form_data.submission_event = test_case.submission_event;
+  for (const FieldDataDescription& field_description : test_case.fields) {
     FormFieldData field;
     const uint32_t unique_id = GetUniqueId();
     field.unique_renderer_id = unique_id;
@@ -315,7 +318,7 @@
     ParseResultIds fill_result;
     ParseResultIds save_result;
     const FormData form_data = GetFormDataAndExpectation(
-        test_case.fields, &predictions, &fill_result, &save_result);
+        test_case, &predictions, &fill_result, &save_result);
     FormDataParser parser;
     parser.set_predictions(std::move(predictions));
     for (auto mode :
@@ -341,6 +344,7 @@
         EXPECT_TRUE(parsed_form->has_renderer_ids);
         EXPECT_EQ(test_case.username_may_use_prefilled_placeholder,
                   parsed_form->username_may_use_prefilled_placeholder);
+        EXPECT_EQ(test_case.submission_event, parsed_form->submission_event);
         CheckPasswordFormFields(*parsed_form, form_data, expected_ids);
         CheckAllValuesUnique(parsed_form->all_possible_passwords);
         CheckAllValuesUnique(parsed_form->other_possible_usernames);
@@ -1794,6 +1798,18 @@
   }
 }
 
+TEST(FormParserTest, SubmissionEvent) {
+  CheckTestData({
+      {"Sign-in form, submission event is not None",
+       {
+           {.role = ElementRole::USERNAME, .form_control_type = "text"},
+           {.role = ElementRole::CURRENT_PASSWORD,
+            .form_control_type = "password"},
+       },
+       .submission_event = SubmissionIndicatorEvent::XHR_SUCCEEDED},
+  });
+}
+
 TEST(FormParserTest, GetSignonRealm) {
   struct TestCase {
     const char* input;
diff --git a/components/signin/core/browser/fake_signin_manager.cc b/components/signin/core/browser/fake_signin_manager.cc
index 6a3f355..8013a5e 100644
--- a/components/signin/core/browser/fake_signin_manager.cc
+++ b/components/signin/core/browser/fake_signin_manager.cc
@@ -103,8 +103,9 @@
 }
 
 void FakeSigninManager::ForceSignOut() {
-  // SigninClients should always allow sign-out for SIGNOUT_TEST.
-  SignOut(signin_metrics::SIGNOUT_TEST,
+  // SigninClients should always allow sign-out for
+  // |FORCE_SIGNOUT_ALWAYS_ALLOWED_FOR_TESTS|.
+  SignOut(signin_metrics::FORCE_SIGNOUT_ALWAYS_ALLOWED_FOR_TEST,
           signin_metrics::SignoutDelete::IGNORE_METRIC);
 }
 
diff --git a/components/signin/core/browser/signin_manager.cc b/components/signin/core/browser/signin_manager.cc
index 1e89ac3..4a557290 100644
--- a/components/signin/core/browser/signin_manager.cc
+++ b/components/signin/core/browser/signin_manager.cc
@@ -292,6 +292,14 @@
     //
     // Note: The token service has not yet loaded its credentials, so accounts
     // cannot be revoked here.
+    //
+    // On desktop, when SigninManager is initializing, the profile was not yet
+    // marked with sign out allowed. Therefore sign out is not allowed and all
+    // calls to SignOut methods are no-op.
+    //
+    // TODO(msarda): SignOut methods do not gurantee that sign out can actually
+    // be done (this depends on whether sign out is allowed). Add a check here
+    // on desktop to make it clear that SignOut does not do anything.
     SignOutAndKeepAllAccounts(signin_metrics::SIGNIN_PREF_CHANGED_DURING_SIGNIN,
                               signin_metrics::SignoutDelete::IGNORE_METRIC);
   }
diff --git a/components/signin/core/browser/signin_metrics.h b/components/signin/core/browser/signin_metrics.h
index efd2db2..50b307d 100644
--- a/components/signin/core/browser/signin_metrics.h
+++ b/components/signin/core/browser/signin_metrics.h
@@ -29,7 +29,7 @@
 // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.signin
 // GENERATED_JAVA_CLASS_NAME_OVERRIDE: SignoutReason
 enum ProfileSignout {
-  // The value used within unit tests
+  // The value used within unit tests.
   SIGNOUT_TEST = 0,
   // The preference or policy controlling if signin is valid has changed.
   SIGNOUT_PREF_CHANGED = 0,
@@ -55,6 +55,10 @@
   // Android specific. Signout forced because the account was removed from the
   // device.
   ACCOUNT_REMOVED_FROM_DEVICE,
+  // Signin is no longer allowed when the profile is initialized.
+  SIGNIN_NOT_ALLOWED_ON_PROFILE_INIT,
+  // Sign out is forced allowed. Only used for tests.
+  FORCE_SIGNOUT_ALWAYS_ALLOWED_FOR_TEST,
   // Keep this as the last enum.
   NUM_PROFILE_SIGNOUT_METRICS,
 };
diff --git a/components/sync/base/cryptographer.cc b/components/sync/base/cryptographer.cc
index 8757c33..3b77dc2 100644
--- a/components/sync/base/cryptographer.cc
+++ b/components/sync/base/cryptographer.cc
@@ -98,8 +98,9 @@
 bool Cryptographer::EncryptString(const std::string& serialized,
                                   sync_pb::EncryptedData* encrypted) const {
   if (CanDecryptUsingDefaultKey(*encrypted)) {
-    const std::string& original_serialized = DecryptToString(*encrypted);
-    if (original_serialized == serialized) {
+    std::string original_serialized;
+    if (DecryptToString(*encrypted, &original_serialized) &&
+        original_serialized == serialized) {
       DVLOG(2) << "Re-encryption unnecessary, encrypted data already matches.";
       return true;
     }
@@ -122,28 +123,29 @@
 bool Cryptographer::Decrypt(const sync_pb::EncryptedData& encrypted,
                             ::google::protobuf::MessageLite* message) const {
   DCHECK(message);
-  std::string plaintext = DecryptToString(encrypted);
+  std::string plaintext;
+  if (!DecryptToString(encrypted, &plaintext)) {
+    return false;
+  }
   return message->ParseFromString(plaintext);
 }
 
-std::string Cryptographer::DecryptToString(
-    const sync_pb::EncryptedData& encrypted) const {
-  // TODO(mamir): DecryptToString() should return a boolean to signal failure
-  // instead of an empty string.
+bool Cryptographer::DecryptToString(const sync_pb::EncryptedData& encrypted,
+                                    std::string* decrypted) const {
+  decrypted->clear();
   auto it = nigoris_.find(encrypted.key_name());
   if (nigoris_.end() == it) {
     // The key used to encrypt the blob is not part of the set of installed
     // nigoris.
     LOG(ERROR) << "Cannot decrypt message";
-    return std::string();
+    return false;
   }
 
-  std::string plaintext;
-  if (!it->second->Decrypt(encrypted.blob(), &plaintext)) {
-    return std::string();
+  if (!it->second->Decrypt(encrypted.blob(), decrypted)) {
+    return false;
   }
 
-  return plaintext;
+  return true;
 }
 
 bool Cryptographer::GetKeys(sync_pb::EncryptedData* encrypted) const {
diff --git a/components/sync/base/cryptographer.h b/components/sync/base/cryptographer.h
index 137b1ea..8dd686c 100644
--- a/components/sync/base/cryptographer.h
+++ b/components/sync/base/cryptographer.h
@@ -100,9 +100,10 @@
   bool Decrypt(const sync_pb::EncryptedData& encrypted,
                ::google::protobuf::MessageLite* message) const;
 
-  // Decrypts |encrypted| and returns plaintext decrypted data. If decryption
-  // fails, returns empty string.
-  std::string DecryptToString(const sync_pb::EncryptedData& encrypted) const;
+  // Decrypts |encrypted| as a plaintext decrypted data in |decrypted|. If
+  // decryption fails, returns false otherwise returns true.
+  bool DecryptToString(const sync_pb::EncryptedData& encrypted,
+                       std::string* decrypted) const;
 
   // Encrypts the set of currently known keys into |encrypted|. Returns true if
   // successful.
diff --git a/components/sync/driver/fake_sync_service.cc b/components/sync/driver/fake_sync_service.cc
index b2b2496..d198e7d 100644
--- a/components/sync/driver/fake_sync_service.cc
+++ b/components/sync/driver/fake_sync_service.cc
@@ -69,8 +69,6 @@
 
 void FakeSyncService::RequestStop(SyncService::SyncStopDataFate data_fate) {}
 
-void FakeSyncService::RequestStart() {}
-
 ModelTypeSet FakeSyncService::GetPreferredDataTypes() const {
   return ModelTypeSet();
 }
diff --git a/components/sync/driver/fake_sync_service.h b/components/sync/driver/fake_sync_service.h
index e890456..46a302ba 100644
--- a/components/sync/driver/fake_sync_service.h
+++ b/components/sync/driver/fake_sync_service.h
@@ -39,7 +39,6 @@
   bool HasObserver(const SyncServiceObserver* observer) const override;
   void OnDataTypeRequestsSyncStartup(ModelType type) override;
   void RequestStop(SyncService::SyncStopDataFate data_fate) override;
-  void RequestStart() override;
   ModelTypeSet GetPreferredDataTypes() const override;
   void OnUserChoseDatatypes(bool sync_everything,
                             ModelTypeSet chosen_types) override;
diff --git a/components/sync/driver/sync_service.h b/components/sync/driver/sync_service.h
index 734c216..becc015e 100644
--- a/components/sync/driver/sync_service.h
+++ b/components/sync/driver/sync_service.h
@@ -85,7 +85,7 @@
     // yet. Note that during subsequent browser startups, Sync starts
     // automatically, i.e. no prod is necessary, but during the first start Sync
     // does need a kick. This usually happens via starting (not finishing!) the
-    // initial setup, or via an explicit call to RequestStart.
+    // initial setup, or via a call to SyncUserSettings::SetSyncRequested.
     // TODO(crbug.com/839834): Check whether this state is necessary, or if Sync
     // can just always start up if all conditions are fulfilled (that's what
     // happens in practice anyway).
@@ -266,12 +266,6 @@
   // ACTIONS / STATE CHANGE REQUESTS
   //////////////////////////////////////////////////////////////////////////////
 
-  // The user requests that sync start. This only actually starts sync if
-  // IsSyncAllowed is true and the user is signed in. Once sync starts,
-  // other things such as IsFirstSetupComplete being false can still prevent
-  // it from moving into the "active" state.
-  virtual void RequestStart() = 0;
-
   // Stops sync at the user's request. |data_fate| controls whether the sync
   // engine should clear its data directory when it shuts down. Generally
   // KEEP_DATA is used when the user just stops sync, and CLEAR_DATA is used
diff --git a/components/sync/driver/test_sync_service.cc b/components/sync/driver/test_sync_service.cc
index db7f90f..ff42d80b 100644
--- a/components/sync/driver/test_sync_service.cc
+++ b/components/sync/driver/test_sync_service.cc
@@ -152,8 +152,6 @@
   return active_data_types_;
 }
 
-void TestSyncService::RequestStart() {}
-
 void TestSyncService::RequestStop(SyncService::SyncStopDataFate data_fate) {}
 
 void TestSyncService::OnDataTypeRequestsSyncStartup(ModelType type) {}
diff --git a/components/sync/driver/test_sync_service.h b/components/sync/driver/test_sync_service.h
index 305c5b8..2d0ad397 100644
--- a/components/sync/driver/test_sync_service.h
+++ b/components/sync/driver/test_sync_service.h
@@ -61,7 +61,6 @@
   ModelTypeSet GetPreferredDataTypes() const override;
   ModelTypeSet GetActiveDataTypes() const override;
 
-  void RequestStart() override;
   void RequestStop(SyncStopDataFate data_fate) override;
   void OnDataTypeRequestsSyncStartup(ModelType type) override;
   void OnUserChoseDatatypes(bool sync_everything,
diff --git a/components/sync/engine/engine_util.cc b/components/sync/engine/engine_util.cc
index 695c2df..961982a 100644
--- a/components/sync/engine/engine_util.cc
+++ b/components/sync/engine/engine_util.cc
@@ -90,7 +90,9 @@
       NOTREACHED() << "Attempting to compare undecryptable data.";
       return false;
     }
-    left_plaintext = cryptographer->DecryptToString(left.encrypted());
+    if (!cryptographer->DecryptToString(left.encrypted(), &left_plaintext)) {
+      return false;
+    }
   } else {
     left_plaintext = left.SerializeAsString();
   }
@@ -99,7 +101,9 @@
       NOTREACHED() << "Attempting to compare undecryptable data.";
       return false;
     }
-    right_plaintext = cryptographer->DecryptToString(right.encrypted());
+    if (!cryptographer->DecryptToString(right.encrypted(), &right_plaintext)) {
+      return false;
+    }
   } else {
     right_plaintext = right.SerializeAsString();
   }
diff --git a/components/sync/engine_impl/conflict_resolver.cc b/components/sync/engine_impl/conflict_resolver.cc
index a38f001..8456f206 100644
--- a/components/sync/engine_impl/conflict_resolver.cc
+++ b/components/sync/engine_impl/conflict_resolver.cc
@@ -113,8 +113,9 @@
     bool server_encrypted_with_default_key = false;
     if (specifics.has_encrypted()) {
       DCHECK(cryptographer->CanDecryptUsingDefaultKey(specifics.encrypted()));
-      decrypted_specifics =
-          cryptographer->DecryptToString(specifics.encrypted());
+      // TODO(crbug.com/908391): what if the decryption below fails?
+      cryptographer->DecryptToString(specifics.encrypted(),
+                                     &decrypted_specifics);
     } else {
       decrypted_specifics = specifics.SerializeAsString();
     }
@@ -122,8 +123,9 @@
       server_encrypted_with_default_key =
           cryptographer->CanDecryptUsingDefaultKey(
               server_specifics.encrypted());
-      decrypted_server_specifics =
-          cryptographer->DecryptToString(server_specifics.encrypted());
+      // TODO(crbug.com/908391): what if the decryption below fails?
+      cryptographer->DecryptToString(server_specifics.encrypted(),
+                                     &decrypted_server_specifics);
     } else {
       decrypted_server_specifics = server_specifics.SerializeAsString();
     }
@@ -139,8 +141,9 @@
         decrypted_base_server_specifics =
             base_server_specifics.SerializeAsString();
       } else {
-        decrypted_base_server_specifics =
-            cryptographer->DecryptToString(base_server_specifics.encrypted());
+        // TODO(crbug.com/908391): what if the decryption below fails?
+        cryptographer->DecryptToString(base_server_specifics.encrypted(),
+                                       &decrypted_base_server_specifics);
       }
       if (decrypted_server_specifics == decrypted_base_server_specifics)
         base_server_specifics_match = true;
diff --git a/components/sync/engine_impl/model_type_worker.cc b/components/sync/engine_impl/model_type_worker.cc
index 5524730b0..92fd51f 100644
--- a/components/sync/engine_impl/model_type_worker.cc
+++ b/components/sync/engine_impl/model_type_worker.cc
@@ -684,13 +684,8 @@
   DCHECK(in.has_encrypted());
   DCHECK(cryptographer.CanDecrypt(in.encrypted()));
 
-  std::string plaintext = cryptographer.DecryptToString(in.encrypted());
-  if (plaintext.empty()) {
-    LOG(ERROR) << "Failed to decrypt a decryptable entity";
-    return false;
-  }
-  if (!out->ParseFromString(plaintext)) {
-    LOG(ERROR) << "Failed to parse decrypted entity";
+  if (!cryptographer.Decrypt(in.encrypted(), out)) {
+    DLOG(ERROR) << "Failed to decrypt a decryptable specifics";
     return false;
   }
   return true;
@@ -704,11 +699,11 @@
   DCHECK(in.has_password());
   DCHECK(in.password().has_encrypted());
   DCHECK(cryptographer.CanDecrypt(in.password().encrypted()));
-  // TODO(mamir): unify implementation with DecryptSpecifics() above.
+
   if (!cryptographer.Decrypt(
           in.password().encrypted(),
           out->mutable_password()->mutable_client_only_encrypted_data())) {
-    LOG(ERROR) << "Failed to decrypt a decryptable password";
+    DLOG(ERROR) << "Failed to decrypt a decryptable password";
     return false;
   }
   return true;
diff --git a/components/sync/engine_impl/non_blocking_type_commit_contribution.cc b/components/sync/engine_impl/non_blocking_type_commit_contribution.cc
index 937c1ce6..d2e740b 100644
--- a/components/sync/engine_impl/non_blocking_type_commit_contribution.cc
+++ b/components/sync/engine_impl/non_blocking_type_commit_contribution.cc
@@ -5,11 +5,13 @@
 #include "components/sync/engine_impl/non_blocking_type_commit_contribution.h"
 
 #include <algorithm>
+#include <utility>
 
 #include "base/guid.h"
 #include "base/values.h"
 #include "components/sync/base/time.h"
 #include "components/sync/base/unique_position.h"
+#include "components/sync/driver/sync_driver_switches.h"
 #include "components/sync/engine/non_blocking_sync_common.h"
 #include "components/sync/engine_impl/model_type_worker.h"
 #include "components/sync/protocol/proto_value_conversions.h"
@@ -229,14 +231,37 @@
 
   // Encrypt the specifics and hide the title if necessary.
   if (commit_proto->specifics().has_password()) {
-    // If explicit encryption is enabled, password metadata fields must be
-    // cleared. See documentation in password_specifics.proto.
-    if (IsExplicitPassphrase(passphrase_type_)) {
-      commit_proto->mutable_specifics()
-          ->mutable_password()
-          ->clear_unencrypted_metadata();
+    if (base::FeatureList::IsEnabled(switches::kSyncUSSPasswords)) {
+      DCHECK(cryptographer_);
+      const sync_pb::PasswordSpecifics& password_specifics =
+          commit_proto->specifics().password();
+      const sync_pb::PasswordSpecificsData& password_data =
+          password_specifics.client_only_encrypted_data();
+      sync_pb::EntitySpecifics encrypted_password;
+      if (!IsExplicitPassphrase(passphrase_type_) &&
+          password_specifics.unencrypted_metadata().url() !=
+              password_data.signon_realm()) {
+        encrypted_password.mutable_password()
+            ->mutable_unencrypted_metadata()
+            ->set_url(password_data.signon_realm());
+      }
+
+      bool result = cryptographer_->Encrypt(
+          password_data,
+          encrypted_password.mutable_password()->mutable_encrypted());
+      DCHECK(result);
+      *commit_proto->mutable_specifics() = std::move(encrypted_password);
+      commit_proto->set_name("encrypted");
+    } else {
+      // If explicit encryption is enabled, password metadata fields must be
+      // cleared. See documentation in password_specifics.proto.
+      if (IsExplicitPassphrase(passphrase_type_)) {
+        commit_proto->mutable_specifics()
+            ->mutable_password()
+            ->clear_unencrypted_metadata();
+      }
+      commit_proto->set_name("encrypted");
     }
-    commit_proto->set_name("encrypted");
   } else if (cryptographer_) {
     if (commit_proto->has_specifics()) {
       sync_pb::EntitySpecifics encrypted_specifics;
diff --git a/components/sync/engine_impl/non_blocking_type_commit_contribution.h b/components/sync/engine_impl/non_blocking_type_commit_contribution.h
index b1e2c1c..74ea40c 100644
--- a/components/sync/engine_impl/non_blocking_type_commit_contribution.h
+++ b/components/sync/engine_impl/non_blocking_type_commit_contribution.h
@@ -53,7 +53,7 @@
                                   sync_pb::SyncEntity* commit_proto);
 
  private:
-  // Generates id for new entites and encrypts entity if needed.
+  // Generates id for new entities and encrypts entity if needed.
   void AdjustCommitProto(sync_pb::SyncEntity* commit_proto);
 
   const ModelType type_;
diff --git a/components/sync/engine_impl/sync_encryption_handler_impl.cc b/components/sync/engine_impl/sync_encryption_handler_impl.cc
index 36847a3c..61b272e 100644
--- a/components/sync/engine_impl/sync_encryption_handler_impl.cc
+++ b/components/sync/engine_impl/sync_encryption_handler_impl.cc
@@ -1864,8 +1864,10 @@
     // ensure we re-encrypt using the newest key.
     DVLOG(1) << "Attempting to decrypt pending keys using "
              << "keystore decryptor token.";
-    std::string serialized_nigori =
-        temp_cryptographer.DecryptToString(keystore_decryptor_token);
+    std::string serialized_nigori;
+    // TODO(crbug.com/908391): what if the decryption below fails?
+    temp_cryptographer.DecryptToString(keystore_decryptor_token,
+                                       &serialized_nigori);
 
     // This will decrypt the pending keys and add them if possible. The key
     // within |serialized_nigori| will be the default after.
diff --git a/components/sync/syncable/base_node.cc b/components/sync/syncable/base_node.cc
index c6521ac0..81655a7 100644
--- a/components/sync/syncable/base_node.cc
+++ b/components/sync/syncable/base_node.cc
@@ -85,9 +85,9 @@
   }
 
   const sync_pb::EncryptedData& encrypted = specifics.encrypted();
-  std::string plaintext_data =
-      GetTransaction()->GetCryptographer()->DecryptToString(encrypted);
-  if (plaintext_data.length() == 0) {
+  std::string plaintext_data;
+  if (!GetTransaction()->GetCryptographer()->DecryptToString(encrypted,
+                                                             &plaintext_data)) {
     GetTransaction()->GetWrappedTrans()->OnUnrecoverableError(
         FROM_HERE, std::string("Failed to decrypt encrypted node of type ") +
                        ModelTypeToString(GetModelType()));
diff --git a/components/sync/syncable/delete_journal.cc b/components/sync/syncable/delete_journal.cc
index fdba024..4bdbb62b 100644
--- a/components/sync/syncable/delete_journal.cc
+++ b/components/sync/syncable/delete_journal.cc
@@ -31,10 +31,10 @@
     if (!specifics.has_encrypted()) {
       delete_journal_list->back().specifics = specifics;
     } else {
-      std::string plaintext_data =
-          trans->GetCryptographer()->DecryptToString(specifics.encrypted());
+      std::string plaintext_data;
       sync_pb::EntitySpecifics unencrypted_data;
-      if (plaintext_data.length() == 0 ||
+      if (!trans->GetCryptographer()->DecryptToString(specifics.encrypted(),
+                                                      &plaintext_data) ||
           !unencrypted_data.ParseFromString(plaintext_data)) {
         // Fail to decrypt, Add this delete journal to purge.
         undecryptable_journal.insert(delete_journal_list->back().id);
diff --git a/components/unified_consent/unified_consent_service_client.cc b/components/unified_consent/unified_consent_service_client.cc
index 1bd56d2..87d3771 100644
--- a/components/unified_consent/unified_consent_service_client.cc
+++ b/components/unified_consent/unified_consent_service_client.cc
@@ -11,6 +11,10 @@
 UnifiedConsentServiceClient::UnifiedConsentServiceClient() {}
 UnifiedConsentServiceClient::~UnifiedConsentServiceClient() {}
 
+bool UnifiedConsentServiceClient::IsServiceSupported(Service service) {
+  return GetServiceState(service) != ServiceState::kNotSupported;
+}
+
 void UnifiedConsentServiceClient::AddObserver(Observer* observer) {
   observer_list_.AddObserver(observer);
 }
diff --git a/components/unified_consent/unified_consent_service_client.h b/components/unified_consent/unified_consent_service_client.h
index 194fbf9b..acddaf7e 100644
--- a/components/unified_consent/unified_consent_service_client.h
+++ b/components/unified_consent/unified_consent_service_client.h
@@ -62,6 +62,9 @@
   // Sets |service| enabled if it is supported on this platform.
   virtual void SetServiceEnabled(Service service, bool enabled) = 0;
 
+  // Returns whether |service| is supported on this platform.
+  bool IsServiceSupported(Service service);
+
   // Methods to register or remove observers.
   void AddObserver(Observer* observer);
   void RemoveObserver(Observer* observer);
diff --git a/components/viz/service/display/DEPS b/components/viz/service/display/DEPS
index d866c452..c605c71 100644
--- a/components/viz/service/display/DEPS
+++ b/components/viz/service/display/DEPS
@@ -11,6 +11,7 @@
   "+gpu/command_buffer/client",
   "+gpu/command_buffer/common",
   "+gpu/GLES2",
+  "+gpu/config/gpu_finch_features.h",
   "+gpu/vulkan",
   "+media/base",
   "+mojo/public/cpp/system",
diff --git a/components/viz/service/display/dc_layer_overlay.cc b/components/viz/service/display/dc_layer_overlay.cc
index fc64fa0..5ab6a71 100644
--- a/components/viz/service/display/dc_layer_overlay.cc
+++ b/components/viz/service/display/dc_layer_overlay.cc
@@ -5,11 +5,13 @@
 #include "components/viz/service/display/dc_layer_overlay.h"
 
 #include "base/metrics/histogram_macros.h"
+#include "build/build_config.h"
 #include "cc/base/math_util.h"
 #include "components/viz/common/quads/render_pass_draw_quad.h"
 #include "components/viz/common/quads/solid_color_draw_quad.h"
 #include "components/viz/common/quads/yuv_video_draw_quad.h"
 #include "components/viz/service/display/display_resource_provider.h"
+#include "components/viz/service/display/output_surface.h"
 #include "gpu/GLES2/gl2extchromium.h"
 #include "ui/gfx/geometry/rect_conversions.h"
 #include "ui/gl/gl_switches.h"
@@ -73,11 +75,23 @@
   return occlusion_bounding_box;
 }
 
-void RecordDCLayerResult(DCLayerOverlayProcessor::DCLayerResult result) {
-  UMA_HISTOGRAM_ENUMERATION("GPU.DirectComposition.DCLayerResult", result,
-                            DCLayerOverlayProcessor::DC_LAYER_FAILED_MAX);
+void RecordDCLayerResult(DCLayerOverlayProcessor::DCLayerResult result,
+                         ui::ProtectedVideoType protected_video_type) {
+  switch (protected_video_type) {
+    case ui::ProtectedVideoType::kClear:
+      UMA_HISTOGRAM_ENUMERATION("GPU.DirectComposition.DCLayerResult2.Clear",
+                                result);
+      break;
+    case ui::ProtectedVideoType::kSoftwareProtected:
+      UMA_HISTOGRAM_ENUMERATION(
+          "GPU.DirectComposition.DCLayerResult2.SoftwareProtected", result);
+      break;
+    case ui::ProtectedVideoType::kHardwareProtected:
+      UMA_HISTOGRAM_ENUMERATION(
+          "GPU.DirectComposition.DCLayerResult2.HardwareProtected", result);
+      break;
+  }
 }
-
 }  // namespace
 
 DCLayerOverlay::DCLayerOverlay() : filter(GL_LINEAR) {}
@@ -86,7 +100,18 @@
 
 DCLayerOverlay::~DCLayerOverlay() {}
 
-DCLayerOverlayProcessor::DCLayerOverlayProcessor() = default;
+DCLayerOverlayProcessor::DCLayerOverlayProcessor(OutputSurface* surface) {
+#if defined(OS_WIN)
+  auto* context_provider = surface->context_provider();
+  if (context_provider) {
+    has_hw_overlay_support_ =
+        context_provider->ContextCapabilities().dc_layers &&
+        context_provider->ContextCapabilities().use_dc_overlays_for_video;
+  } else {
+    has_hw_overlay_support_ = false;
+  }
+#endif
+}
 
 DCLayerOverlayProcessor::~DCLayerOverlayProcessor() = default;
 
@@ -112,6 +137,14 @@
   if (result != DC_LAYER_SUCCESS)
     return result;
 
+  // To support software protected video on machines without hardware overlay
+  // capability. Don't do dc layer overlay if no hardware support.
+  if (!has_hw_overlay_support_ &&
+      dc_layer_overlay->protected_video_type !=
+          ui::ProtectedVideoType::kSoftwareProtected) {
+    return DC_LAYER_FAILED_NO_HW_OVERLAY_SUPPORT;
+  }
+
   scoped_refptr<DCLayerOverlaySharedState> overlay_shared_state(
       new DCLayerOverlaySharedState);
   overlay_shared_state->z_order = 1;
@@ -269,7 +302,7 @@
     DCLayerResult result = FromDrawQuad(resource_provider, display_rect,
                                         quad_list->begin(), it, &dc_layer);
     if (result != DC_LAYER_SUCCESS) {
-      RecordDCLayerResult(result);
+      RecordDCLayerResult(result, dc_layer.protected_video_type);
       continue;
     }
 
@@ -278,7 +311,8 @@
         !dc_layer.RequiresOverlay() &&
         !base::FeatureList::IsEnabled(
             features::kDirectCompositionComplexOverlays)) {
-      RecordDCLayerResult(DC_LAYER_FAILED_COMPLEX_TRANSFORM);
+      RecordDCLayerResult(DC_LAYER_FAILED_COMPLEX_TRANSFORM,
+                          dc_layer.protected_video_type);
       continue;
     }
 
@@ -325,7 +359,7 @@
           render_pass->transform_to_root_target, quad_rectangle);
       overlay_damage_rect->Union(rect_in_root);
 
-      RecordDCLayerResult(DC_LAYER_SUCCESS);
+      RecordDCLayerResult(DC_LAYER_SUCCESS, dc_layer.protected_video_type);
       dc_layer_overlays->push_back(dc_layer);
 
       // Only allow one overlay unless non-root overlays are enabled.
@@ -377,22 +411,26 @@
     DCLayerOverlay* dc_layer) {
   if (!dc_layer->RequiresOverlay()) {
     if (!base::FeatureList::IsEnabled(features::kDirectCompositionUnderlays)) {
-      RecordDCLayerResult(DC_LAYER_FAILED_OCCLUDED);
+      RecordDCLayerResult(DC_LAYER_FAILED_OCCLUDED,
+                          dc_layer->protected_video_type);
       return false;
     }
     if (!is_root && !base::FeatureList::IsEnabled(
                         features::kDirectCompositionNonrootOverlays)) {
-      RecordDCLayerResult(DC_LAYER_FAILED_NON_ROOT);
+      RecordDCLayerResult(DC_LAYER_FAILED_NON_ROOT,
+                          dc_layer->protected_video_type);
       return false;
     }
     if ((it->shared_quad_state->opacity < 1.0)) {
-      RecordDCLayerResult(DC_LAYER_FAILED_TRANSPARENT);
+      RecordDCLayerResult(DC_LAYER_FAILED_TRANSPARENT,
+                          dc_layer->protected_video_type);
       return false;
     }
     // Record this UMA only after we're absolutely sure this quad could be an
     // underlay.
     if (processed_overlay_in_frame_) {
-      RecordDCLayerResult(DC_LAYER_FAILED_TOO_MANY_OVERLAYS);
+      RecordDCLayerResult(DC_LAYER_FAILED_TOO_MANY_OVERLAYS,
+                          dc_layer->protected_video_type);
       return false;
     }
   }
diff --git a/components/viz/service/display/dc_layer_overlay.h b/components/viz/service/display/dc_layer_overlay.h
index fe8b4a6..47e135a 100644
--- a/components/viz/service/display/dc_layer_overlay.h
+++ b/components/viz/service/display/dc_layer_overlay.h
@@ -16,6 +16,7 @@
 
 namespace viz {
 class DisplayResourceProvider;
+class OutputSurface;
 
 class VIZ_SERVICE_EXPORT DCLayerOverlaySharedState
     : public base::RefCounted<DCLayerOverlaySharedState> {
@@ -99,10 +100,11 @@
     DC_LAYER_FAILED_TRANSPARENT,
     DC_LAYER_FAILED_NON_ROOT,
     DC_LAYER_FAILED_TOO_MANY_OVERLAYS,
-    DC_LAYER_FAILED_MAX,
+    DC_LAYER_FAILED_NO_HW_OVERLAY_SUPPORT,
+    kMaxValue = DC_LAYER_FAILED_NO_HW_OVERLAY_SUPPORT,
   };
 
-  DCLayerOverlayProcessor();
+  explicit DCLayerOverlayProcessor(OutputSurface* surface);
   ~DCLayerOverlayProcessor();
 
   void Process(DisplayResourceProvider* resource_provider,
@@ -115,6 +117,7 @@
     previous_frame_underlay_rect_ = gfx::Rect();
     previous_frame_underlay_occlusion_ = gfx::Rect();
   }
+  void SetHasHwOverlaySupport() { has_hw_overlay_support_ = true; }
 
  private:
   DCLayerResult FromDrawQuad(DisplayResourceProvider* resource_provider,
@@ -154,6 +157,7 @@
   gfx::Rect previous_frame_underlay_occlusion_;
   gfx::RectF previous_display_rect_;
   bool processed_overlay_in_frame_ = false;
+  bool has_hw_overlay_support_ = true;
 
   // Store information about clipped punch-through rects in target space for
   // non-root render passes. These rects are used to clear the corresponding
diff --git a/components/viz/service/display/gl_renderer_unittest.cc b/components/viz/service/display/gl_renderer_unittest.cc
index 35732a7..521882e 100644
--- a/components/viz/service/display/gl_renderer_unittest.cc
+++ b/components/viz/service/display/gl_renderer_unittest.cc
@@ -2842,6 +2842,7 @@
   TestOverlayProcessor* processor =
       new TestOverlayProcessor(output_surface.get());
   processor->Initialize();
+  processor->SetDCHasHwOverlaySupportForTesting();
   renderer.SetOverlayProcessor(processor);
   std::unique_ptr<DCLayerValidator> validator(new DCLayerValidator);
   output_surface->SetOverlayCandidateValidator(validator.get());
diff --git a/components/viz/service/display/overlay_processor.cc b/components/viz/service/display/overlay_processor.cc
index bc662fce..54069e5 100644
--- a/components/viz/service/display/overlay_processor.cc
+++ b/components/viz/service/display/overlay_processor.cc
@@ -51,7 +51,7 @@
 }
 
 OverlayProcessor::OverlayProcessor(OutputSurface* surface)
-    : surface_(surface) {}
+    : surface_(surface), dc_processor_(surface) {}
 
 void OverlayProcessor::Initialize() {
   DCHECK(surface_);
diff --git a/components/viz/service/display/overlay_processor.h b/components/viz/service/display/overlay_processor.h
index 14797b4..b78d721 100644
--- a/components/viz/service/display/overlay_processor.h
+++ b/components/viz/service/display/overlay_processor.h
@@ -88,6 +88,10 @@
       OverlayCandidate* primary,
       OverlayCandidateList* candidate_list);
 
+  void SetDCHasHwOverlaySupportForTesting() {
+    dc_processor_.SetHasHwOverlaySupport();
+  }
+
  protected:
   StrategyList strategies_;
   OutputSurface* surface_;
diff --git a/components/viz/service/display/overlay_unittest.cc b/components/viz/service/display/overlay_unittest.cc
index 411b85f..f16485f 100644
--- a/components/viz/service/display/overlay_unittest.cc
+++ b/components/viz/service/display/overlay_unittest.cc
@@ -558,6 +558,7 @@
     overlay_processor_ =
         std::make_unique<OverlayProcessor>(output_surface_.get());
     overlay_processor_->Initialize();
+    overlay_processor_->SetDCHasHwOverlaySupportForTesting();
   }
 
   void TearDown() override {
diff --git a/components/viz/service/display_embedder/gpu_display_provider.cc b/components/viz/service/display_embedder/gpu_display_provider.cc
index 77a6f56..8112603 100644
--- a/components/viz/service/display_embedder/gpu_display_provider.cc
+++ b/components/viz/service/display_embedder/gpu_display_provider.cc
@@ -24,6 +24,7 @@
 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
 #include "gpu/command_buffer/client/shared_memory_limits.h"
 #include "gpu/command_buffer/service/image_factory.h"
+#include "gpu/config/gpu_finch_features.h"
 #include "gpu/ipc/command_buffer_task_executor.h"
 #include "gpu/ipc/common/surface_handle.h"
 #include "gpu/ipc/service/gpu_channel_manager_delegate.h"
@@ -190,8 +191,12 @@
     } else {
 #if defined(OS_WIN)
       const auto& capabilities = context_provider->ContextCapabilities();
+      const bool use_overlays_for_sw_protected_video =
+          base::FeatureList::IsEnabled(
+              features::kUseDCOverlaysForSoftwareProtectedVideo);
       const bool use_overlays =
-          capabilities.dc_layers && capabilities.use_dc_overlays_for_video;
+          capabilities.dc_layers && (capabilities.use_dc_overlays_for_video ||
+                                     use_overlays_for_sw_protected_video);
       output_surface = std::make_unique<GLOutputSurfaceWin>(
           std::move(context_provider), synthetic_begin_frame_source,
           use_overlays);
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index c5c7097..e7eb3a2 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -543,6 +543,8 @@
     "browsing_data/clear_site_data_handler.h",
     "browsing_data/clear_site_data_throttle.cc",
     "browsing_data/clear_site_data_throttle.h",
+    "browsing_data/clear_site_data_utils.cc",
+    "browsing_data/clear_site_data_utils.h",
     "browsing_data/conditional_cache_deletion_helper.cc",
     "browsing_data/conditional_cache_deletion_helper.h",
     "browsing_data/storage_partition_code_cache_data_remover.cc",
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.h b/content/browser/accessibility/browser_accessibility_cocoa.h
index 7b1ae52..d38fa48 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.h
+++ b/content/browser/accessibility/browser_accessibility_cocoa.h
@@ -70,9 +70,10 @@
 // Determines if this object is alive, i.e. it hasn't been detached.
 - (BOOL)instanceActive;
 
-// Convert the local objet's origin to a global point.
-- (NSPoint)pointInScreen:(NSPoint)origin
-                    size:(NSSize)size;
+// Convert from the view's local coordinate system (with the origin in the upper
+// left) to the primary NSScreen coordinate system (with the origin in the lower
+// left).
+- (NSRect)rectInScreen:(gfx::Rect)rect;
 
 // Return the method name for the given attribute. For testing only.
 - (NSString*)methodNameForAttribute:(NSString*)attribute;
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
index 2823754b9..eba8565 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -31,6 +31,7 @@
 #include "ui/accessibility/ax_role_properties.h"
 #include "ui/accessibility/platform/ax_platform_node.h"
 #include "ui/base/cocoa/remote_accessibility_api.h"
+#include "ui/gfx/mac/coordinate_conversion.h"
 
 #import "ui/accessibility/platform/ax_platform_node_mac.h"
 
@@ -1325,8 +1326,9 @@
 - (NSString*)language {
   if (![self instanceActive])
     return nil;
-  return base::SysUTF8ToNSString(owner_->GetInheritedStringAttribute(
-      ax::mojom::StringAttribute::kLanguage));
+  ui::AXNode* node = owner_->node();
+  DCHECK(node);
+  return base::SysUTF8ToNSString(node->GetLanguage());
 }
 
 // private
@@ -1482,7 +1484,8 @@
     return nil;
   NSPoint origin = [self origin];
   NSSize size = [[self size] sizeValue];
-  NSPoint pointInScreen = [self pointInScreen:origin size:size];
+  NSPoint pointInScreen =
+      [self rectInScreen:gfx::Rect(gfx::Point(origin), gfx::Size(size))].origin;
   return [NSValue valueWithPoint:pointInScreen];
 }
 
@@ -1594,21 +1597,19 @@
 }
 
 // internal
-- (NSPoint)pointInScreen:(NSPoint)origin
-                    size:(NSSize)size {
+- (NSRect)rectInScreen:(gfx::Rect)rect {
   if (![self instanceActive])
-    return NSZeroPoint;
+    return NSZeroRect;
 
   // Get the delegate for the topmost BrowserAccessibilityManager, because
   // that's the only one that can convert points to their origin in the screen.
   BrowserAccessibilityDelegate* delegate =
       owner_->manager()->GetDelegateFromRootManager();
   if (delegate) {
-    gfx::Rect bounds(origin.x, origin.y, size.width, size.height);
-    gfx::Point point = delegate->AccessibilityOriginInScreen(bounds);
-    return NSMakePoint(point.x(), point.y());
+    return gfx::ScreenRectToNSRect(
+        rect + delegate->AccessibilityGetViewBounds().OffsetFromOrigin());
   } else {
-    return NSZeroPoint;
+    return NSZeroRect;
   }
 }
 
@@ -2613,11 +2614,7 @@
     NSRange range = [(NSValue*)parameter rangeValue];
     gfx::Rect rect =
         owner_->GetScreenBoundsForRange(range.location, range.length);
-    NSPoint origin = NSMakePoint(rect.x(), rect.y());
-    NSSize size = NSMakeSize(rect.width(), rect.height());
-    NSPoint pointInScreen = [self pointInScreen:origin size:size];
-    NSRect nsrect = NSMakeRect(
-        pointInScreen.x, pointInScreen.y, rect.width(), rect.height());
+    NSRect nsrect = [self rectInScreen:rect];
     return [NSValue valueWithRect:nsrect];
   }
 
@@ -2675,11 +2672,7 @@
 
     gfx::Rect rect = BrowserAccessibilityManager::GetPageBoundsForRange(
         *startObject, startOffset, *endObject, endOffset);
-    NSPoint origin = NSMakePoint(rect.x(), rect.y());
-    NSSize size = NSMakeSize(rect.width(), rect.height());
-    NSPoint pointInScreen = [self pointInScreen:origin size:size];
-    NSRect nsrect = NSMakeRect(
-        pointInScreen.x, pointInScreen.y, rect.width(), rect.height());
+    NSRect nsrect = [self rectInScreen:rect];
     return [NSValue valueWithRect:nsrect];
   }
 
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h
index 76aec4ce..7fccdb8f 100644
--- a/content/browser/accessibility/browser_accessibility_manager.h
+++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -73,8 +73,6 @@
   virtual void AccessibilityPerformAction(const ui::AXActionData& data) = 0;
   virtual bool AccessibilityViewHasFocus() const = 0;
   virtual gfx::Rect AccessibilityGetViewBounds() const = 0;
-  virtual gfx::Point AccessibilityOriginInScreen(
-      const gfx::Rect& bounds) const = 0;
   virtual float AccessibilityGetDeviceScaleFactor() const = 0;
   virtual void AccessibilityFatalError() = 0;
   virtual gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget() = 0;
diff --git a/content/browser/accessibility/browser_accessibility_manager_unittest.cc b/content/browser/accessibility/browser_accessibility_manager_unittest.cc
index c17ec5d..2896d8e 100644
--- a/content/browser/accessibility/browser_accessibility_manager_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_unittest.cc
@@ -61,10 +61,6 @@
   void AccessibilityPerformAction(const ui::AXActionData& data) override {}
   bool AccessibilityViewHasFocus() const override { return false; }
   gfx::Rect AccessibilityGetViewBounds() const override { return gfx::Rect(); }
-  gfx::Point AccessibilityOriginInScreen(
-      const gfx::Rect& bounds) const override {
-    return gfx::Point();
-  }
   float AccessibilityGetDeviceScaleFactor() const override { return 1.0f; }
   void AccessibilityFatalError() override { got_fatal_error_ = true; }
   gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget() override {
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index 2d06b7a9..5786547 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -140,6 +140,19 @@
         actual_contents, "\n",
         base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   }
+
+  void RunLanguageDetectionTest(const base::FilePath::CharType* file_path) {
+    base::FilePath test_path =
+        GetTestFilePath("accessibility", "language-detection");
+    {
+      base::ScopedAllowBlockingForTesting allow_blocking;
+      ASSERT_TRUE(base::PathExists(test_path)) << test_path.LossyDisplayName();
+    }
+    base::FilePath language_detection_file =
+        test_path.Append(base::FilePath(file_path));
+
+    RunTest(language_detection_file, "accessibility/language-detection");
+  }
 };
 
 void DumpAccessibilityTreeTest::AddDefaultFilters(
@@ -1896,4 +1909,9 @@
   RunRegressionTest(FILE_PATH_LITERAL("xml-in-iframe-crash.html"));
 }
 
+IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
+                       LanguageDetectionLangAttribute) {
+  RunLanguageDetectionTest(FILE_PATH_LITERAL("lang-attribute.html"));
+}
+
 }  // namespace content
diff --git a/content/browser/browsing_data/clear_site_data_handler.cc b/content/browser/browsing_data/clear_site_data_handler.cc
index 902c6b6..c00b371 100644
--- a/content/browser/browsing_data/clear_site_data_handler.cc
+++ b/content/browser/browsing_data/clear_site_data_handler.cc
@@ -10,6 +10,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "content/browser/browsing_data/clear_site_data_utils.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"
@@ -47,130 +48,6 @@
          static_cast<int>(clear_cache) * (1 << 2);
 }
 
-// Helper class to find the BrowserContext associated with the request and
-// requests the actual clearing of data for |origin|. The data types to be
-// deleted are determined by |clear_cookies|, |clear_storage|, and
-// |clear_cache|. |web_contents_getter| identifies the WebContents from which
-// the request originated.
-// TODO(crbug.com/876931): |SiteDataClearer| could be merged into
-// |ClearSiteDataHandler| to make things cleaner.
-class SiteDataClearer : public BrowsingDataRemover::Observer {
- public:
-  static void Run(
-      const base::RepeatingCallback<WebContents*()>& web_contents_getter,
-      const url::Origin& origin,
-      bool clear_cookies,
-      bool clear_storage,
-      bool clear_cache,
-      base::OnceClosure callback) {
-    WebContents* web_contents = web_contents_getter.Run();
-    if (!web_contents)
-      return;
-
-    (new SiteDataClearer(web_contents, origin, clear_cookies, clear_storage,
-                         clear_cache, std::move(callback)))
-        ->RunAndDestroySelfWhenDone();
-  }
-
- private:
-  SiteDataClearer(const WebContents* web_contents,
-                  const url::Origin& origin,
-                  bool clear_cookies,
-                  bool clear_storage,
-                  bool clear_cache,
-                  base::OnceClosure callback)
-      : origin_(origin),
-        clear_cookies_(clear_cookies),
-        clear_storage_(clear_storage),
-        clear_cache_(clear_cache),
-        callback_(std::move(callback)),
-        pending_task_count_(0),
-        remover_(nullptr),
-        scoped_observer_(this) {
-    remover_ = BrowserContext::GetBrowsingDataRemover(
-        web_contents->GetBrowserContext());
-    DCHECK(remover_);
-    scoped_observer_.Add(remover_);
-  }
-
-  ~SiteDataClearer() override {}
-
-  void RunAndDestroySelfWhenDone() {
-    // Cookies and channel IDs are scoped to
-    // a) eTLD+1 of |origin|'s host if |origin|'s host is a registrable domain
-    //    or a subdomain thereof
-    // b) |origin|'s host exactly if it is an IP address or an internal hostname
-    //    (e.g. "localhost" or "fileserver").
-    // TODO(msramek): What about plugin data?
-    if (clear_cookies_) {
-      std::string domain = GetDomainAndRegistry(
-          origin_.host(),
-          net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
-
-      if (domain.empty())
-        domain = origin_.host();  // IP address or internal hostname.
-
-      std::unique_ptr<BrowsingDataFilterBuilder> domain_filter_builder(
-          BrowsingDataFilterBuilder::Create(
-              BrowsingDataFilterBuilder::WHITELIST));
-      domain_filter_builder->AddRegisterableDomain(domain);
-
-      pending_task_count_++;
-      remover_->RemoveWithFilterAndReply(
-          base::Time(), base::Time::Max(),
-          BrowsingDataRemover::DATA_TYPE_COOKIES |
-              BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS |
-              BrowsingDataRemover::DATA_TYPE_AVOID_CLOSING_CONNECTIONS,
-          BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB |
-              BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB,
-          std::move(domain_filter_builder), this);
-    }
-
-    // Delete origin-scoped data.
-    int remove_mask = 0;
-    if (clear_storage_)
-      remove_mask |= BrowsingDataRemover::DATA_TYPE_DOM_STORAGE;
-    if (clear_cache_)
-      remove_mask |= BrowsingDataRemover::DATA_TYPE_CACHE;
-
-    if (remove_mask) {
-      std::unique_ptr<BrowsingDataFilterBuilder> origin_filter_builder(
-          BrowsingDataFilterBuilder::Create(
-              BrowsingDataFilterBuilder::WHITELIST));
-      origin_filter_builder->AddOrigin(origin_);
-
-      pending_task_count_++;
-      remover_->RemoveWithFilterAndReply(
-          base::Time(), base::Time::Max(), remove_mask,
-          BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB |
-              BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB,
-          std::move(origin_filter_builder), this);
-    }
-
-    DCHECK_GT(pending_task_count_, 0);
-  }
-
-  // BrowsingDataRemover::Observer:
-  void OnBrowsingDataRemoverDone() override {
-    DCHECK(pending_task_count_);
-    if (--pending_task_count_)
-      return;
-
-    std::move(callback_).Run();
-    delete this;
-  }
-
-  url::Origin origin_;
-  bool clear_cookies_;
-  bool clear_storage_;
-  bool clear_cache_;
-  base::OnceClosure callback_;
-  int pending_task_count_;
-  BrowsingDataRemover* remover_;
-  ScopedObserver<BrowsingDataRemover, BrowsingDataRemover::Observer>
-      scoped_observer_;
-};
-
 // Outputs a single |formatted_message| on the UI thread.
 void OutputFormattedMessage(WebContents* web_contents,
                             ConsoleMessageLevel level,
@@ -415,8 +292,9 @@
                                                bool clear_storage,
                                                bool clear_cache,
                                                base::OnceClosure callback) {
-  SiteDataClearer::Run(web_contents_getter_, origin, clear_cookies,
-                       clear_storage, clear_cache, std::move(callback));
+  clear_site_data_utils::ClearSiteData(web_contents_getter_, origin,
+                                       clear_cookies, clear_storage,
+                                       clear_cache, std::move(callback));
 }
 
 // static
diff --git a/content/browser/browsing_data/clear_site_data_handler_browsertest.cc b/content/browser/browsing_data/clear_site_data_handler_browsertest.cc
index f23843df..f7a5ee6 100644
--- a/content/browser/browsing_data/clear_site_data_handler_browsertest.cc
+++ b/content/browser/browsing_data/clear_site_data_handler_browsertest.cc
@@ -365,6 +365,19 @@
 
   net::EmbeddedTestServer* https_server() { return https_server_.get(); }
 
+  // Set a Clear-Site-Data header that |HandleRequest| will use for every
+  // following request.
+  void SetClearSiteDataHeader(const std::string& header) {
+    clear_site_data_header_ = header;
+  }
+
+  bool RunScriptAndGetBool(const std::string& script) {
+    bool data;
+    EXPECT_TRUE(content::ExecuteScriptAndExtractBool(shell()->web_contents(),
+                                                     script, &data));
+    return data;
+  }
+
  private:
   // Handles all requests.
   //
@@ -394,6 +407,9 @@
     std::unique_ptr<net::test_server::BasicHttpResponse> response(
         new net::test_server::BasicHttpResponse());
 
+    if (!clear_site_data_header_.empty())
+      response->AddCustomHeader("Clear-Site-Data", clear_site_data_header_);
+
     std::string value;
     if (net::GetValueForKeyInQuery(request.GetURL(), "header", &value))
       response->AddCustomHeader("Clear-Site-Data", value);
@@ -489,6 +505,9 @@
   // We can only use |MockCertVerifier| when Network Service was enabled.
   bool is_network_service_enabled_ = false;
 
+  // If this is set, |HandleRequest| will always respond with Clear-Site-Data.
+  std::string clear_site_data_header_;
+
   // Only used when |is_network_service_enabled_| is false.
   std::unique_ptr<CacheTestUtil> cache_test_util_ = nullptr;
 
@@ -978,4 +997,40 @@
   shell()->Close();
 }
 
+// Tests that sending Clear-Site-Data during a service worker installation
+// doesn't fail. (see crbug.com/898465)
+IN_PROC_BROWSER_TEST_F(ClearSiteDataHandlerBrowserTest,
+                       ClearSiteDataDuringServiceWorkerInstall) {
+  GURL url = embedded_test_server()->GetURL("127.0.0.1", "/");
+  AddQuery(&url, "file", "worker_test.html");
+  NavigateToURL(shell(), url);
+  // TODO(crbug.com/898465): Fix and enable expectation for storage deletion.
+  // delegate()->ExpectClearSiteDataCall(url::Origin::Create(url), false, true,
+  // false);
+  SetClearSiteDataHeader("\"storage\"");
+  EXPECT_TRUE(RunScriptAndGetBool("installServiceWorker()"));
+  delegate()->VerifyAndClearExpectations();
+  EXPECT_TRUE(RunScriptAndGetBool("hasServiceWorker()"));
+}
+
+// Tests that sending Clear-Site-Data during a service worker update
+// doesn't fail. (see crbug.com/898465)
+IN_PROC_BROWSER_TEST_F(ClearSiteDataHandlerBrowserTest,
+                       ClearSiteDataDuringServiceWorkerUpdate) {
+  GURL url = embedded_test_server()->GetURL("127.0.0.1", "/");
+  AddQuery(&url, "file", "worker_test.html");
+  NavigateToURL(shell(), url);
+  // Install a service worker.
+  EXPECT_TRUE(RunScriptAndGetBool("installServiceWorker()"));
+  delegate()->VerifyAndClearExpectations();
+  // Update the service worker and send C-S-D during update.
+  SetClearSiteDataHeader("\"storage\"");
+  EXPECT_TRUE(RunScriptAndGetBool("updateServiceWorker()"));
+  // TODO(crbug.com/898465): Fix and enable expectation for storage deletion.
+  // delegate()->ExpectClearSiteDataCall(url::Origin::Create(url), false, true,
+  // false);
+  delegate()->VerifyAndClearExpectations();
+  EXPECT_TRUE(RunScriptAndGetBool("hasServiceWorker()"));
+}
+
 }  // namespace content
diff --git a/content/browser/browsing_data/clear_site_data_throttle.cc b/content/browser/browsing_data/clear_site_data_throttle.cc
index d1a6df3..e5421a4 100644
--- a/content/browser/browsing_data/clear_site_data_throttle.cc
+++ b/content/browser/browsing_data/clear_site_data_throttle.cc
@@ -13,19 +13,17 @@
 #include "base/strings/stringprintf.h"
 #include "base/task/post_task.h"
 #include "base/values.h"
+#include "content/browser/browsing_data/clear_site_data_utils.h"
 #include "content/browser/service_worker/service_worker_response_info.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
-#include "content/public/browser/browsing_data_filter_builder.h"
-#include "content/public/browser/browsing_data_remover.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/common/origin_util.h"
 #include "content/public/common/resource_type.h"
 #include "net/base/load_flags.h"
-#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
 #include "net/http/http_response_headers.h"
 #include "net/url_request/redirect_info.h"
 #include "services/network/public/cpp/resource_response_info.h"
@@ -77,134 +75,6 @@
   base::PostTaskWithTraits(FROM_HERE, {BrowserThread::IO}, std::move(callback));
 }
 
-// Finds the BrowserContext associated with the request and requests
-// the actual clearing of data for |origin|. The data types to be deleted
-// are determined by |clear_cookies|, |clear_storage|, and |clear_cache|.
-// |web_contents_getter| identifies the WebContents from which the request
-// originated. Must be run on the UI thread. The |callback| will be executed
-// on the IO thread.
-class UIThreadSiteDataClearer : public BrowsingDataRemover::Observer {
- public:
-  static void Run(
-      const ResourceRequestInfo::WebContentsGetter& web_contents_getter,
-      const url::Origin& origin,
-      bool clear_cookies,
-      bool clear_storage,
-      bool clear_cache,
-      base::OnceClosure callback) {
-    WebContents* web_contents = web_contents_getter.Run();
-    if (!web_contents)
-      return;
-
-    (new UIThreadSiteDataClearer(web_contents, origin, clear_cookies,
-                                 clear_storage, clear_cache,
-                                 std::move(callback)))
-        ->RunAndDestroySelfWhenDone();
-  }
-
- private:
-  UIThreadSiteDataClearer(const WebContents* web_contents,
-                          const url::Origin& origin,
-                          bool clear_cookies,
-                          bool clear_storage,
-                          bool clear_cache,
-                          base::OnceClosure callback)
-      : origin_(origin),
-        clear_cookies_(clear_cookies),
-        clear_storage_(clear_storage),
-        clear_cache_(clear_cache),
-        callback_(std::move(callback)),
-        pending_task_count_(0),
-        remover_(nullptr),
-        scoped_observer_(this) {
-    DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
-    remover_ = BrowserContext::GetBrowsingDataRemover(
-        web_contents->GetBrowserContext());
-    DCHECK(remover_);
-    scoped_observer_.Add(remover_);
-  }
-
-  ~UIThreadSiteDataClearer() override {}
-
-  void RunAndDestroySelfWhenDone() {
-    DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
-    // Cookies and channel IDs are scoped to
-    // a) eTLD+1 of |origin|'s host if |origin|'s host is a registrable domain
-    //    or a subdomain thereof
-    // b) |origin|'s host exactly if it is an IP address or an internal hostname
-    //    (e.g. "localhost" or "fileserver").
-    // TODO(msramek): What about plugin data?
-    if (clear_cookies_) {
-      std::string domain = GetDomainAndRegistry(
-          origin_.host(),
-          net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
-
-      if (domain.empty())
-        domain = origin_.host();  // IP address or internal hostname.
-
-      std::unique_ptr<BrowsingDataFilterBuilder> domain_filter_builder(
-          BrowsingDataFilterBuilder::Create(
-              BrowsingDataFilterBuilder::WHITELIST));
-      domain_filter_builder->AddRegisterableDomain(domain);
-
-      pending_task_count_++;
-      remover_->RemoveWithFilterAndReply(
-          base::Time(), base::Time::Max(),
-          BrowsingDataRemover::DATA_TYPE_COOKIES |
-              BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS |
-              BrowsingDataRemover::DATA_TYPE_AVOID_CLOSING_CONNECTIONS,
-          BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB |
-              BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB,
-          std::move(domain_filter_builder), this);
-    }
-
-    // Delete origin-scoped data.
-    int remove_mask = 0;
-    if (clear_storage_)
-      remove_mask |= BrowsingDataRemover::DATA_TYPE_DOM_STORAGE;
-    if (clear_cache_)
-      remove_mask |= BrowsingDataRemover::DATA_TYPE_CACHE;
-
-    if (remove_mask) {
-      std::unique_ptr<BrowsingDataFilterBuilder> origin_filter_builder(
-          BrowsingDataFilterBuilder::Create(
-              BrowsingDataFilterBuilder::WHITELIST));
-      origin_filter_builder->AddOrigin(origin_);
-
-      pending_task_count_++;
-      remover_->RemoveWithFilterAndReply(
-          base::Time(), base::Time::Max(), remove_mask,
-          BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB |
-              BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB,
-          std::move(origin_filter_builder), this);
-    }
-
-    DCHECK_GT(pending_task_count_, 0);
-  }
-
-  // BrowsingDataRemover::Observer:
-  void OnBrowsingDataRemoverDone() override {
-    DCHECK(pending_task_count_);
-    if (--pending_task_count_)
-      return;
-
-    JumpFromUIToIOThread(std::move(callback_));
-    delete this;
-  }
-
-  url::Origin origin_;
-  bool clear_cookies_;
-  bool clear_storage_;
-  bool clear_cache_;
-  base::OnceClosure callback_;
-  int pending_task_count_;
-  BrowsingDataRemover* remover_;
-  ScopedObserver<BrowsingDataRemover, BrowsingDataRemover::Observer>
-      scoped_observer_;
-};
-
 // Outputs a single |formatted_message| on the UI thread.
 void OutputFormattedMessage2(WebContents* web_contents,
                              ConsoleMessageLevel level,
@@ -527,11 +397,12 @@
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   base::PostTaskWithTraits(
       FROM_HERE, {BrowserThread::UI},
-      base::BindOnce(&UIThreadSiteDataClearer::Run,
-                     ResourceRequestInfo::ForRequest(request_)
-                         ->GetWebContentsGetterForRequest(),
-                     origin, clear_cookies, clear_storage, clear_cache,
-                     std::move(callback)));
+      base::BindOnce(
+          &clear_site_data_utils::ClearSiteData,
+          ResourceRequestInfo::ForRequest(request_)
+              ->GetWebContentsGetterForRequest(),
+          origin, clear_cookies, clear_storage, clear_cache,
+          base::BindOnce(&JumpFromUIToIOThread, std::move(callback))));
 }
 
 void ClearSiteDataThrottle::TaskFinished() {
diff --git a/content/browser/browsing_data/clear_site_data_utils.cc b/content/browser/browsing_data/clear_site_data_utils.cc
new file mode 100644
index 0000000..d10b4d9
--- /dev/null
+++ b/content/browser/browsing_data/clear_site_data_utils.cc
@@ -0,0 +1,150 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/browsing_data/clear_site_data_throttle.h"
+
+#include "base/scoped_observer.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/browsing_data_filter_builder.h"
+#include "content/public/browser/browsing_data_remover.h"
+#include "content/public/browser/web_contents.h"
+#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
+
+namespace content {
+namespace clear_site_data_utils {
+
+namespace {
+
+// Finds the BrowserContext associated with the request and requests
+// the actual clearing of data for |origin|. The data types to be deleted
+// are determined by |clear_cookies|, |clear_storage|, and |clear_cache|.
+// |web_contents_getter| identifies the WebContents from which the request
+// originated. Must be run on the UI thread. The |callback| will be executed
+// on the IO thread.
+class SiteDataClearer : public BrowsingDataRemover::Observer {
+ public:
+  SiteDataClearer(BrowserContext* browser_context,
+                  const url::Origin& origin,
+                  bool clear_cookies,
+                  bool clear_storage,
+                  bool clear_cache,
+                  base::OnceClosure callback)
+      : origin_(origin),
+        clear_cookies_(clear_cookies),
+        clear_storage_(clear_storage),
+        clear_cache_(clear_cache),
+        callback_(std::move(callback)),
+        pending_task_count_(0),
+        remover_(nullptr),
+        scoped_observer_(this) {
+    remover_ = BrowserContext::GetBrowsingDataRemover(browser_context);
+    DCHECK(remover_);
+    scoped_observer_.Add(remover_);
+  }
+
+  ~SiteDataClearer() override {}
+
+  void RunAndDestroySelfWhenDone() {
+    DCHECK_CURRENTLY_ON(BrowserThread::UI);
+    // Cookies and channel IDs are scoped to
+    // a) eTLD+1 of |origin|'s host if |origin|'s host is a registrable domain
+    //    or a subdomain thereof
+    // b) |origin|'s host exactly if it is an IP address or an internal hostname
+    //    (e.g. "localhost" or "fileserver").
+    // TODO(msramek): What about plugin data?
+    if (clear_cookies_) {
+      std::string domain = GetDomainAndRegistry(
+          origin_.host(),
+          net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
+
+      if (domain.empty())
+        domain = origin_.host();  // IP address or internal hostname.
+
+      std::unique_ptr<BrowsingDataFilterBuilder> domain_filter_builder(
+          BrowsingDataFilterBuilder::Create(
+              BrowsingDataFilterBuilder::WHITELIST));
+      domain_filter_builder->AddRegisterableDomain(domain);
+
+      pending_task_count_++;
+      remover_->RemoveWithFilterAndReply(
+          base::Time(), base::Time::Max(),
+          BrowsingDataRemover::DATA_TYPE_COOKIES |
+              BrowsingDataRemover::DATA_TYPE_CHANNEL_IDS |
+              BrowsingDataRemover::DATA_TYPE_AVOID_CLOSING_CONNECTIONS,
+          BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB |
+              BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB,
+          std::move(domain_filter_builder), this);
+    }
+
+    // Delete origin-scoped data.
+    int remove_mask = 0;
+    if (clear_storage_)
+      remove_mask |= BrowsingDataRemover::DATA_TYPE_DOM_STORAGE;
+    if (clear_cache_)
+      remove_mask |= BrowsingDataRemover::DATA_TYPE_CACHE;
+
+    if (remove_mask) {
+      std::unique_ptr<BrowsingDataFilterBuilder> origin_filter_builder(
+          BrowsingDataFilterBuilder::Create(
+              BrowsingDataFilterBuilder::WHITELIST));
+      origin_filter_builder->AddOrigin(origin_);
+
+      pending_task_count_++;
+      remover_->RemoveWithFilterAndReply(
+          base::Time(), base::Time::Max(), remove_mask,
+          BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB |
+              BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB,
+          std::move(origin_filter_builder), this);
+    }
+
+    DCHECK_GT(pending_task_count_, 0);
+  }
+
+ private:
+  // BrowsingDataRemover::Observer:
+  void OnBrowsingDataRemoverDone() override {
+    DCHECK(pending_task_count_);
+    if (--pending_task_count_)
+      return;
+
+    std::move(callback_).Run();
+    delete this;
+  }
+
+  url::Origin origin_;
+  bool clear_cookies_;
+  bool clear_storage_;
+  bool clear_cache_;
+  base::OnceClosure callback_;
+  int pending_task_count_;
+  BrowsingDataRemover* remover_;
+  ScopedObserver<BrowsingDataRemover, BrowsingDataRemover::Observer>
+      scoped_observer_;
+};
+
+}  // namespace
+
+void ClearSiteData(
+    const ResourceRequestInfo::WebContentsGetter& web_contents_getter,
+    const url::Origin& origin,
+    bool clear_cookies,
+    bool clear_storage,
+    bool clear_cache,
+    base::OnceClosure callback) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  WebContents* web_contents = web_contents_getter.Run();
+  // TODO(crbug.com/898465): Fix Clear-Site-Data for requests without
+  // WebContents. (E.g. service worker updates)
+  if (!web_contents) {
+    std::move(callback).Run();
+    return;
+  }
+  (new SiteDataClearer(web_contents->GetBrowserContext(), origin, clear_cookies,
+                       clear_storage, clear_cache, std::move(callback)))
+      ->RunAndDestroySelfWhenDone();
+}
+
+}  // namespace clear_site_data_utils
+}  // namespace content
diff --git a/content/browser/browsing_data/clear_site_data_utils.h b/content/browser/browsing_data/clear_site_data_utils.h
new file mode 100644
index 0000000..8f7eef7
--- /dev/null
+++ b/content/browser/browsing_data/clear_site_data_utils.h
@@ -0,0 +1,34 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_BROWSING_DATA_CLEAR_SITE_DATA_UTILS_H_
+#define CONTENT_BROWSER_BROWSING_DATA_CLEAR_SITE_DATA_UTILS_H_
+
+#include "base/callback_forward.h"
+#include "content/public/browser/resource_request_info.h"
+
+namespace url {
+class Origin;
+}
+
+namespace content {
+namespace clear_site_data_utils {
+
+// Removes browsing data associated with |origin| when the Clear-Site-Data
+// header is sent.
+// Has to be called on the UI thread and will execute |callback| on the UI
+// thread when done.
+// TODO(dullweber): Consider merging back when network service is shipped.
+void ClearSiteData(
+    const ResourceRequestInfo::WebContentsGetter& web_contents_getter,
+    const url::Origin& origin,
+    bool clear_cookies,
+    bool clear_storage,
+    bool clear_cache,
+    base::OnceClosure callback);
+
+}  // namespace clear_site_data_utils
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_BROWSING_DATA_CLEAR_SITE_DATA_UTILS_H_
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc
index 8d7fb6cf..97d3236b 100644
--- a/content/browser/compositor/gpu_process_transport_factory.cc
+++ b/content/browser/compositor/gpu_process_transport_factory.cc
@@ -58,6 +58,7 @@
 #include "gpu/command_buffer/common/mailbox.h"
 #include "gpu/config/gpu_driver_bug_workaround_type.h"
 #include "gpu/config/gpu_feature_info.h"
+#include "gpu/config/gpu_finch_features.h"
 #include "gpu/ipc/client/gpu_channel_host.h"
 #include "gpu/ipc/host/gpu_memory_buffer_support.h"
 #include "gpu/vulkan/buildflags.h"
@@ -125,6 +126,17 @@
 // from RenderWidgetHostImpl.
 constexpr uint32_t kDefaultClientId = 0u;
 
+// Id used in creating ContextProviderCommandBuffer.
+constexpr int32_t kStreamId = content::kGpuStreamIdDefault;
+
+// Url identity supplied to ContextProviderCommandBuffer.
+constexpr char kIdentityUrl[] =
+    "chrome://gpu/GpuProcessTransportFactory::CreateContextCommon";
+
+// All browser contexts get the same stream id and priority.
+constexpr gpu::SchedulingPriority kStreamPriority =
+    content::kGpuStreamPriorityUI;
+
 #if defined(OS_MACOSX)
 bool IsCALayersDisabledFromCommandLine() {
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
@@ -132,14 +144,6 @@
 }
 #endif
 
-bool CheckWorkerContextLost(viz::RasterContextProvider* context_provider) {
-  if (!context_provider)
-    return false;
-
-  viz::RasterContextProvider::ScopedRasterContextLock lock(context_provider);
-  return lock.RasterInterface()->GetGraphicsResetStatusKHR() != GL_NO_ERROR;
-}
-
 }  // namespace
 
 namespace content {
@@ -169,6 +173,11 @@
       renderer_settings_(viz::CreateRendererSettings()),
       resize_task_runner_(std::move(resize_task_runner)),
       task_graph_runner_(new cc::SingleThreadTaskGraphRunner),
+      shared_worker_context_provider_factory_(
+          kStreamId,
+          kStreamPriority,
+          GURL(kIdentityUrl),
+          ws::command_buffer_metrics::ContextType::BROWSER_WORKER),
       gpu_channel_factory_(gpu_channel_factory),
       compositing_mode_reporter_(compositing_mode_reporter),
       server_shared_bitmap_manager_(server_shared_bitmap_manager),
@@ -373,41 +382,26 @@
 
   if (!use_gpu_compositing || use_vulkan) {
     // If not using GL compositing, don't keep the old shared worker context.
-    shared_worker_context_provider_ = nullptr;
+    shared_worker_context_provider_factory_.Reset();
   } else if (!gpu_channel_host) {
     // Failed to establish a channel, which is a fatal error, so stop trying to
     // use gpu compositing.
     use_gpu_compositing = false;
-    shared_worker_context_provider_ = nullptr;
+    shared_worker_context_provider_factory_.Reset();
   } else {
-    // Drop the old shared worker context if it was lost.
-    if (CheckWorkerContextLost(shared_worker_context_provider_.get()))
-      shared_worker_context_provider_ = nullptr;
-
-    if (!shared_worker_context_provider_) {
-      const bool need_alpha_channel = false;
-      const bool support_locking = true;
-      const bool support_gles2_interface =
-          features::IsUiGpuRasterizationEnabled();
-      const bool support_raster_interface = true;
-      const bool support_grcontext = features::IsUiGpuRasterizationEnabled();
-      shared_worker_context_provider_ = CreateContextCommon(
-          gpu_channel_host, gpu::kNullSurfaceHandle, need_alpha_channel,
-          false /* support_stencil */, support_locking, support_gles2_interface,
-          support_raster_interface, support_grcontext,
-          ws::command_buffer_metrics::ContextType::BROWSER_WORKER);
-      auto result = shared_worker_context_provider_->BindToCurrentThread();
-      if (result != gpu::ContextResult::kSuccess) {
-        shared_worker_context_provider_ = nullptr;
-        if (gpu::IsFatalOrSurfaceFailure(result))
-          use_gpu_compositing = false;
-      }
+    auto shared_worker_validate_result =
+        shared_worker_context_provider_factory_.Validate(
+            gpu_channel_host, GetGpuMemoryBufferManager());
+    if (shared_worker_validate_result != gpu::ContextResult::kSuccess) {
+      shared_worker_context_provider_factory_.Reset();
+      if (gpu::IsFatalOrSurfaceFailure(shared_worker_validate_result))
+        use_gpu_compositing = false;
     }
 
     // The |context_provider| is used for both the browser compositor and the
     // display compositor. If we failed to make a worker context, just start
     // over and try again.
-    if (shared_worker_context_provider_) {
+    if (shared_worker_context_provider()) {
       // For mus, we create an offscreen context for a mus window, and we will
       // use CommandBufferProxyImpl::TakeFrontBuffer() to take the context's
       // front buffer into a mailbox, insert a sync token, and send the
@@ -436,7 +430,7 @@
   }
 
   bool gpu_compositing_ready =
-      use_vulkan || (context_provider && shared_worker_context_provider_);
+      use_vulkan || (context_provider && shared_worker_context_provider());
   UMA_HISTOGRAM_BOOLEAN("Aura.CreatedGpuBrowserCompositor",
                         gpu_compositing_ready);
   if (!gpu_compositing_ready) {
@@ -451,7 +445,7 @@
     // Try again if we didn't give up on gpu. Otherwise, drop the shared context
     // if it exists and won't be used.
     if (!use_gpu_compositing) {
-      shared_worker_context_provider_ = nullptr;
+      shared_worker_context_provider_factory_.Reset();
     } else {
       gpu_channel_factory_->EstablishGpuChannel(base::BindOnce(
           &GpuProcessTransportFactory::EstablishedGpuChannel,
@@ -526,7 +520,11 @@
       } else {
         std::unique_ptr<viz::CompositorOverlayCandidateValidator> validator;
 #if defined(OS_WIN)
-        if (capabilities.dc_layers && capabilities.use_dc_overlays_for_video)
+        const bool use_overlays_for_sw_protected_video =
+            base::FeatureList::IsEnabled(
+                features::kUseDCOverlaysForSoftwareProtectedVideo);
+        if (capabilities.dc_layers && (capabilities.use_dc_overlays_for_video ||
+                                       use_overlays_for_sw_protected_video))
           validator = CreateOverlayCandidateValidator(compositor->widget());
 #elif !defined(OS_MACOSX)
         // Overlays are only supported on surfaceless output surfaces on Mac.
@@ -620,7 +618,7 @@
   auto layer_tree_frame_sink = std::make_unique<viz::DirectLayerTreeFrameSink>(
       compositor->frame_sink_id(), GetHostFrameSinkManager(),
       GetFrameSinkManager(), data->display.get(), data->display_client.get(),
-      context_provider, shared_worker_context_provider_,
+      context_provider, shared_worker_context_provider(),
       compositor->task_runner(), GetGpuMemoryBufferManager(),
       features::IsVizHitTestingEnabled());
   data->display->Resize(compositor->size());
@@ -930,6 +928,11 @@
   return shared_main_thread_contexts_;
 }
 
+scoped_refptr<viz::RasterContextProvider>
+GpuProcessTransportFactory::shared_worker_context_provider() {
+  return shared_worker_context_provider_factory_.provider();
+}
+
 GpuProcessTransportFactory::PerCompositorData*
 GpuProcessTransportFactory::CreatePerCompositorData(
     ui::Compositor* compositor) {
@@ -1020,10 +1023,6 @@
   DCHECK(gpu_channel_host);
   DCHECK(!is_gpu_compositing_disabled_);
 
-  // All browser contexts get the same stream id and priority.
-  int32_t stream_id = content::kGpuStreamIdDefault;
-  gpu::SchedulingPriority stream_priority = content::kGpuStreamPriorityUI;
-
   // This is called from a few places to create different contexts:
   // - The shared main thread context (offscreen).
   // - The compositor context, which is used by the browser compositor
@@ -1055,11 +1054,10 @@
 
   constexpr bool automatic_flushes = false;
 
-  GURL url("chrome://gpu/GpuProcessTransportFactory::CreateContextCommon");
   return base::MakeRefCounted<ws::ContextProviderCommandBuffer>(
-      std::move(gpu_channel_host), GetGpuMemoryBufferManager(), stream_id,
-      stream_priority, surface_handle, url, automatic_flushes, support_locking,
-      support_grcontext, memory_limits, attributes, type);
+      std::move(gpu_channel_host), GetGpuMemoryBufferManager(), kStreamId,
+      kStreamPriority, surface_handle, GURL(kIdentityUrl), automatic_flushes,
+      support_locking, support_grcontext, memory_limits, attributes, type);
 }
 
 }  // namespace content
diff --git a/content/browser/compositor/gpu_process_transport_factory.h b/content/browser/compositor/gpu_process_transport_factory.h
index 30573bc3..5653f31 100644
--- a/content/browser/compositor/gpu_process_transport_factory.h
+++ b/content/browser/compositor/gpu_process_transport_factory.h
@@ -24,6 +24,7 @@
 #include "gpu/ipc/client/gpu_channel_host.h"
 #include "gpu/vulkan/buildflags.h"
 #include "services/ws/public/cpp/gpu/command_buffer_metrics.h"
+#include "services/ws/public/cpp/gpu/shared_worker_context_provider_factory.h"
 #include "ui/compositor/compositor.h"
 
 namespace base {
@@ -43,10 +44,10 @@
 namespace viz {
 class CompositingModeReporterImpl;
 class OutputDeviceBacking;
+class RasterContextProvider;
 class ServerSharedBitmapManager;
 class SoftwareOutputDevice;
 class VulkanInProcessContextProvider;
-class RasterContextProvider;
 }
 
 namespace ws {
@@ -112,6 +113,8 @@
  private:
   struct PerCompositorData;
 
+  scoped_refptr<viz::RasterContextProvider> shared_worker_context_provider();
+
   PerCompositorData* CreatePerCompositorData(ui::Compositor* compositor);
   std::unique_ptr<viz::SoftwareOutputDevice> CreateSoftwareOutputDevice(
       gfx::AcceleratedWidget widget,
@@ -165,7 +168,8 @@
   base::ObserverList<ui::ContextFactoryObserver>::Unchecked observer_list_;
   scoped_refptr<base::SingleThreadTaskRunner> resize_task_runner_;
   std::unique_ptr<cc::SingleThreadTaskGraphRunner> task_graph_runner_;
-  scoped_refptr<viz::RasterContextProvider> shared_worker_context_provider_;
+  ws::SharedWorkerContextProviderFactory
+      shared_worker_context_provider_factory_;
 
   bool is_gpu_compositing_disabled_ = false;
   bool disable_frame_rate_limit_ = false;
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 3c9de03..7d5eda90 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1446,15 +1446,6 @@
   return gfx::Rect();
 }
 
-gfx::Point RenderFrameHostImpl::AccessibilityOriginInScreen(
-    const gfx::Rect& bounds) const {
-  RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
-      render_view_host_->GetWidget()->GetView());
-  if (view)
-    return view->AccessibilityOriginInScreen(bounds);
-  return gfx::Point();
-}
-
 float RenderFrameHostImpl::AccessibilityGetDeviceScaleFactor() const {
   RenderWidgetHostView* view = render_view_host_->GetWidget()->GetView();
   if (view)
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index d764b5224..3eec166 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -273,8 +273,6 @@
   void AccessibilityPerformAction(const ui::AXActionData& data) override;
   bool AccessibilityViewHasFocus() const override;
   gfx::Rect AccessibilityGetViewBounds() const override;
-  gfx::Point AccessibilityOriginInScreen(
-      const gfx::Rect& bounds) const override;
   float AccessibilityGetDeviceScaleFactor() const override;
   void AccessibilityFatalError() override;
   gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget() override;
diff --git a/content/browser/loader/cors_origin_access_list_browsertest.cc b/content/browser/loader/cors_origin_access_list_browsertest.cc
index 104c199..aa22806 100644
--- a/content/browser/loader/cors_origin_access_list_browsertest.cc
+++ b/content/browser/loader/cors_origin_access_list_browsertest.cc
@@ -32,6 +32,11 @@
 
 namespace {
 
+const auto kAllowSubdomains =
+    network::mojom::CorsOriginAccessMatchMode::kAllowSubdomains;
+const auto kDisallowSubdomains =
+    network::mojom::CorsOriginAccessMatchMode::kDisallowSubdomains;
+
 const char kTestPath[] = "/loader/cors_origin_access_list_test.html";
 
 const char kTestHost[] = "crossorigin.example.com";
@@ -101,10 +106,10 @@
 
   void SetAllowList(const std::string& scheme,
                     const std::string& host,
-                    bool allow_subdomains) {
+                    network::mojom::CorsOriginAccessMatchMode mode) {
     std::vector<network::mojom::CorsOriginPatternPtr> list1;
     list1.push_back(network::mojom::CorsOriginPattern::New(
-        scheme, host, allow_subdomains,
+        scheme, host, mode,
         network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority));
     bool first_list_done = false;
     BrowserContext::SetCorsOriginAccessListsForOrigin(
@@ -116,7 +121,7 @@
 
     std::vector<network::mojom::CorsOriginPatternPtr> list2;
     list2.push_back(network::mojom::CorsOriginPattern::New(
-        scheme, host, allow_subdomains,
+        scheme, host, mode,
         network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority));
     bool second_list_done = false;
     BrowserContext::SetCorsOriginAccessListsForOrigin(
@@ -162,7 +167,7 @@
 
 // Tests if specifying only protocol allows all hosts to pass.
 IN_PROC_BROWSER_TEST_P(CorsOriginAccessListBrowserTest, AllowAll) {
-  SetAllowList("http", "", true);
+  SetAllowList("http", "", kAllowSubdomains);
 
   std::unique_ptr<TitleWatcher> watcher = CreateWatcher();
   EXPECT_TRUE(
@@ -173,7 +178,7 @@
 
 // Tests if specifying only protocol allows all IP address based hosts to pass.
 IN_PROC_BROWSER_TEST_P(CorsOriginAccessListBrowserTest, AllowAllForIp) {
-  SetAllowList("http", "", true);
+  SetAllowList("http", "", kAllowSubdomains);
 
   std::unique_ptr<TitleWatcher> watcher = CreateWatcher();
   EXPECT_TRUE(NavigateToURL(
@@ -185,7 +190,7 @@
 
 // Tests if complete allow list set allows only exactly matched host to pass.
 IN_PROC_BROWSER_TEST_P(CorsOriginAccessListBrowserTest, AllowExactHost) {
-  SetAllowList("http", kTestHost, false);
+  SetAllowList("http", kTestHost, kDisallowSubdomains);
 
   std::unique_ptr<TitleWatcher> watcher = CreateWatcher();
   EXPECT_TRUE(
@@ -198,7 +203,7 @@
 // case insensitive way to pass.
 IN_PROC_BROWSER_TEST_P(CorsOriginAccessListBrowserTest,
                        AllowExactHostInCaseInsensitive) {
-  SetAllowList("http", kTestHost, false);
+  SetAllowList("http", kTestHost, kDisallowSubdomains);
 
   std::unique_ptr<TitleWatcher> watcher = CreateWatcher();
   EXPECT_TRUE(NavigateToURL(
@@ -210,7 +215,7 @@
 // Tests if complete allow list set does not allow a host with a different port
 // to pass.
 IN_PROC_BROWSER_TEST_P(CorsOriginAccessListBrowserTest, BlockDifferentPort) {
-  SetAllowList("http", kTestHost, false);
+  SetAllowList("http", kTestHost, kDisallowSubdomains);
 
   std::unique_ptr<TitleWatcher> watcher = CreateWatcher();
   EXPECT_TRUE(NavigateToURL(
@@ -221,7 +226,7 @@
 
 // Tests if complete allow list set allows a subdomain to pass if it is allowed.
 IN_PROC_BROWSER_TEST_P(CorsOriginAccessListBrowserTest, AllowSubdomain) {
-  SetAllowList("http", kTestHost, true);
+  SetAllowList("http", kTestHost, kAllowSubdomains);
 
   std::unique_ptr<TitleWatcher> watcher = CreateWatcher();
   EXPECT_TRUE(NavigateToURL(
@@ -232,7 +237,7 @@
 
 // Tests if complete allow list set does not allow a subdomain to pass.
 IN_PROC_BROWSER_TEST_P(CorsOriginAccessListBrowserTest, BlockSubdomain) {
-  SetAllowList("http", kTestHost, false);
+  SetAllowList("http", kTestHost, kDisallowSubdomains);
 
   std::unique_ptr<TitleWatcher> watcher = CreateWatcher();
   EXPECT_TRUE(NavigateToURL(
@@ -245,7 +250,7 @@
 // protocol to pass.
 IN_PROC_BROWSER_TEST_P(CorsOriginAccessListBrowserTest,
                        BlockDifferentProtocol) {
-  SetAllowList("https", kTestHost, false);
+  SetAllowList("https", kTestHost, kDisallowSubdomains);
 
   std::unique_ptr<TitleWatcher> watcher = CreateWatcher();
   EXPECT_TRUE(
@@ -257,7 +262,7 @@
 // Tests if IP address based hosts should not follow subdomain match rules.
 IN_PROC_BROWSER_TEST_P(CorsOriginAccessListBrowserTest,
                        SubdomainMatchShouldNotBeAppliedForIPAddress) {
-  SetAllowList("http", "*.0.0.1", true);
+  SetAllowList("http", "*.0.0.1", kAllowSubdomains);
 
   std::unique_ptr<TitleWatcher> watcher = CreateWatcher();
   EXPECT_TRUE(NavigateToURL(
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc
index 1b73ff8..686e303e 100644
--- a/content/browser/loader/navigation_url_loader_impl.cc
+++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -8,11 +8,9 @@
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
-#include "base/debug/alias.h"
 #include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/optional.h"
-#include "base/rand_util.h"
 #include "base/stl_util.h"
 #include "base/task/post_task.h"
 #include "base/trace_event/trace_event.h"
@@ -89,7 +87,6 @@
 #include "services/service_manager/public/cpp/connector.h"
 #include "third_party/blink/public/common/mime_util/mime_util.h"
 #include "third_party/blink/public/common/service_worker/service_worker_utils.h"
-#include "url/gurl.h"
 
 #if defined(OS_ANDROID)
 #include "content/browser/android/content_url_loader_factory.h"
@@ -1332,40 +1329,6 @@
   void OnStartLoadingResponseBody(mojo::ScopedDataPipeConsumerHandle) override {
     // Not reached. At this point, the loader and client endpoints must have
     // been unbound and forwarded to the renderer.
-
-    // TODO(crbug.com/882661): Remove these aliases when the linked bug is
-    // fixed.
-    bool received_response = received_response_;
-    base::debug::Alias(&received_response);
-    bool default_loader_used = default_loader_used_;
-    base::debug::Alias(&default_loader_used);
-    DEBUG_ALIAS_FOR_GURL(url, url_);
-    size_t chain_size = url_chain_.size();
-    base::debug::Alias(&chain_size);
-    GURL url0;
-    GURL url1;
-    GURL url2;
-    GURL url3;
-    GURL url4;
-    GURL url5;
-    if (url_chain_.size() > 0)
-      url0 = url_chain_[0];
-    if (url_chain_.size() > 1)
-      url1 = url_chain_[1];
-    if (url_chain_.size() > 2)
-      url2 = url_chain_[2];
-    if (url_chain_.size() > 3)
-      url3 = url_chain_[3];
-    if (url_chain_.size() > 4)
-      url4 = url_chain_[4];
-    if (url_chain_.size() > 5)
-      url5 = url_chain_[5];
-    DEBUG_ALIAS_FOR_GURL(url0_buf, url0);
-    DEBUG_ALIAS_FOR_GURL(url1_buf, url1);
-    DEBUG_ALIAS_FOR_GURL(url2_buf, url2);
-    DEBUG_ALIAS_FOR_GURL(url3_buf, url3);
-    DEBUG_ALIAS_FOR_GURL(url4_buf, url4);
-    DEBUG_ALIAS_FOR_GURL(url5_buf, url5);
     CHECK(false);
   }
 
diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc
index be2d4482..20733af 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.cc
+++ b/content/browser/renderer_host/render_widget_host_view_base.cc
@@ -465,11 +465,6 @@
     host()->ShowContextMenuAtPoint(point, ui::MENU_SOURCE_NONE);
 }
 
-gfx::Point RenderWidgetHostViewBase::AccessibilityOriginInScreen(
-    const gfx::Rect& bounds) {
-  return bounds.origin();
-}
-
 gfx::AcceleratedWidget
     RenderWidgetHostViewBase::AccessibilityGetAcceleratedWidget() {
   return gfx::kNullAcceleratedWidget;
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
index 25ae62e..62bc30a 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.h
+++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -272,7 +272,6 @@
       BrowserAccessibilityDelegate* delegate, bool for_root_frame);
 
   virtual void AccessibilityShowMenu(const gfx::Point& point);
-  virtual gfx::Point AccessibilityOriginInScreen(const gfx::Rect& bounds);
   virtual gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget();
   virtual gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible();
   virtual void SetMainFrameAXTreeID(ui::AXTreeID id) {}
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 74da1d1..6e0f497 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.h
+++ b/content/browser/renderer_host/render_widget_host_view_mac.h
@@ -155,7 +155,6 @@
   bool RequestRepaintForTesting() override;
   BrowserAccessibilityManager* CreateBrowserAccessibilityManager(
       BrowserAccessibilityDelegate* delegate, bool for_root_frame) override;
-  gfx::Point AccessibilityOriginInScreen(const gfx::Rect& bounds) override;
   gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() override;
   base::Optional<SkColor> GetBackgroundColor() const override;
 
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 2aba38c..a151d301 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -1392,18 +1392,6 @@
       BrowserAccessibilityManagerMac::GetEmptyDocument(), delegate);
 }
 
-gfx::Point RenderWidgetHostViewMac::AccessibilityOriginInScreen(
-    const gfx::Rect& bounds) {
-  NSPoint origin = NSMakePoint(bounds.x(), bounds.y());
-  NSSize size = NSMakeSize(bounds.width(), bounds.height());
-  origin.y = NSHeight([cocoa_view() bounds]) - origin.y;
-  NSPoint originInWindow = [cocoa_view() convertPoint:origin toView:nil];
-  NSPoint originInScreen =
-      ui::ConvertPointFromWindowToScreen([cocoa_view() window], originInWindow);
-  originInScreen.y = originInScreen.y - size.height;
-  return gfx::Point(originInScreen.x, originInScreen.y);
-}
-
 gfx::NativeViewAccessible
 RenderWidgetHostViewMac::AccessibilityGetNativeViewAccessible() {
   if (remote_view_accessible_)
diff --git a/content/browser/service_worker/service_worker_navigation_loader.cc b/content/browser/service_worker/service_worker_navigation_loader.cc
index 840f2b8..83081f2 100644
--- a/content/browser/service_worker/service_worker_navigation_loader.cc
+++ b/content/browser/service_worker/service_worker_navigation_loader.cc
@@ -269,26 +269,19 @@
   url_loader_client_->OnStartLoadingResponseBody(std::move(response_body));
 }
 
-void ServiceWorkerNavigationLoader::CommitResponseBodyEmpty() {
-  TransitionToStatus(Status::kSentBody);
-
-  // TODO(arthursonzogni): As soon as https://crbug.com/905779 is fixed, switch
-  // back to using mojo::DataPipe instead of creating it manually.
-  MojoCreateDataPipeOptions options;
-  options.struct_size = sizeof(MojoCreateDataPipeOptions);
-  options.flags = MOJO_CREATE_DATA_PIPE_FLAG_NONE;
-  // Cannot use 0, because this means "default" in
-  // mojo::core::Core::CreateDataPipe.
-  options.element_num_bytes = 1;
-  options.capacity_num_bytes = 1;
+void ServiceWorkerNavigationLoader::CommitEmptyResponseAndComplete() {
   mojo::ScopedDataPipeProducerHandle producer_handle;
   mojo::ScopedDataPipeConsumerHandle consumer_handle;
-  MojoResult result =
-      CreateDataPipe(&options, &producer_handle, &consumer_handle);
-  CHECK_EQ(MOJO_RESULT_OK, result);
+  if (CreateDataPipe(nullptr, &producer_handle, &consumer_handle) !=
+      MOJO_RESULT_OK) {
+    CommitCompleted(net::ERR_INSUFFICIENT_RESOURCES,
+                    "Can't create empty data pipe");
+    return;
+  }
 
   producer_handle.reset();  // The data pipe is empty.
-  url_loader_client_->OnStartLoadingResponseBody(std::move(consumer_handle));
+  CommitResponseBody(std::move(consumer_handle));
+  CommitCompleted(net::OK, "No body exists.");
 }
 
 void ServiceWorkerNavigationLoader::CommitCompleted(int error_code,
@@ -474,7 +467,6 @@
                        weak_factory_.GetWeakPtr()),
         &data_pipe);
     if (error != net::OK) {
-      CommitResponseBodyEmpty();
       CommitCompleted(error, "Failed to read blob body");
       return;
     }
@@ -493,8 +485,7 @@
                          TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT,
                          "result", "no body");
 
-  CommitResponseBodyEmpty();
-  CommitCompleted(net::OK, "No body exists.");
+  CommitEmptyResponseAndComplete();
 }
 
 // URLLoader implementation----------------------------------------
@@ -643,6 +634,8 @@
           status_ == Status::kNotStarted ||
           // Network fallback after interception.
           status_ == Status::kStarted ||
+          // Pipe creation failure for empty response.
+          status_ == Status::kSentHeader ||
           // Success case or error while sending the response's body.
           status_ == Status::kSentBody);
       break;
diff --git a/content/browser/service_worker/service_worker_navigation_loader.h b/content/browser/service_worker/service_worker_navigation_loader.h
index d9bd07d..0efdb83d 100644
--- a/content/browser/service_worker/service_worker_navigation_loader.h
+++ b/content/browser/service_worker/service_worker_navigation_loader.h
@@ -140,9 +140,12 @@
   void CommitResponseHeaders();
 
   // Calls url_loader_client_->OnStartLoadingResponseBody() with
-  // |response_body| or with an empty data pipe.
+  // |response_body|.
   void CommitResponseBody(mojo::ScopedDataPipeConsumerHandle response_body);
-  void CommitResponseBodyEmpty();
+
+  // Creates and sends an empty response's body with the net::OK status.
+  // Sends net::ERR_INSUFFICIENT_RESOURCES when it can't be created.
+  void CommitEmptyResponseAndComplete();
 
   // Calls url_loader_client_->OnComplete(). |reason| will be recorded as an
   // argument of TRACE_EVENT.
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
index 02ea342..caac641 100644
--- a/content/browser/service_worker/service_worker_version.cc
+++ b/content/browser/service_worker/service_worker_version.cc
@@ -1585,6 +1585,7 @@
   params->scope = scope_;
   params->script_url = script_url_;
   params->script_type = script_type_;
+  params->user_agent = GetContentClient()->GetUserAgent();
   params->is_installed = IsInstalled(status_);
   params->pause_after_download = pause_after_download();
 
diff --git a/content/common/service_worker/embedded_worker.mojom b/content/common/service_worker/embedded_worker.mojom
index 9fa1fed..4dcf473c 100644
--- a/content/common/service_worker/embedded_worker.mojom
+++ b/content/common/service_worker/embedded_worker.mojom
@@ -43,6 +43,8 @@
   // This service worker's script type:
   // https://w3c.github.io/ServiceWorker/#dfn-type
   blink.mojom.ScriptType script_type;
+  // The string used for "user-agent" HTTP header.
+  string user_agent;
   // The id to talk with the DevTools agent for the worker.
   int32 worker_devtools_agent_route_id;
   // Unique token identifying this worker for DevTools.
diff --git a/content/common/throttling_url_loader.cc b/content/common/throttling_url_loader.cc
index 05d91e2e..044a92e 100644
--- a/content/common/throttling_url_loader.cc
+++ b/content/common/throttling_url_loader.cc
@@ -4,9 +4,7 @@
 
 #include "content/common/throttling_url_loader.h"
 
-#include "base/debug/alias.h"
 #include "base/single_thread_task_runner.h"
-#include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "net/http/http_status_code.h"
@@ -201,7 +199,6 @@
 
 void ThrottlingURLLoader::FollowRedirect(
     const base::Optional<net::HttpRequestHeaders>& modified_headers) {
-  debug_log_.emplace_back("FollowRedirect");
   const base::Optional<net::HttpRequestHeaders>* modified_headers_to_send =
       &modified_headers;
   if (modified_request_headers_) {
@@ -234,7 +231,6 @@
 }
 
 void ThrottlingURLLoader::FollowRedirectForcingRestart() {
-  debug_log_.emplace_back("FollowRedirectForcingRestart");
   url_loader_.reset();
   client_binding_.Close();
   CHECK(throttle_will_redirect_redirect_url_.is_empty());
@@ -256,15 +252,8 @@
 void ThrottlingURLLoader::RestartWithFactory(
     scoped_refptr<network::SharedURLLoaderFactory> factory,
     uint32_t url_loader_options) {
-  debug_log_.emplace_back("RestartWithFactory");
-  // TODO(crbug.com/882661): Remove these aliases and turn CHECKs to DCHECKs
-  // when the linked bug is fixed.
-  DeferredStage deferred_stage = deferred_stage_;
-  base::debug::Alias(&deferred_stage);
-  bool loader_completed = loader_completed_;
-  base::debug::Alias(&loader_completed);
-  CHECK_EQ(DEFERRED_NONE, deferred_stage_);
-  CHECK(!loader_completed_);
+  DCHECK_EQ(DEFERRED_NONE, deferred_stage_);
+  DCHECK(!loader_completed_);
   url_loader_.reset();
   client_binding_.Close();
   start_info_->url_loader_factory = std::move(factory);
@@ -299,7 +288,6 @@
       client_binding_(this),
       traffic_annotation_(traffic_annotation),
       weak_factory_(this) {
-  debug_log_.emplace_back("ctor");
   throttles_.reserve(throttles.size());
   for (auto& throttle : throttles)
     throttles_.emplace_back(this, std::move(throttle));
@@ -312,7 +300,6 @@
     uint32_t options,
     network::ResourceRequest* url_request,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
-  debug_log_.emplace_back("Start");
   DCHECK_EQ(DEFERRED_NONE, deferred_stage_);
   DCHECK(!loader_completed_);
 
@@ -336,10 +323,8 @@
         // URL.
         url_request->url = original_url;
       }
-      if (!HandleThrottleResult(throttle, throttle_deferred, &deferred)) {
-        debug_log_.emplace_back("Start::Return");
+      if (!HandleThrottleResult(throttle, throttle_deferred, &deferred))
         return;
-      }
     }
 
     // If a throttle had changed the URL, set it in the ResourceRequest struct
@@ -351,17 +336,14 @@
   start_info_ =
       std::make_unique<StartInfo>(factory, routing_id, request_id, options,
                                   url_request, std::move(task_runner));
-  if (deferred) {
-    debug_log_.emplace_back("Start::Deferred");
+  if (deferred)
     deferred_stage_ = DEFERRED_START;
-  } else {
+  else
     StartNow();
-  }
 }
 
 void ThrottlingURLLoader::StartNow() {
   DCHECK(start_info_);
-  debug_log_.emplace_back("StartNow");
   if (!throttle_will_start_redirect_url_.is_empty()) {
     net::RedirectInfo redirect_info;
     redirect_info.status_code = net::HTTP_TEMPORARY_REDIRECT;
@@ -380,7 +362,6 @@
             header_string.c_str(), header_string.length()));
     response_head.encoded_data_length = header_string.size();
     OnReceiveRedirect(redirect_info, response_head);
-    debug_log_.emplace_back("StartNow::Redirect");
     return;
   }
 
@@ -448,7 +429,6 @@
 
 void ThrottlingURLLoader::OnReceiveResponse(
     const network::ResourceResponseHead& response_head) {
-  debug_log_.emplace_back("OnReceiveResponse");
   DCHECK_EQ(DEFERRED_NONE, deferred_stage_);
   DCHECK(!loader_completed_);
   DCHECK(deferring_throttles_.empty());
@@ -463,16 +443,13 @@
       bool throttle_deferred = false;
       throttle->BeforeWillProcessResponse(response_url_, response_head,
                                           &throttle_deferred);
-      if (!HandleThrottleResult(throttle, throttle_deferred, &deferred)) {
-        debug_log_.emplace_back("OnReceiveResponse::Return (before)");
+      if (!HandleThrottleResult(throttle, throttle_deferred, &deferred))
         return;
-      }
     }
 
     if (deferred) {
       deferred_stage_ = DEFERRED_BEFORE_RESPONSE;
       client_binding_.PauseIncomingMethodCallProcessing();
-      debug_log_.emplace_back("OnReceiveResponse::Deferred (before)");
       return;
     }
 
@@ -491,30 +468,24 @@
       bool throttle_deferred = false;
       throttle->WillProcessResponse(response_url_, &response_head_copy,
                                     &throttle_deferred);
-      if (!HandleThrottleResult(throttle, throttle_deferred, &deferred)) {
-        debug_log_.emplace_back("OnReceiveResponse::Return");
+      if (!HandleThrottleResult(throttle, throttle_deferred, &deferred))
         return;
-      }
     }
 
     if (deferred) {
       deferred_stage_ = DEFERRED_RESPONSE;
       response_info_ = std::make_unique<ResponseInfo>(response_head_copy);
       client_binding_.PauseIncomingMethodCallProcessing();
-      debug_log_.emplace_back("OnReceiveResponse::Deferred");
       return;
     }
   }
 
-  sent_on_receive_response_ = true;
-  debug_log_.emplace_back("OnReceiveResponse::Sent");
   forwarding_client_->OnReceiveResponse(response_head_copy);
 }
 
 void ThrottlingURLLoader::OnReceiveRedirect(
     const net::RedirectInfo& redirect_info,
     const network::ResourceResponseHead& response_head) {
-  debug_log_.emplace_back("OnReceiveRedirect");
   DCHECK_EQ(DEFERRED_NONE, deferred_stage_);
   DCHECK(!loader_completed_);
   DCHECK(deferring_throttles_.empty());
@@ -549,10 +520,8 @@
 
       if (!weak_ptr)
         return;
-      if (!HandleThrottleResult(throttle, throttle_deferred, &deferred)) {
-        debug_log_.emplace_back("OnReceiveRedirect::Return");
+      if (!HandleThrottleResult(throttle, throttle_deferred, &deferred))
         return;
-      }
 
       if (!to_be_removed_headers.empty()) {
         if (to_be_removed_request_headers_) {
@@ -578,7 +547,6 @@
       redirect_info_ =
           std::make_unique<RedirectInfo>(redirect_info, response_head);
       client_binding_.PauseIncomingMethodCallProcessing();
-      debug_log_.emplace_back("OnReceiveRedirect::Deferred");
       return;
     }
   }
@@ -596,7 +564,6 @@
   // redirect or if it will be cancelled. FollowRedirect would be a more
   // suitable place to set this URL but there we do not have the data.
   response_url_ = redirect_info.new_url;
-  debug_log_.emplace_back("OnReceiveRedirect::Sent");
   forwarding_client_->OnReceiveRedirect(redirect_info, response_head);
 }
 
@@ -628,22 +595,14 @@
 
 void ThrottlingURLLoader::OnStartLoadingResponseBody(
     mojo::ScopedDataPipeConsumerHandle body) {
-  debug_log_.emplace_back("OnStartLoadingResponseBody");
-
   DCHECK_EQ(DEFERRED_NONE, deferred_stage_);
   DCHECK(!loader_completed_);
-  DCHECK(sent_on_receive_response_);
-
-  // TODO(crbug.com/882661): Remove when the linked bug is fixed.
-  if (!sent_on_receive_response_)
-    Crash();
 
   forwarding_client_->OnStartLoadingResponseBody(std::move(body));
 }
 
 void ThrottlingURLLoader::OnComplete(
     const network::URLLoaderCompletionStatus& status) {
-  debug_log_.emplace_back("OnComplete::Sent");
   DCHECK_EQ(DEFERRED_NONE, deferred_stage_);
   DCHECK(!loader_completed_);
 
@@ -662,7 +621,6 @@
 
 void ThrottlingURLLoader::CancelWithError(int error_code,
                                           base::StringPiece custom_reason) {
-  debug_log_.emplace_back("CancelWithError");
   if (loader_completed_)
     return;
 
@@ -676,11 +634,8 @@
 }
 
 void ThrottlingURLLoader::Resume() {
-  debug_log_.emplace_back("Resume::" + base::NumberToString(deferred_stage_));
-  if (loader_completed_ || deferred_stage_ == DEFERRED_NONE) {
-    debug_log_.emplace_back("Resume::Return");
+  if (loader_completed_ || deferred_stage_ == DEFERRED_NONE)
     return;
-  }
 
   auto prev_deferred_stage = deferred_stage_;
   deferred_stage_ = DEFERRED_NONE;
@@ -713,7 +668,6 @@
     }
     case DEFERRED_RESPONSE: {
       client_binding_.ResumeIncomingMethodCallProcessing();
-      sent_on_receive_response_ = true;
       forwarding_client_->OnReceiveResponse(response_info_->response_head);
       // Note: |this| may be deleted here.
       break;
@@ -786,12 +740,6 @@
   loader_completed_ = true;
 }
 
-void ThrottlingURLLoader::Crash() {
-  std::string log = base::JoinString(debug_log_, " ");
-  DEBUG_ALIAS_FOR_CSTR(log_buf, log.c_str(), 2048);
-  CHECK(false);
-}
-
 ThrottlingURLLoader::ThrottleEntry::ThrottleEntry(
     ThrottlingURLLoader* loader,
     std::unique_ptr<URLLoaderThrottle> the_throttle)
diff --git a/content/common/throttling_url_loader.h b/content/common/throttling_url_loader.h
index 794ecd60..f721d8e 100644
--- a/content/common/throttling_url_loader.h
+++ b/content/common/throttling_url_loader.h
@@ -146,9 +146,6 @@
   // Disconnects the client connection and releases the URLLoader.
   void DisconnectClient(base::StringPiece custom_description);
 
-  // TODO(crbug.com/882661): Remove when the linked bug is fixed.
-  void Crash();
-
   enum DeferredStage {
     DEFERRED_NONE,
     DEFERRED_START,
@@ -257,10 +254,6 @@
 
   bool response_intercepted_ = false;
 
-  // TODO(crbug.com/882661): Remove these when the linked bug is fixed.
-  bool sent_on_receive_response_ = false;
-  std::vector<std::string> debug_log_;
-
   base::Optional<std::vector<std::string>> to_be_removed_request_headers_;
   base::Optional<net::HttpRequestHeaders> modified_request_headers_;
 
diff --git a/content/renderer/service_worker/embedded_worker_instance_client_impl.cc b/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
index 66b5e22..13e86b98 100644
--- a/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
+++ b/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
@@ -164,8 +164,7 @@
 
   blink::WebEmbeddedWorkerStartData start_data;
   start_data.script_url = params->script_url;
-  start_data.user_agent =
-      blink::WebString::FromUTF8(GetContentClient()->GetUserAgent());
+  start_data.user_agent = blink::WebString::FromUTF8(params->user_agent);
   start_data.script_type = params->script_type;
   start_data.wait_for_debugger_mode =
       params->wait_for_debugger
diff --git a/content/renderer/service_worker/service_worker_subresource_loader.cc b/content/renderer/service_worker/service_worker_subresource_loader.cc
index 649ef3b..924883be 100644
--- a/content/renderer/service_worker/service_worker_subresource_loader.cc
+++ b/content/renderer/service_worker/service_worker_subresource_loader.cc
@@ -407,8 +407,7 @@
     response_head_.was_fetched_via_service_worker = true;
     response_head_.was_fallback_required_by_service_worker = true;
     CommitResponseHeaders();
-    CommitResponseBodyEmpty();
-    CommitCompleted(net::OK);
+    CommitEmptyResponseAndComplete();
     return;
   }
   TRACE_EVENT_WITH_FLOW0(
@@ -512,7 +511,6 @@
             blink::features::kServiceWorkerParallelSideDataReading)) {
       int error = StartBlobReading(&data_pipe);
       if (error != net::OK) {
-        CommitResponseBodyEmpty();
         CommitCompleted(error);
         return;
       }
@@ -524,8 +522,7 @@
     return;
   }
 
-  CommitResponseBodyEmpty();
-  CommitCompleted(net::OK);
+  CommitEmptyResponseAndComplete();
 }
 
 void ServiceWorkerSubresourceLoader::CommitResponseHeaders() {
@@ -541,26 +538,18 @@
   url_loader_client_->OnStartLoadingResponseBody(std::move(response_body));
 }
 
-void ServiceWorkerSubresourceLoader::CommitResponseBodyEmpty() {
-  TransitionToStatus(Status::kSentBody);
-
-  // TODO(arthursonzogni): As soon as https://crbug.com/905779 is fixed, switch
-  // back to using mojo::DataPipe instead of creating it manually.
-  MojoCreateDataPipeOptions options;
-  options.struct_size = sizeof(MojoCreateDataPipeOptions);
-  options.flags = MOJO_CREATE_DATA_PIPE_FLAG_NONE;
-  // Cannot use 0, because this means "default" in
-  // mojo::core::Core::CreateDataPipe.
-  options.element_num_bytes = 1;
-  options.capacity_num_bytes = 1;
+void ServiceWorkerSubresourceLoader::CommitEmptyResponseAndComplete() {
   mojo::ScopedDataPipeProducerHandle producer_handle;
   mojo::ScopedDataPipeConsumerHandle consumer_handle;
-  MojoResult result =
-      CreateDataPipe(&options, &producer_handle, &consumer_handle);
-  CHECK_EQ(MOJO_RESULT_OK, result);
+  if (CreateDataPipe(nullptr, &producer_handle, &consumer_handle) !=
+      MOJO_RESULT_OK) {
+    CommitCompleted(net::ERR_INSUFFICIENT_RESOURCES);
+    return;
+  }
 
   producer_handle.reset();  // The data pipe is empty.
-  url_loader_client_->OnStartLoadingResponseBody(std::move(consumer_handle));
+  CommitResponseBody(std::move(consumer_handle));
+  CommitCompleted(net::OK);
 }
 
 void ServiceWorkerSubresourceLoader::CommitCompleted(int error_code) {
@@ -869,6 +858,8 @@
           status_ == Status::kNotStarted ||
           // Network fallback after interception.
           status_ == Status::kStarted ||
+          // Pipe creation failure for empty response.
+          status_ == Status::kSentHeader ||
           // Success case or error while sending the response's body.
           status_ == Status::kSentBody);
       break;
diff --git a/content/renderer/service_worker/service_worker_subresource_loader.h b/content/renderer/service_worker/service_worker_subresource_loader.h
index 0b2ccdec..3c9da8d1 100644
--- a/content/renderer/service_worker/service_worker_subresource_loader.h
+++ b/content/renderer/service_worker/service_worker_subresource_loader.h
@@ -127,9 +127,12 @@
   void CommitResponseHeaders();
 
   // Calls url_loader_client_->OnStartLoadingResponseBody() with
-  // |response_body| or with an empty data pipe.
+  // |response_body|.
   void CommitResponseBody(mojo::ScopedDataPipeConsumerHandle response_body);
-  void CommitResponseBodyEmpty();
+
+  // Creates and sends an empty response's body with the net::OK status.
+  // Sends net::ERR_INSUFFICIENT_RESOURCES when it can't be created.
+  void CommitEmptyResponseAndComplete();
 
   // Calls url_loader_client_->OnComplete(). Expected to be called after
   // CommitResponseHeaders (i.e. status_ == kSentHeader).
diff --git a/content/test/data/accessibility/language-detection/lang-attribute-expected-blink.html b/content/test/data/accessibility/language-detection/lang-attribute-expected-blink.html
new file mode 100644
index 0000000..cea21b6
--- /dev/null
+++ b/content/test/data/accessibility/language-detection/lang-attribute-expected-blink.html
@@ -0,0 +1,8 @@
+rootWebArea language='en-US'
+++genericContainer language='en'
+++++staticText language='es-ES' name='Este documento es excelente. '
+++++++inlineTextBox language='es-ES' name='Este documento es excelente. '
+++++staticText language='fr' name='Ce document est excellent. '
+++++++inlineTextBox language='fr' name='Ce document est excellent. '
+++++staticText language='en' name='This document is excellent.'
+++++++inlineTextBox language='en' name='This document is excellent.'
diff --git a/content/test/data/accessibility/language-detection/lang-attribute-expected-mac.txt b/content/test/data/accessibility/language-detection/lang-attribute-expected-mac.txt
new file mode 100644
index 0000000..b134bdd
--- /dev/null
+++ b/content/test/data/accessibility/language-detection/lang-attribute-expected-mac.txt
@@ -0,0 +1,5 @@
+AXWebArea AXLanguage='en-US'
+++AXGroup AXLanguage='en'
+++++AXStaticText AXValue='Este documento es excelente. ' AXLanguage='es-ES'
+++++AXStaticText AXValue='Ce document est excellent. ' AXLanguage='fr'
+++++AXStaticText AXValue='This document is excellent.'
diff --git a/content/test/data/accessibility/language-detection/lang-attribute-expected-win.txt b/content/test/data/accessibility/language-detection/lang-attribute-expected-win.txt
new file mode 100644
index 0000000..40b1f507
--- /dev/null
+++ b/content/test/data/accessibility/language-detection/lang-attribute-expected-win.txt
@@ -0,0 +1,5 @@
+ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE language:en
+++IA2_ROLE_SECTION language:es-ES language:fr language:en
+++++ROLE_SYSTEM_STATICTEXT name='Este documento es excelente. ' language:es-ES
+++++ROLE_SYSTEM_STATICTEXT name='Ce document est excellent. ' language:fr
+++++ROLE_SYSTEM_STATICTEXT name='This document is excellent.' language:en
diff --git a/content/test/data/accessibility/language-detection/lang-attribute.html b/content/test/data/accessibility/language-detection/lang-attribute.html
new file mode 100644
index 0000000..ff201a7
--- /dev/null
+++ b/content/test/data/accessibility/language-detection/lang-attribute.html
@@ -0,0 +1,22 @@
+<!--
+@BLINK-ALLOW:language=*
+@WIN-ALLOW:language:*
+@MAC-ALLOW:AXLanguage*
+-->
+<!DOCTYPE html>
+<html lang="en">
+<body>
+  <span lang="es-ES">
+    Este documento es excelente.
+  </span>
+
+  <span lang="fr">
+    Ce document est excellent.
+  </span>
+
+  <span>
+    This document is excellent.
+  </span>
+
+</body>
+</html>
diff --git a/content/test/data/browsing_data/worker_test.html b/content/test/data/browsing_data/worker_test.html
new file mode 100644
index 0000000..7785ebb3
--- /dev/null
+++ b/content/test/data/browsing_data/worker_test.html
@@ -0,0 +1,35 @@
+<html>
+<script>
+
+  function success_() {
+    domAutomationController.send(true);
+  }
+
+  function failure_() {
+    domAutomationController.send(false);
+  }
+
+  function installServiceWorker() {
+    navigator.serviceWorker.register('/?file=empty_worker.js').then(function() {
+      navigator.serviceWorker.ready.then(success_);
+    }).catch(failure_);
+  }
+
+  function updateServiceWorker() {
+    navigator.serviceWorker.getRegistrations().then(function (registrations) {
+      registrations[0].update().then(success_).catch(failure_);
+    });
+  }
+
+  function hasServiceWorker() {
+    navigator.serviceWorker.getRegistrations().then(function (registrations) {
+      domAutomationController.send(registrations.length > 0);
+    });
+  }
+
+</script>
+<body>
+  This page is used to test creation, update and deletion service workers.
+</body>
+
+</html>
\ No newline at end of file
diff --git a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
index 3d4a1a1..6f693859 100644
--- a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
+++ b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
@@ -56,9 +56,6 @@
         'conformance2/glsl3/const-struct-from-array-as-function-parameter.html',
         ['win', 'nvidia', 'opengl'], bug=874620)
 
-    # Failing test updated in https://github.com/KhronosGroup/WebGL/pull/2226
-    self.Fail('conformance2/textures/misc/copy-texture-image.html', bug=905531)
-
     # Failing new test added in https://github.com/KhronosGroup/WebGL/pull/2665
     self.Fail('conformance2/textures/misc/tex-subimage3d-canvas-bug.html',
               ['linux'], bug=859400)
@@ -121,9 +118,6 @@
     self.Fail('conformance2/vertex_arrays/vertex-array-object.html', bug=739604)
     self.Fail('deqp/functional/gles3/lifetime.html', bug=898350)
 
-    # Need to forbid generation of mipmaps for zero-sized textures.
-    self.Fail('conformance2/textures/misc/tex-mipmap-levels.html', bug=898351)
-
     # The following actually passes on gl_passthrough and also Mac Intel with
     # command buffer.
     self.Fail('deqp/functional/gles3/shadertexturefunction/' +
diff --git a/extensions/common/cors_util.cc b/extensions/common/cors_util.cc
index e2688a1..47995e0 100644
--- a/extensions/common/cors_util.cc
+++ b/extensions/common/cors_util.cc
@@ -37,7 +37,11 @@
       if (!pattern.MatchesScheme(scheme))
         continue;
       list->push_back(network::mojom::CorsOriginPattern::New(
-          scheme, pattern.host(), pattern.match_subdomains(), priority));
+          scheme, pattern.host(),
+          pattern.match_subdomains()
+              ? network::mojom::CorsOriginAccessMatchMode::kAllowSubdomains
+              : network::mojom::CorsOriginAccessMatchMode::kDisallowSubdomains,
+          priority));
     }
   }
 }
@@ -80,7 +84,8 @@
 
   GURL webstore_launch_url = extension_urls::GetWebstoreLaunchURL();
   block_list.push_back(network::mojom::CorsOriginPattern::New(
-      webstore_launch_url.scheme(), webstore_launch_url.host(), true,
+      webstore_launch_url.scheme(), webstore_launch_url.host(),
+      network::mojom::CorsOriginAccessMatchMode::kAllowSubdomains,
       network::mojom::CorsOriginAccessMatchPriority::kHighPriority));
 
   // TODO(devlin): Should we also block the webstore update URL here? See
diff --git a/extensions/renderer/dispatcher.cc b/extensions/renderer/dispatcher.cc
index 0d99d6fc..1b0cde7 100644
--- a/extensions/renderer/dispatcher.cc
+++ b/extensions/renderer/dispatcher.cc
@@ -1238,14 +1238,18 @@
   for (const auto& entry : allow_list) {
     WebSecurityPolicy::AddOriginAccessAllowListEntry(
         extension.url(), WebString::FromUTF8(entry->protocol),
-        WebString::FromUTF8(entry->domain), entry->allow_subdomains,
+        WebString::FromUTF8(entry->domain),
+        entry->mode ==
+            network::mojom::CorsOriginAccessMatchMode::kAllowSubdomains,
         entry->priority);
   }
 
   for (const auto& entry : CreateCorsOriginAccessBlockList(extension)) {
     WebSecurityPolicy::AddOriginAccessBlockListEntry(
         extension.url(), WebString::FromUTF8(entry->protocol),
-        WebString::FromUTF8(entry->domain), entry->allow_subdomains,
+        WebString::FromUTF8(entry->domain),
+        entry->mode ==
+            network::mojom::CorsOriginAccessMatchMode::kAllowSubdomains,
         entry->priority);
   }
 }
diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc
index 122acb14..552bd187 100644
--- a/gpu/command_buffer/service/texture_manager.cc
+++ b/gpu/command_buffer/service/texture_manager.cc
@@ -876,6 +876,12 @@
     return false;
   }
 
+  // WebGL forbids generating mipmaps on zero-size textures.
+  // See https://crbug.com/898351
+  if (feature_info->IsWebGLContext() && (base.width == 0 || base.height == 0)) {
+    return false;
+  }
+
   // According to the OpenGL extension spec EXT_sRGB.txt, EXT_SRGB is based on
   // ES 2.0 and generateMipmap is not allowed if texture format is SRGB_EXT or
   // SRGB_ALPHA_EXT.
diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc
index 8ed91b0..84efe19 100644
--- a/gpu/config/gpu_finch_features.cc
+++ b/gpu/config/gpu_finch_features.cc
@@ -4,6 +4,17 @@
 #include "gpu/config/gpu_finch_features.h"
 
 namespace features {
+#if defined(OS_ANDROID)
+// Use android AImageReader when playing videos with MediaPlayer.
+const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer",
+                                             base::FEATURE_DISABLED_BY_DEFAULT};
+
+// Use android SurfaceControl API for managing display compositor's buffer queue
+// and using overlays on Android.
+// Note that the feature only works with VizDisplayCompositor enabled.
+const base::Feature kAndroidSurfaceControl{"AndroidSurfaceControl",
+                                           base::FEATURE_DISABLED_BY_DEFAULT};
+#endif
 
 // Enable GPU Rasterization by default. This can still be overridden by
 // --force-gpu-rasterization or --disable-gpu-rasterization.
@@ -28,21 +39,22 @@
 const base::Feature kDefaultPassthroughCommandDecoder{
     "DefaultPassthroughCommandDecoder", base::FEATURE_DISABLED_BY_DEFAULT};
 
-#if defined(OS_ANDROID)
-// Use android AImageReader when playing videos with MediaPlayer.
-const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer",
-                                             base::FEATURE_DISABLED_BY_DEFAULT};
-
-// Use android SurfaceControl API for managing display compositor's buffer queue
-// and using overlays on Android.
-// Note that the feature only works with VizDisplayCompositor enabled.
-const base::Feature kAndroidSurfaceControl{"AndroidSurfaceControl",
-                                           base::FEATURE_DISABLED_BY_DEFAULT};
-#endif
 
 // Overrides preferred overlay format to NV12 instead of YUY2.
 const base::Feature kDirectCompositionPreferNV12Overlays{
-    "DirectCompositionPreferNV12Overlays", base::FEATURE_DISABLED_BY_DEFAULT};
+    "DirectCompositionPreferNV12Overlays", base::FEATURE_ENABLED_BY_DEFAULT};
+
+// Causes us to use the SharedImageManager, removing support for the old
+// mailbox system. Any consumers of the GPU process using the old mailbox
+// system will experience undefined results.
+const base::Feature kSharedImageManager{"SharedImageManager",
+                                        base::FEATURE_DISABLED_BY_DEFAULT};
+
+// For Windows only. Use overlay swapchain to present software protected videos
+// for all GPUs
+const base::Feature kUseDCOverlaysForSoftwareProtectedVideo{
+    "UseDCOverlaysForSoftwareProtectedVideo",
+    base::FEATURE_DISABLED_BY_DEFAULT};
 
 // Controls the decode acceleration of JPEG images (as opposed to camera
 // captures) in Chrome OS using the VA-API.
@@ -51,10 +63,4 @@
 const base::Feature kVaapiJpegImageDecodeAcceleration{
     "VaapiJpegImageDecodeAcceleration", base::FEATURE_DISABLED_BY_DEFAULT};
 
-// Causes us to use the SharedImageManager, removing support for the old
-// mailbox system. Any consumers of the GPU process using the old mailbox
-// system will experience undefined results.
-const base::Feature kSharedImageManager{"SharedImageManager",
-                                        base::FEATURE_DISABLED_BY_DEFAULT};
-
 }  // namespace features
diff --git a/gpu/config/gpu_finch_features.h b/gpu/config/gpu_finch_features.h
index 7198fa4..2c70110 100644
--- a/gpu/config/gpu_finch_features.h
+++ b/gpu/config/gpu_finch_features.h
@@ -16,23 +16,25 @@
 
 // All features in alphabetical order. The features should be documented
 // alongside the definition of their values in the .cc file.
+#if defined(OS_ANDROID)
+GPU_EXPORT extern const base::Feature kAImageReaderMediaPlayer;
+GPU_EXPORT extern const base::Feature kAndroidSurfaceControl;
+#endif  // defined(OS_ANDROID)
+
 GPU_EXPORT extern const base::Feature kDefaultEnableGpuRasterization;
 
 GPU_EXPORT extern const base::Feature kDefaultEnableOopRasterization;
 
 GPU_EXPORT extern const base::Feature kDefaultPassthroughCommandDecoder;
 
-#if defined(OS_ANDROID)
-GPU_EXPORT extern const base::Feature kAImageReaderMediaPlayer;
-GPU_EXPORT extern const base::Feature kAndroidSurfaceControl;
-#endif  // defined(OS_ANDROID)
-
 GPU_EXPORT extern const base::Feature kDirectCompositionPreferNV12Overlays;
 
-GPU_EXPORT extern const base::Feature kVaapiJpegImageDecodeAcceleration;
-
 GPU_EXPORT extern const base::Feature kSharedImageManager;
 
+GPU_EXPORT extern const base::Feature kUseDCOverlaysForSoftwareProtectedVideo;
+
+GPU_EXPORT extern const base::Feature kVaapiJpegImageDecodeAcceleration;
+
 }  // namespace features
 
 #endif  // GPU_CONFIG_GPU_FEATURES_H_
diff --git a/gpu/ipc/service/direct_composition_surface_win.cc b/gpu/ipc/service/direct_composition_surface_win.cc
index 283f3a9..41611879 100644
--- a/gpu/ipc/service/direct_composition_surface_win.cc
+++ b/gpu/ipc/service/direct_composition_surface_win.cc
@@ -45,9 +45,6 @@
 
 namespace gpu {
 namespace {
-// Number of stable frames before the swap chain can be resized
-static constexpr int kNumFramesBeforeSwapChainResize = 30;
-
 // Some drivers fail to correctly handle BT.709 video in overlays. This flag
 // converts them to BT.601 in the video processor.
 const base::Feature kFallbackBT709VideoToBT601{
@@ -473,7 +470,7 @@
 
   // Returns true if YUV swap chain should be preferred over BGRA swap chain.
   // This changes over time based on stats recorded in |presentation_history|.
-  bool ShouldUseYUVSwapChain();
+  bool ShouldUseYUVSwapChain(ui::ProtectedVideoType protected_video_type);
 
   // Perform a blit using video processor from given input texture to swap chain
   // backbuffer. |input_texture| is the input texture (array), and |input_level|
@@ -490,10 +487,6 @@
   // Returns optimal swap chain size for given layer.
   gfx::Size CalculateSwapChainSize(const ui::DCRendererLayerParams& params);
 
-  // Returns a stable swap chain size to prevent frequently recreating the swap
-  // chain until a number of frames with the size have been presented.
-  gfx::Size GetStableSwapChainSize(gfx::Size requested_swap_chain_size);
-
   // Update direct composition visuals for layer with given swap chain size, and
   // returns true if a commit is needed.
   bool UpdateVisuals(const ui::DCRendererLayerParams& params,
@@ -527,8 +520,6 @@
   // Number of frames since we switched from YUV to BGRA swap chain, or
   // vice-versa.
   int frames_since_color_space_change_ = 0;
-  int frames_since_stable_swap_chain_resize_ = 0;
-  gfx::Size last_requested_swap_chain_size_;
 
   // This struct is used to cache information about what visuals are currently
   // being presented so that properties that aren't changed aren't sent to
@@ -673,13 +664,23 @@
 
 DCLayerTree::SwapChainPresenter::~SwapChainPresenter() {}
 
-bool DCLayerTree::SwapChainPresenter::ShouldUseYUVSwapChain() {
-  // Always prefer YUV swap chain for protected video for now.
+bool DCLayerTree::SwapChainPresenter::ShouldUseYUVSwapChain(
+    ui::ProtectedVideoType protected_video_type) {
   // TODO(crbug.com/850799): Assess power/perf impact when protected video
   // swap chain is composited by DWM.
-  if (IsProtectedVideo(protected_video_type_))
+
+  // Always prefer YUV swap chain for hardware protected video for now.
+  if (protected_video_type == ui::ProtectedVideoType::kHardwareProtected)
     return true;
 
+  // For software protected video, BGRA swap chain is preferred if hardware
+  // overlay is not supported for better power efficiency.
+  // Currently, software protected video is the only case that overlay swap
+  // chain is used when hardware overlay is not suppported.
+  if (protected_video_type == ui::ProtectedVideoType::kSoftwareProtected &&
+      !g_supports_overlays)
+    return false;
+
   if (failed_to_create_yuv_swapchain_)
     return false;
 
@@ -701,36 +702,6 @@
   }
 }
 
-// To avoid frequent swap chain recreation during video resizing, keep
-// the same swap chain size until the onscreen video size is stable for
-// at least 30 frames.
-gfx::Size DCLayerTree::SwapChainPresenter::GetStableSwapChainSize(
-    gfx::Size requested_swap_chain_size) {
-  if (requested_swap_chain_size == swap_chain_size_ ||
-      swap_chain_size_.IsEmpty() || requested_swap_chain_size.IsEmpty()) {
-    frames_since_stable_swap_chain_resize_ = 0;
-    last_requested_swap_chain_size_ = requested_swap_chain_size;
-    return requested_swap_chain_size;
-  }
-
-  if (requested_swap_chain_size == last_requested_swap_chain_size_) {
-    frames_since_stable_swap_chain_resize_++;
-    // Resize after seeing the same requested size for 30 consecutive frames.
-    if (frames_since_stable_swap_chain_resize_ >=
-        kNumFramesBeforeSwapChainResize) {
-      frames_since_stable_swap_chain_resize_ = 0;
-      last_requested_swap_chain_size_ = requested_swap_chain_size;
-      return requested_swap_chain_size;
-    }
-  } else {
-    frames_since_stable_swap_chain_resize_ = 0;
-    last_requested_swap_chain_size_ = requested_swap_chain_size;
-  }
-
-  // Keep the previous swap chain size
-  return swap_chain_size_;
-}
-
 bool DCLayerTree::SwapChainPresenter::UploadVideoImages(
     gl::GLImageMemory* y_image_memory,
     gl::GLImageMemory* uv_image_memory) {
@@ -856,11 +827,6 @@
     gfx::Size ceiled_input_size =
         gfx::ToCeiledSize(params.contents_rect.size());
     swap_chain_size.SetToMin(ceiled_input_size);
-    // We don't want to recreate the swap chain too frequently, so override the
-    // swap chain size with GetStableSwapChainSize().
-    // TODO(magchen): This might cause overlay downscaling if the new size is
-    // bigger than display_rect.
-    swap_chain_size = GetStableSwapChainSize(swap_chain_size);
   }
 
   // 4:2:2 subsampled formats like YUY2 must have an even width, and 4:2:0
@@ -985,7 +951,7 @@
     *needs_commit = true;
 
   bool swap_chain_resized = swap_chain_size_ != swap_chain_size;
-  bool use_yuv_swap_chain = ShouldUseYUVSwapChain();
+  bool use_yuv_swap_chain = ShouldUseYUVSwapChain(params.protected_video_type);
   bool toggle_yuv_swapchain = use_yuv_swap_chain != is_yuv_swapchain_;
   bool toggle_protected_video =
       protected_video_type_ != params.protected_video_type;
@@ -1516,6 +1482,13 @@
       return false;
     }
 
+    // This will fail if the D3D device is "Microsoft Basic Display Adapter".
+    Microsoft::WRL::ComPtr<ID3D11VideoDevice> video_device;
+    if (FAILED(d3d11_device.CopyTo(video_device.GetAddressOf()))) {
+      DLOG(ERROR) << "Failed to retrieve video device";
+      return false;
+    }
+
     // This will fail if DirectComposition DLL can't be loaded.
     Microsoft::WRL::ComPtr<IDCompositionDevice2> dcomp_device =
         gl::QueryDirectCompositionDevice(d3d11_device);
@@ -1567,11 +1540,6 @@
 }
 
 // static
-int DirectCompositionSurfaceWin::GetNumFramesBeforeSwapChainResizeForTesting() {
-  return kNumFramesBeforeSwapChainResize;
-}
-
-// static
 void DirectCompositionSurfaceWin::SetPreferNV12OverlaysForTesting() {
   g_overlay_format_used = OverlayFormat::kNV12;
   g_overlay_dxgi_format_used = DXGI_FORMAT_NV12;
diff --git a/gpu/ipc/service/direct_composition_surface_win.h b/gpu/ipc/service/direct_composition_surface_win.h
index b01b811..eb8c7db 100644
--- a/gpu/ipc/service/direct_composition_surface_win.h
+++ b/gpu/ipc/service/direct_composition_surface_win.h
@@ -60,8 +60,6 @@
 
   static void SetScaledOverlaysSupportedForTesting(bool value);
 
-  static int GetNumFramesBeforeSwapChainResizeForTesting();
-
   static void SetPreferNV12OverlaysForTesting();
 
   bool InitializeNativeWindow();
diff --git a/gpu/ipc/service/direct_composition_surface_win_unittest.cc b/gpu/ipc/service/direct_composition_surface_win_unittest.cc
index 77a40174..9265d50 100644
--- a/gpu/ipc/service/direct_composition_surface_win_unittest.cc
+++ b/gpu/ipc/service/direct_composition_surface_win_unittest.cc
@@ -409,94 +409,6 @@
   DestroySurface(std::move(surface));
 }
 
-// Ensure no frequent swap chain recreation due to size changes
-TEST(DirectCompositionSurfaceTest, NoFrequentSwapchainRecreation) {
-  if (!CheckIfDCSupported())
-    return;
-
-  TestImageTransportSurfaceDelegate delegate;
-  scoped_refptr<DirectCompositionSurfaceWin> surface(
-      new DirectCompositionSurfaceWin(nullptr, delegate.AsWeakPtr(),
-                                      ui::GetHiddenWindow()));
-  EXPECT_TRUE(surface->Initialize());
-
-  scoped_refptr<gl::GLContext> context =
-      gl::init::CreateGLContext(nullptr, surface.get(), gl::GLContextAttribs());
-  EXPECT_TRUE(context->MakeCurrent(surface.get()));
-
-  surface->SetEnableDCLayers(true);
-  surface->SetScaledOverlaysSupportedForTesting(true);
-
-  Microsoft::WRL::ComPtr<ID3D11Device> d3d11_device =
-      gl::QueryD3D11DeviceObjectFromANGLE();
-
-  // Initial frame
-  gfx::Size texture_size(50, 50);
-  Microsoft::WRL::ComPtr<ID3D11Texture2D> texture =
-      CreateNV12Texture(d3d11_device, texture_size, false);
-
-  scoped_refptr<gl::GLImageDXGI> image_dxgi(
-      new gl::GLImageDXGI(texture_size, nullptr));
-  image_dxgi->SetTexture(texture, 0);
-  image_dxgi->SetColorSpace(gfx::ColorSpace::CreateREC709());
-
-  gfx::Size window_size(100, 100);
-  ui::DCRendererLayerParams params(
-      false, gfx::Rect(), 1, gfx::Transform(),
-      std::vector<scoped_refptr<gl::GLImage>>{image_dxgi},
-      gfx::RectF(gfx::Rect(texture_size)), gfx::Rect(window_size), 0, 0, 1.0, 0,
-      ui::ProtectedVideoType::kClear);
-
-  surface->ScheduleDCLayer(params);
-  EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers(base::DoNothing()));
-
-  Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain =
-      surface->GetLayerSwapChainForTesting(0);
-  ASSERT_TRUE(swap_chain);
-
-  // A new frame with the same swapchian size
-  surface->ScheduleDCLayer(params);
-  EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers(base::DoNothing()));
-
-  Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain2 =
-      surface->GetLayerSwapChainForTesting(0);
-  EXPECT_EQ(swap_chain2.Get(), swap_chain.Get());
-
-  // Start to change the swapchain size. It should not be recreated for the
-  // first few frames after the size change.
-  ui::DCRendererLayerParams params3(
-      false, gfx::Rect(), 1, gfx::Transform(),
-      std::vector<scoped_refptr<gl::GLImage>>{image_dxgi},
-      gfx::RectF(gfx::Rect(texture_size)), gfx::Rect(0, 0, 25, 25), 0, 0, 1.0,
-      0, ui::ProtectedVideoType::kClear);
-
-  for (int i = 1; i <= 5; ++i) {
-    surface->ScheduleDCLayer(params3);
-    EXPECT_EQ(gfx::SwapResult::SWAP_ACK,
-              surface->SwapBuffers(base::DoNothing()));
-  }
-
-  Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain3 =
-      surface->GetLayerSwapChainForTesting(0);
-  EXPECT_EQ(swap_chain3.Get(), swap_chain.Get());
-
-  // 31 frames with the same swapchain size
-  int frames = surface->GetNumFramesBeforeSwapChainResizeForTesting() + 1;
-  for (int i = 6; i <= frames; ++i) {
-    surface->ScheduleDCLayer(params3);
-    EXPECT_EQ(gfx::SwapResult::SWAP_ACK,
-              surface->SwapBuffers(base::DoNothing()));
-  }
-
-  // The swapchain should be recreated now
-  Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain4 =
-      surface->GetLayerSwapChainForTesting(0);
-  EXPECT_NE(swap_chain4.Get(), swap_chain.Get());
-
-  context = nullptr;
-  DestroySurface(std::move(surface));
-}
-
 // Ensure the swapchain size is set to the correct size if HW overlay scaling
 // is support - swapchain should be the minimum of the decoded
 // video buffer size and the onscreen video size
@@ -1197,5 +1109,80 @@
   DestroySurface(std::move(surface));
 }
 
+TEST_F(DirectCompositionPixelTest, ResizeVideoLayer) {
+  if (!CheckIfDCSupported())
+    return;
+  InitializeSurface();
+  surface_->SetEnableDCLayers(true);
+
+  gfx::Size window_size(100, 100);
+  EXPECT_TRUE(surface_->Resize(window_size, 1.0,
+                               gl::GLSurface::ColorSpace::UNSPECIFIED, true));
+  EXPECT_TRUE(surface_->SetDrawRectangle(gfx::Rect(window_size)));
+
+  glClearColor(0.0, 0.0, 0.0, 1.0);
+  glClear(GL_COLOR_BUFFER_BIT);
+
+  Microsoft::WRL::ComPtr<ID3D11Device> d3d11_device =
+      gl::QueryD3D11DeviceObjectFromANGLE();
+
+  gfx::Size texture_size(50, 50);
+  Microsoft::WRL::ComPtr<ID3D11Texture2D> texture =
+      CreateNV12Texture(d3d11_device, texture_size, true);
+  Microsoft::WRL::ComPtr<IDXGIResource1> resource;
+  texture.CopyTo(resource.GetAddressOf());
+  HANDLE handle = 0;
+  resource->CreateSharedHandle(nullptr, DXGI_SHARED_RESOURCE_READ, nullptr,
+                               &handle);
+  // The format doesn't matter, since we aren't binding.
+  scoped_refptr<gl::GLImageDXGIHandle> image_dxgi(
+      new gl::GLImageDXGIHandle(texture_size, 0, gfx::BufferFormat::RGBA_8888));
+  ASSERT_TRUE(image_dxgi->Initialize(base::win::ScopedHandle(handle)));
+
+  {
+    gfx::RectF contents_rect = gfx::RectF(gfx::Rect(texture_size));
+    ui::DCRendererLayerParams params(
+        false, gfx::Rect(), 1, gfx::Transform(),
+        std::vector<scoped_refptr<gl::GLImage>>{image_dxgi}, contents_rect,
+        gfx::Rect(window_size), 0, 0, 1.0, 0, ui::ProtectedVideoType::kClear);
+
+    surface_->ScheduleDCLayer(params);
+
+    EXPECT_EQ(gfx::SwapResult::SWAP_ACK,
+              surface_->SwapBuffers(base::DoNothing()));
+
+    Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain =
+        surface_->GetLayerSwapChainForTesting(0);
+    ASSERT_TRUE(swap_chain);
+
+    DXGI_SWAP_CHAIN_DESC1 desc;
+    EXPECT_TRUE(SUCCEEDED(swap_chain->GetDesc1(&desc)));
+    EXPECT_EQ(desc.Width, 50u);
+    EXPECT_EQ(desc.Height, 50u);
+  }
+
+  {
+    gfx::RectF contents_rect(30, 30);
+    ui::DCRendererLayerParams params(
+        false, gfx::Rect(), 1, gfx::Transform(),
+        std::vector<scoped_refptr<gl::GLImage>>{image_dxgi}, contents_rect,
+        gfx::Rect(window_size), 0, 0, 1.0, 0, ui::ProtectedVideoType::kClear);
+
+    surface_->ScheduleDCLayer(params);
+
+    EXPECT_EQ(gfx::SwapResult::SWAP_ACK,
+              surface_->SwapBuffers(base::DoNothing()));
+
+    Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain =
+        surface_->GetLayerSwapChainForTesting(0).Get();
+    ASSERT_TRUE(swap_chain);
+
+    DXGI_SWAP_CHAIN_DESC1 desc;
+    EXPECT_TRUE(SUCCEEDED(swap_chain->GetDesc1(&desc)));
+    EXPECT_EQ(desc.Width, 30u);
+    EXPECT_EQ(desc.Height, 30u);
+  }
+}
+
 }  // namespace
 }  // namespace gpu
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm
index b284f1b0..ccfbaffb 100644
--- a/ios/chrome/app/main_controller.mm
+++ b/ios/chrome/app/main_controller.mm
@@ -118,6 +118,7 @@
 #import "ios/chrome/browser/ui/first_run/first_run_util.h"
 #import "ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.h"
 #include "ios/chrome/browser/ui/history/history_coordinator.h"
+#import "ios/chrome/browser/ui/main/browser_coordinator.h"
 #import "ios/chrome/browser/ui/main/browser_view_wrangler.h"
 #import "ios/chrome/browser/ui/main/tab_switcher.h"
 #import "ios/chrome/browser/ui/main/view_controller_swapping.h"
@@ -1817,6 +1818,11 @@
   [self activateBVCAndMakeCurrentBVCPrimary];
 }
 
+- (BrowserCoordinator*)currentBrowserCoordinator {
+  DCHECK(_browserViewWrangler);
+  return _browserViewWrangler.currentBrowserCoordinator;
+}
+
 #pragma mark - Tab closure handlers
 
 - (void)lastIncognitoTabClosed {
@@ -2410,8 +2416,9 @@
     DCHECK(self.currentBVC);
     DCHECK(![self isTabSwitcherActive]);
     // This will dismiss the SSO view controller.
-    [self.currentBVC clearPresentedStateWithCompletion:completion
-                                        dismissOmnibox:dismissOmnibox];
+    [self.currentBrowserCoordinator
+        clearPresentedStateWithCompletion:completion
+                           dismissOmnibox:dismissOmnibox];
   };
   ProceduralBlock completionWithoutBVC = ^{
     // |self.currentBVC| may exist but tab switcher should be active.
diff --git a/ios/chrome/browser/autofill/autofill_controller_js_unittest.mm b/ios/chrome/browser/autofill/autofill_controller_js_unittest.mm
index 718883b3..d80cc14a 100644
--- a/ios/chrome/browser/autofill/autofill_controller_js_unittest.mm
+++ b/ios/chrome/browser/autofill/autofill_controller_js_unittest.mm
@@ -1603,6 +1603,8 @@
     @"name" : @"TestForm",
     @"fields" : @[
       @{
+        @"aria_description" : @"",
+        @"aria_label" : @"",
         @"name" : @"firstname",
         @"name_attribute" : @"firstname",
         @"id_attribute" : @"firstname",
@@ -1616,6 +1618,8 @@
         @"label" : @"* First name:"
       },
       @{
+        @"aria_description" : @"",
+        @"aria_label" : @"",
         @"name" : @"vehicle",
         @"name_attribute" : @"vehicle",
         @"id_attribute" : @"vehicle1",
@@ -1628,6 +1632,8 @@
         @"label" : @"Bicycle"
       },
       @{
+        @"aria_description" : @"",
+        @"aria_label" : @"",
         @"name" : @"vehicle",
         @"name_attribute" : @"vehicle",
         @"id_attribute" : @"vehicle2",
@@ -1640,6 +1646,8 @@
         @"label" : @"Automobile"
       },
       @{
+        @"aria_description" : @"",
+        @"aria_label" : @"",
         @"name" : @"vehicle",
         @"name_attribute" : @"vehicle",
         @"id_attribute" : @"vehicle3",
@@ -1652,6 +1660,8 @@
         @"label" : @"Missile"
       },
       @{
+        @"aria_description" : @"",
+        @"aria_label" : @"",
         @"name" : @"nameintableth",
         @"name_attribute" : @"nameintableth",
         @"id_attribute" : @"nameintableth",
@@ -1665,6 +1675,8 @@
         @"label" : @"* First name:"
       },
       @{
+        @"aria_description" : @"",
+        @"aria_label" : @"",
         @"name" : @"emailtableth",
         @"name_attribute" : @"",
         @"id_attribute" : @"emailtableth",
@@ -1678,6 +1690,8 @@
         @"label" : @"Email:"
       },
       @{
+        @"aria_description" : @"",
+        @"aria_label" : @"",
         @"name" : @"pwd",
         @"name_attribute" : @"pwd",
         @"id_attribute" : @"pwd",
@@ -1692,6 +1706,8 @@
         @"label" : @"* Password:"
       },
       @{
+        @"aria_description" : @"",
+        @"aria_label" : @"",
         @"name" : @"state",
         @"name_attribute" : @"state",
         @"id_attribute" : @"state",
diff --git a/ios/chrome/browser/autofill/autofill_tab_helper.mm b/ios/chrome/browser/autofill/autofill_tab_helper.mm
index b93ee3fe8..2f99dc1 100644
--- a/ios/chrome/browser/autofill/autofill_tab_helper.mm
+++ b/ios/chrome/browser/autofill/autofill_tab_helper.mm
@@ -13,8 +13,6 @@
 #error "This file requires ARC support."
 #endif
 
-DEFINE_WEB_STATE_USER_DATA_KEY(AutofillTabHelper);
-
 AutofillTabHelper::~AutofillTabHelper() = default;
 
 // static
diff --git a/ios/chrome/browser/autofill/form_suggestion_tab_helper.mm b/ios/chrome/browser/autofill/form_suggestion_tab_helper.mm
index ca5961a..8d4e1aa5 100644
--- a/ios/chrome/browser/autofill/form_suggestion_tab_helper.mm
+++ b/ios/chrome/browser/autofill/form_suggestion_tab_helper.mm
@@ -12,8 +12,6 @@
 #error "This file requires ARC support."
 #endif
 
-DEFINE_WEB_STATE_USER_DATA_KEY(FormSuggestionTabHelper);
-
 FormSuggestionTabHelper::~FormSuggestionTabHelper() = default;
 
 // static
diff --git a/ios/chrome/browser/autofill/js_autofill_manager_unittest.mm b/ios/chrome/browser/autofill/js_autofill_manager_unittest.mm
index e88c4379..4c43956 100644
--- a/ios/chrome/browser/autofill/js_autofill_manager_unittest.mm
+++ b/ios/chrome/browser/autofill/js_autofill_manager_unittest.mm
@@ -91,17 +91,24 @@
 // Tests forms extraction method
 // (fetchFormsWithRequirements:minimumRequiredFieldsCount:completionHandler:).
 TEST_F(JsAutofillManagerTest, ExtractForms) {
-  LoadHtml(
-      @"<html><body><form name='testform' method='post'>"
-       "<input type='text' id='firstname' name='firstname'/>"
-       "<input type='text' id='lastname' name='lastname'/>"
-       "<input type='email' id='email' name='email'/>"
-       "</form></body></html>");
+  LoadHtml(@"<html><body><form name='testform' method='post'>"
+            "<div id='div1'>Last Name</div>"
+            "<div id='div2'>Email Address</div>"
+            "<input type='text' id='firstname' name='firstname'/"
+            "    aria-label='First Name'>"
+            "<input type='text' id='lastname' name='lastname'"
+            "    aria-labelledby='div1'/>"
+            "<input type='email' id='email' name='email'"
+            "    aria-describedby='div2'/>"
+            "</form>"
+            "</body></html>");
 
   NSDictionary* expected = @{
     @"name" : @"testform",
     @"fields" : @[
       @{
+        @"aria_description" : @"",
+        @"aria_label" : @"First Name",
         @"name" : @"firstname",
         @"name_attribute" : @"firstname",
         @"id_attribute" : @"firstname",
@@ -112,9 +119,11 @@
         @"is_checkable" : @false,
         @"is_focusable" : @true,
         @"value" : @"",
-        @"label" : @""
+        @"label" : @"First Name"
       },
       @{
+        @"aria_description" : @"",
+        @"aria_label" : @"Last Name",
         @"name" : @"lastname",
         @"name_attribute" : @"lastname",
         @"id_attribute" : @"lastname",
@@ -128,6 +137,100 @@
         @"label" : @""
       },
       @{
+        @"aria_description" : @"Email Address",
+        @"aria_label" : @"",
+        @"name" : @"email",
+        @"name_attribute" : @"email",
+        @"id_attribute" : @"email",
+        @"identifier" : @"email",
+        @"form_control_type" : @"email",
+        @"max_length" : GetDefaultMaxLength(),
+        @"should_autocomplete" : @true,
+        @"is_checkable" : @false,
+        @"is_focusable" : @true,
+        @"value" : @"",
+        @"label" : @""
+      }
+    ]
+  };
+
+  __block BOOL block_was_called = NO;
+  __block NSString* result;
+  [manager_
+      fetchFormsWithMinimumRequiredFieldsCount:
+          autofill::MinRequiredFieldsForHeuristics()
+                                       inFrame:web::GetMainWebFrame(web_state())
+                             completionHandler:^(NSString* actualResult) {
+                               block_was_called = YES;
+                               result = [actualResult copy];
+                             }];
+  base::test::ios::WaitUntilCondition(^bool() {
+    return block_was_called;
+  });
+
+  NSArray* resultArray = [NSJSONSerialization
+      JSONObjectWithData:[result dataUsingEncoding:NSUTF8StringEncoding]
+                 options:0
+                   error:nil];
+  EXPECT_NSNE(nil, resultArray);
+
+  NSDictionary* form = [resultArray firstObject];
+  [expected enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL* stop) {
+    EXPECT_NSEQ(form[key], obj);
+  }];
+}
+
+// Tests forms extraction method
+// (fetchFormsWithRequirements:minimumRequiredFieldsCount:completionHandler:).
+TEST_F(JsAutofillManagerTest, ExtractForms2) {
+  LoadHtml(@"<html><body><form name='testform' method='post'>"
+            "<input type='text' id='firstname' name='firstname'/"
+            "    aria-label='First Name'>"
+            "<input type='text' id='lastname' name='lastname'"
+            "    aria-labelledby='div1'/>"
+            "<input type='email' id='email' name='email'"
+            "    aria-describedby='div2'/>"
+            "</form>"
+            "<div id='div1'>Last Name</div>"
+            "<div id='div2'>Email Address</div>"
+            "</body></html>");
+
+  NSDictionary* expected = @{
+    @"name" : @"testform",
+    @"fields" : @[
+      @{
+        @"aria_description" : @"",
+        @"aria_label" : @"First Name",
+        @"name" : @"firstname",
+        @"name_attribute" : @"firstname",
+        @"id_attribute" : @"firstname",
+        @"identifier" : @"firstname",
+        @"form_control_type" : @"text",
+        @"max_length" : GetDefaultMaxLength(),
+        @"should_autocomplete" : @true,
+        @"is_checkable" : @false,
+        @"is_focusable" : @true,
+        @"value" : @"",
+        @"label" : @"First Name"
+      },
+      @{
+        @"aria_description" : @"",
+        @"aria_label" : @"Last Name",
+        @"name" : @"lastname",
+        @"name_attribute" : @"lastname",
+        @"id_attribute" : @"lastname",
+        @"identifier" : @"lastname",
+        @"form_control_type" : @"text",
+        @"max_length" : GetDefaultMaxLength(),
+        @"should_autocomplete" : @true,
+        @"is_checkable" : @false,
+        @"is_focusable" : @true,
+        @"value" : @"",
+        @"label" : @""
+      },
+      @{
+        @"aria_description" : @"Email Address",
+        @"aria_label" : @"",
         @"name" : @"email",
         @"name_attribute" : @"email",
         @"id_attribute" : @"email",
diff --git a/ios/chrome/browser/passwords/password_controller_js_unittest.mm b/ios/chrome/browser/passwords/password_controller_js_unittest.mm
index a33754b..34db38c 100644
--- a/ios/chrome/browser/passwords/password_controller_js_unittest.mm
+++ b/ios/chrome/browser/passwords/password_controller_js_unittest.mm
@@ -148,12 +148,14 @@
           @"chromium.test/generic_submit\",\"name_attribute\":\"login_form\","
           @"\"id_attribute\":\"\",\"fields\":[{\"identifier\":\"name\","
           @"\"name\":\"name\",\"name_attribute\":\"name\",\"id_attribute\":"
-          @"\"\",\"form_control_type\":\"text\",\"should_autocomplete\":"
-          @"true,\"is_focusable\":true,\"max_length\":524288,\"is_checkable\":"
-          @"false,\"value\":\"\",\"label\":\"Name:\"},{\"identifier\":"
+          @"\"\",\"form_control_type\":\"text\",\"aria_label\":\"\","
+          @"\"aria_description\":\"\",\"should_autocomplete\":true,"
+          @"\"is_focusable\":true,\"max_length\":524288,\"is_checkable\":false,"
+          @"\"value\":\"\",\"label\":\"Name:\"},{\"identifier\":"
           @"\"password\",\"name\":\"password\",\"name_attribute\":\"password\","
-          @"\"id_attribute\":\"\",\"form_control_type\":"
-          @"\"password\",\"should_autocomplete\":true,\"is_focusable\":true,"
+          @"\"id_attribute\":\"\",\"form_control_type\":\"password\","
+          @"\"aria_label\":\"\",\"aria_description\":\"\","
+          @"\"should_autocomplete\":true,\"is_focusable\":true,"
           @"\"max_length\":524288,\"is_checkable\":false,\"value\":\"\","
           @"\"label\":\"Password:\"}]}]",
           base_url.c_str()];
@@ -185,25 +187,30 @@
           @"generic_submit\",\"name_attribute\":\"\",\"id_attribute\":"
           @"\"login_form1\",\"fields\":[{\"identifier\":\"name\","
           @"\"name\":\"name\",\"name_attribute\":\"name\",\"id_attribute\":"
-          @"\"\",\"form_control_type\":\"text\",\"should_autocomplete\":"
+          @"\"\",\"form_control_type\":\"text\",\"aria_label\":\"\","
+          @"\"aria_description\":\"\",\"should_autocomplete\":"
           @"true,\"is_focusable\":true,\"max_length\":524288,\"is_checkable\":"
           @"false,\"value\":\"\",\"label\":\"Name:\"},{\"identifier\":"
           @"\"password\",\"name\":\"password\",\"name_attribute\":\"password\","
-          @"\"id_attribute\":\"\",\"form_control_type\":"
-          @"\"password\",\"should_autocomplete\":true,\"is_focusable\":true,"
+          @"\"id_attribute\":\"\",\"form_control_type\":\"password\","
+          @"\"aria_label\":\"\",\"aria_description\":\"\","
+          @"\"should_autocomplete\":true,\"is_focusable\":true,"
           @"\"max_length\":524288,\"is_checkable\":false,\"value\":\"\","
           @"\"label\":\"Password:\"}]},{\"name\":\"login_form2\",\"origin\":"
           @"\"https://chromium.test/\",\"action\":\"https://chromium.test/"
           @"generic_s2\",\"name_attribute\":\"login_form2\","
           @"\"id_attribute\":\"\",\"fields\":[{\"identifier\":\"name2\","
           @"\"name\":\"name2\",\"name_attribute\":\"name2\",\"id_attribute\":"
-          @"\"\",\"form_control_type\":\"text\",\"should_autocomplete\":"
+          @"\"\",\"form_control_type\":\"text\",\"aria_label\":\"\","
+          @"\"aria_description\":\"\",\"should_autocomplete\":"
           @"true,\"is_focusable\":true,\"max_length\":524288,\"is_checkable\":"
           @"false,\"value\":\"\",\"label\":\"Name:\"},{\"identifier\":"
           @"\"password2\",\"name\":\"password2\",\"name_attribute\":"
           @"\"password2\",\"id_attribute\":\"\",\"form_control_type\":"
-          @"\"password\",\"should_autocomplete\":true,\"is_focusable\":true,"
-          @"\"max_length\":524288,\"is_checkable\":false,\"value\":\"\","
+          @"\"password\",\"aria_label\":\"\",\"aria_description\":\"\","
+          @"\"should_autocomplete\":true,\"is_focusable\":true,"
+          @"\"max_length\":524288,\"is_checkable\":false,"
+          @"\"value\":\"\","
           @"\"label\":\"Password:\"}]}]",
           base_url.c_str(), base_url.c_str()];
 
@@ -231,12 +238,15 @@
           @"\"name_attribute\":\"np\",\"id_attribute\":\"np1\","
           @"\"fields\":[{\"identifier\":\"name\",\"name\":\"name\","
           @"\"name_attribute\":\"name\",\"id_attribute\":\"\",\"form_"
-          @"control_type\":\"text\",\"should_autocomplete\":true,\"is_"
+          @"control_type\":\"text\",\"aria_label\":\"\","
+          @"\"aria_description\":\"\",\"should_autocomplete\":true,\"is_"
           @"focusable\":true,\"max_length\":524288,\"is_checkable\":false,"
           @"\"value\":\"\",\"label\":\"Name:\"},{\"identifier\":\"password\","
           @"\"name\":\"password\",\"name_attribute\":\"password\","
-          @"\"id_attribute\":\"\",\"form_control_type\":\"password\",\"should_"
-          @"autocomplete\":true,\"is_focusable\":true,\"max_length\":524288,"
+          @"\"id_attribute\":\"\",\"form_control_type\":\"password\","
+          @"\"aria_label\":\"\",\"aria_description\":\"\","
+          @"\"should_autocomplete\":true,\"is_focusable\":true,"
+          @"\"max_length\":524288,"
           @"\"is_checkable\":false,\"value\":\"\",\"label\":\"Password:\"}]}",
           base_url.c_str(), base_url.c_str()];
 
@@ -266,12 +276,15 @@
           @"\"name_attribute\":\"login_form\",\"id_attribute\":\"\","
           @"\"fields\":[{\"identifier\":\"name\",\"name\":\"name\","
           @"\"name_attribute\":\"name\",\"id_attribute\":\"\",\"form_"
-          @"control_type\":\"text\",\"should_autocomplete\":true,\"is_"
+          @"control_type\":\"text\",\"aria_label\":\"\","
+          @"\"aria_description\":\"\",\"should_autocomplete\":true,\"is_"
           @"focusable\":true,\"max_length\":524288,\"is_checkable\":false,"
           @"\"value\":\"\",\"label\":\"Name:\"},{\"identifier\":\"password\","
           @"\"name\":\"password\",\"name_attribute\":\"password\","
-          @"\"id_attribute\":\"\",\"form_control_type\":\"password\",\"should_"
-          @"autocomplete\":true,\"is_focusable\":true,\"max_length\":524288,"
+          @"\"id_attribute\":\"\",\"form_control_type\":\"password\","
+          @"\"aria_label\":\"\",\"aria_description\":\"\","
+          @"\"should_autocomplete\":true,\"is_focusable\":true,"
+          @"\"max_length\":524288,"
           @"\"is_checkable\":false,\"value\":\"\",\"label\":\"Password:\"}]}]",
           base_url.c_str(), base_url.c_str()];
   EXPECT_NSEQ(result, ExecuteJavaScriptWithFormat(
@@ -321,12 +334,16 @@
           @"\"id_attribute\":\"login_form\",\"fields\":"
           @"[{\"identifier\":\"username\","
           @"\"name\":\"username\",\"name_attribute\":\"username\","
-          @"\"id_attribute\":\"\",\"form_control_type\":\"text\",\"should_"
-          @"autocomplete\":true,\"is_focusable\":true,\"max_length\":524288,"
+          @"\"id_attribute\":\"\",\"form_control_type\":\"text\","
+          @"\"aria_label\":\"\",\"aria_description\":\"\","
+          @"\"should_autocomplete\":true,\"is_focusable\":true,"
+          @"\"max_length\":524288,"
           @"\"is_checkable\":false,\"value\":\"user1\",\"label\":\"Name:\"},{"
           @"\"identifier\":\"password\",\"name\":\"password\","
           @"\"name_attribute\":\"password\",\"id_attribute\":\"\","
-          @"\"form_control_type\":\"password\",\"should_autocomplete\":true,"
+          @"\"form_control_type\":\"password\","
+          @"\"aria_label\":\"\",\"aria_description\":\"\","
+          @"\"should_autocomplete\":true,"
           @"\"is_focusable\":true,\"max_length\":524288,\"is_checkable\":false,"
           @"\"value\":\"password1\",\"label\":\"Password:\"}],"
           @"\"command\":\"passwordForm.submitButtonClick\"}",
diff --git a/ios/chrome/browser/tabs/tab_helper_util.mm b/ios/chrome/browser/tabs/tab_helper_util.mm
index 3a56099..ce02977 100644
--- a/ios/chrome/browser/tabs/tab_helper_util.mm
+++ b/ios/chrome/browser/tabs/tab_helper_util.mm
@@ -48,6 +48,7 @@
 #import "ios/chrome/browser/web/features.h"
 #import "ios/chrome/browser/web/font_size_tab_helper.h"
 #import "ios/chrome/browser/web/image_fetch_tab_helper.h"
+#import "ios/chrome/browser/web/java_script_console/java_script_console_tab_helper.h"
 #import "ios/chrome/browser/web/load_timing_tab_helper.h"
 #import "ios/chrome/browser/web/network_activity_indicator_tab_helper.h"
 #import "ios/chrome/browser/web/page_placeholder_tab_helper.h"
@@ -84,6 +85,7 @@
   BlockedPopupTabHelper::CreateForWebState(web_state);
   FindTabHelper::CreateForWebState(web_state);
   StoreKitTabHelper::CreateForWebState(web_state);
+  JavaScriptConsoleTabHelper::CreateForWebState(tab.webState);
   if (base::FeatureList::IsEnabled(kITunesUrlsStoreKitHandling)) {
     ITunesUrlsHandlerTabHelper::CreateForWebState(web_state);
   }
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.mm b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.mm
index d00ea0e..1e9230e 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.mm
@@ -70,6 +70,7 @@
   popoverPresentationController.permittedArrowDirections =
       UIPopoverArrowDirectionUp | UIMenuControllerArrowDown;
   popoverPresentationController.delegate = self;
+  popoverPresentationController.backgroundColor = UIColor.whiteColor;
 }
 
 #pragma mark - ChromeCoordinator
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/fallback_view_controller.mm b/ios/chrome/browser/ui/autofill/manual_fill/fallback_view_controller.mm
index 74d9e31c..4087f90 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/fallback_view_controller.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/fallback_view_controller.mm
@@ -27,7 +27,7 @@
 constexpr float PopoverPreferredWidth = 320;
 
 // This is the maximum height used for |self.preferredContentSize|.
-constexpr float PopoverMaxHeight = 250;
+constexpr float PopoverMaxHeight = 360;
 
 }  // namespace
 
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address_cell.mm b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address_cell.mm
index 37a16d7..44a67b5 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address_cell.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address_cell.mm
@@ -4,6 +4,7 @@
 
 #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address_cell.h"
 
+#include "base/metrics/user_metrics.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_cell_utils.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_content_delegate.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/uicolor_manualfill.h"
@@ -487,6 +488,35 @@
 }
 
 - (void)userDidTapAddressInfo:(UIButton*)sender {
+  const char* metricsAction = nullptr;
+  if (sender == self.firstNameButton) {
+    metricsAction = "ManualFallback_Profiles_SelectFirstName";
+  } else if (sender == self.middleNameButton) {
+    metricsAction = "ManualFallback_Profiles_SelectMiddleName";
+  } else if (sender == self.lastNameButton) {
+    metricsAction = "ManualFallback_Profiles_SelectLastName";
+  } else if (sender == self.companyButton) {
+    metricsAction = "ManualFallback_Profiles_Company";
+  } else if (sender == self.line1Button) {
+    metricsAction = "ManualFallback_Profiles_Address1";
+  } else if (sender == self.line2Button) {
+    metricsAction = "ManualFallback_Profiles_Address2";
+  } else if (sender == self.zipButton) {
+    metricsAction = "ManualFallback_Profiles_Zip";
+  } else if (sender == self.cityButton) {
+    metricsAction = "ManualFallback_Profiles_City";
+  } else if (sender == self.stateButton) {
+    metricsAction = "ManualFallback_Profiles_State";
+  } else if (sender == self.countryButton) {
+    metricsAction = "ManualFallback_Profiles_Country";
+  } else if (sender == self.phoneNumberButton) {
+    metricsAction = "ManualFallback_Profiles_PhoneNumber";
+  } else if (sender == self.emailAddressButton) {
+    metricsAction = "ManualFallback_Profiles_EmailAddress";
+  }
+  DCHECK(metricsAction);
+  base::RecordAction(base::UserMetricsAction(metricsAction));
+
   [self.delegate userDidPickContent:sender.titleLabel.text
                     isPasswordField:NO
                       requiresHTTPS:NO];
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_cell.mm b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_cell.mm
index 473dff3..831ab70 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_cell.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_cell.mm
@@ -4,6 +4,7 @@
 
 #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_cell.h"
 
+#include "base/metrics/user_metrics.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/card_list_delegate.h"
@@ -227,6 +228,8 @@
 }
 
 - (void)userDidTapCardNumber:(UIButton*)sender {
+  base::RecordAction(
+      base::UserMetricsAction("ManualFallback_CreditCard_SelectCardNumber"));
   NSString* number = self.card.number;
   if (!number.length) {
     [self.navigationDelegate requestFullCreditCard:self.card];
@@ -238,6 +241,17 @@
 }
 
 - (void)userDidTapCardInfo:(UIButton*)sender {
+  const char* metricsAction = nullptr;
+  if (sender == self.cardholderButton) {
+    metricsAction = "ManualFallback_CreditCard_SelectCardholderName";
+  } else if (sender == self.expirationMonthButton) {
+    metricsAction = "ManualFallback_CreditCard_SelectExpirationMonth";
+  } else if (sender == self.expirationYearButton) {
+    metricsAction = "ManualFallback_CreditCard_SelectExpirationYear";
+  }
+  DCHECK(metricsAction);
+  base::RecordAction(base::UserMetricsAction(metricsAction));
+
   [self.contentDelegate userDidPickContent:sender.titleLabel.text
                            isPasswordField:NO
                              requiresHTTPS:NO];
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm
index b2ff9aff..ba5bba1 100644
--- a/ios/chrome/browser/ui/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -57,7 +57,6 @@
 #include "ios/chrome/browser/chrome_url_constants.h"
 #include "ios/chrome/browser/chrome_url_util.h"
 #import "ios/chrome/browser/download/download_manager_tab_helper.h"
-#import "ios/chrome/browser/download/pass_kit_tab_helper.h"
 #include "ios/chrome/browser/experimental_flags.h"
 #import "ios/chrome/browser/favicon/favicon_loader.h"
 #include "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h"
@@ -132,7 +131,6 @@
 #import "ios/chrome/browser/ui/dialogs/dialog_presenter.h"
 #import "ios/chrome/browser/ui/dialogs/java_script_dialog_presenter_impl.h"
 #import "ios/chrome/browser/ui/download/download_manager_coordinator.h"
-#import "ios/chrome/browser/ui/download/pass_kit_coordinator.h"
 #import "ios/chrome/browser/ui/elements/activity_overlay_coordinator.h"
 #import "ios/chrome/browser/ui/external_file_controller.h"
 #import "ios/chrome/browser/ui/find_bar/find_bar_controller_ios.h"
@@ -549,9 +547,6 @@
   // Coordinator for the language selection UI.
   LanguageSelectionCoordinator* _languageSelectionCoordinator;
 
-  // Coordinator for the PassKit UI presentation.
-  PassKitCoordinator* _passKitCoordinator;
-
   // Fake status bar view used to blend the toolbar into the status bar.
   UIView* _fakeStatusBarView;
 
@@ -909,9 +904,6 @@
     _languageSelectionCoordinator.presenter =
         [[VerticalAnimationContainer alloc] init];
 
-    _passKitCoordinator =
-        [[PassKitCoordinator alloc] initWithBaseViewController:self];
-
     // DownloadManagerCoordinator must be created before
     // DownloadManagerTabHelper.
     _browserContainerCoordinator = [[BrowserContainerCoordinator alloc]
@@ -1470,7 +1462,6 @@
   _printController = nil;
   [self.dispatcher dismissPopupMenuAnimated:NO];
   [_contextMenuCoordinator stop];
-  [_passKitCoordinator stop];
 
   if (self.presentedViewController) {
     // Dismisses any other modal controllers that may be present, e.g. Recent
@@ -2833,7 +2824,6 @@
   PrintTabHelper::CreateForWebState(tab.webState, self);
   NetExportTabHelper::CreateForWebState(tab.webState, self);
   CaptivePortalDetectorTabHelper::CreateForWebState(tab.webState, self);
-  PassKitTabHelper::CreateForWebState(tab.webState, _passKitCoordinator);
 
   // DownloadManagerTabHelper cannot function without delegate.
   DCHECK(_downloadManagerCoordinator);
diff --git a/ios/chrome/browser/ui/main/BUILD.gn b/ios/chrome/browser/ui/main/BUILD.gn
index 230c8de..b14d468 100644
--- a/ios/chrome/browser/ui/main/BUILD.gn
+++ b/ios/chrome/browser/ui/main/BUILD.gn
@@ -24,6 +24,7 @@
     "//ios/chrome/browser/browsing_data",
     "//ios/chrome/browser/crash_report:crash_report_internal",
     "//ios/chrome/browser/device_sharing",
+    "//ios/chrome/browser/download",
     "//ios/chrome/browser/sessions",
     "//ios/chrome/browser/sessions:serialisation",
     "//ios/chrome/browser/store_kit",
@@ -34,6 +35,7 @@
     "//ios/chrome/browser/ui/autofill",
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
+    "//ios/chrome/browser/ui/download",
     "//ios/chrome/browser/ui/qr_scanner:coordinator",
     "//ios/chrome/browser/ui/reading_list",
     "//ios/chrome/browser/ui/recent_tabs",
diff --git a/ios/chrome/browser/ui/main/browser_coordinator.h b/ios/chrome/browser/ui/main/browser_coordinator.h
index 91df937..fa2182f 100644
--- a/ios/chrome/browser/ui/main/browser_coordinator.h
+++ b/ios/chrome/browser/ui/main/browser_coordinator.h
@@ -5,6 +5,7 @@
 #ifndef IOS_CHROME_BROWSER_UI_MAIN_BROWSER_COORDINATOR_H_
 #define IOS_CHROME_BROWSER_UI_MAIN_BROWSER_COORDINATOR_H_
 
+#include "base/ios/block_types.h"
 #import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h"
 
 @protocol ApplicationCommands;
@@ -23,6 +24,10 @@
 // The model.
 @property(nonatomic, weak) TabModel* tabModel;
 
+// Clears any presented state on BVC.
+- (void)clearPresentedStateWithCompletion:(ProceduralBlock)completion
+                           dismissOmnibox:(BOOL)dismissOmnibox;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_MAIN_BROWSER_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/main/browser_coordinator.mm b/ios/chrome/browser/ui/main/browser_coordinator.mm
index 75f5a57..1eb90b7 100644
--- a/ios/chrome/browser/ui/main/browser_coordinator.mm
+++ b/ios/chrome/browser/ui/main/browser_coordinator.mm
@@ -9,6 +9,7 @@
 #include "base/scoped_observer.h"
 #import "ios/chrome/browser/app_launcher/app_launcher_abuse_detector.h"
 #import "ios/chrome/browser/app_launcher/app_launcher_tab_helper.h"
+#import "ios/chrome/browser/download/pass_kit_tab_helper.h"
 #import "ios/chrome/browser/store_kit/store_kit_coordinator.h"
 #import "ios/chrome/browser/store_kit/store_kit_tab_helper.h"
 #import "ios/chrome/browser/ui/alert_coordinator/repost_form_coordinator.h"
@@ -19,6 +20,7 @@
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/browser_coordinator_commands.h"
 #import "ios/chrome/browser/ui/commands/command_dispatcher.h"
+#import "ios/chrome/browser/ui/download/pass_kit_coordinator.h"
 #import "ios/chrome/browser/ui/qr_scanner/qr_scanner_legacy_coordinator.h"
 #import "ios/chrome/browser/ui/reading_list/reading_list_coordinator.h"
 #import "ios/chrome/browser/ui/recent_tabs/recent_tabs_coordinator.h"
@@ -51,6 +53,9 @@
 @property(nonatomic, strong)
     FormInputAccessoryCoordinator* formInputAccessoryCoordinator;
 
+// Coordinator for the PassKit UI presentation.
+@property(nonatomic, strong) PassKitCoordinator* passKitCoordinator;
+
 // Coordinator for the QR scanner.
 @property(nonatomic, strong) QRScannerLegacyCoordinator* qrScannerCoordinator;
 
@@ -115,6 +120,15 @@
   self.dispatcher = nil;
 }
 
+#pragma mark - Public
+
+- (void)clearPresentedStateWithCompletion:(ProceduralBlock)completion
+                           dismissOmnibox:(BOOL)dismissOmnibox {
+  [self.passKitCoordinator stop];
+  [self.viewController clearPresentedStateWithCompletion:completion
+                                          dismissOmnibox:dismissOmnibox];
+}
+
 #pragma mark - Private
 
 // Instantiates a BrowserViewController.
@@ -153,6 +167,9 @@
   self.formInputAccessoryCoordinator.delegate = self;
   [self.formInputAccessoryCoordinator start];
 
+  self.passKitCoordinator = [[PassKitCoordinator alloc]
+      initWithBaseViewController:self.viewController];
+
   self.qrScannerCoordinator = [[QRScannerLegacyCoordinator alloc]
       initWithBaseViewController:self.viewController];
   self.qrScannerCoordinator.dispatcher = self.dispatcher;
@@ -180,6 +197,9 @@
   [self.formInputAccessoryCoordinator stop];
   self.formInputAccessoryCoordinator = nil;
 
+  [self.passKitCoordinator stop];
+  self.passKitCoordinator = nil;
+
   [self.qrScannerCoordinator stop];
   self.qrScannerCoordinator = nil;
 
@@ -334,6 +354,8 @@
       webState, [[AppLauncherAbuseDetector alloc] init],
       self.appLauncherCoordinator);
 
+  PassKitTabHelper::CreateForWebState(webState, self.passKitCoordinator);
+
   RepostFormTabHelper::CreateForWebState(webState, self);
 
   if (StoreKitTabHelper::FromWebState(webState)) {
diff --git a/ios/chrome/browser/ui/main/browser_view_information.h b/ios/chrome/browser/ui/main/browser_view_information.h
index a784a59..c9c4e90c 100644
--- a/ios/chrome/browser/ui/main/browser_view_information.h
+++ b/ios/chrome/browser/ui/main/browser_view_information.h
@@ -7,6 +7,7 @@
 
 #import <Foundation/Foundation.h>
 
+@class BrowserCoordinator;
 @class BrowserViewController;
 @class TabModel;
 
@@ -28,6 +29,8 @@
 // The BrowserViewController that is currently being used (one of mainBVC or
 // otrBVC). The other, if present, is in suspended mode.
 @property(nonatomic, weak) BrowserViewController* currentBVC;
+// The BrowserCoordinator corresponding to |currentBVC|.
+@property(nonatomic, readonly) BrowserCoordinator* currentBrowserCoordinator;
 
 // Halts all tabs from all TabModels.
 - (void)haltAllTabs;
diff --git a/ios/chrome/browser/ui/main/browser_view_wrangler.mm b/ios/chrome/browser/ui/main/browser_view_wrangler.mm
index 85bb055..d049646 100644
--- a/ios/chrome/browser/ui/main/browser_view_wrangler.mm
+++ b/ios/chrome/browser/ui/main/browser_view_wrangler.mm
@@ -197,6 +197,13 @@
   [self updateDeviceSharingManager];
 }
 
+- (BrowserCoordinator*)currentBrowserCoordinator {
+  if (self.currentBVC == self.otrBVC) {
+    return self.incognitoCoordinator;
+  }
+  return self.mainCoordinator;
+}
+
 #pragma mark - BrowserViewInformation methods
 
 - (TabModel*)currentTabModel {
diff --git a/ios/chrome/browser/ui/settings/BUILD.gn b/ios/chrome/browser/ui/settings/BUILD.gn
index 09a3d8e..0c36e98 100644
--- a/ios/chrome/browser/ui/settings/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/BUILD.gn
@@ -15,6 +15,9 @@
     "autofill_credit_card_collection_view_controller.mm",
     "autofill_credit_card_edit_collection_view_controller.h",
     "autofill_credit_card_edit_collection_view_controller.mm",
+    "autofill_edit_table_view_controller+protected.h",
+    "autofill_edit_table_view_controller.h",
+    "autofill_edit_table_view_controller.mm",
     "autofill_profile_collection_view_controller.h",
     "autofill_profile_collection_view_controller.mm",
     "autofill_profile_edit_collection_view_controller.h",
diff --git a/ios/chrome/browser/ui/settings/OWNERS b/ios/chrome/browser/ui/settings/OWNERS
index 0f98bc2..ea1385e 100644
--- a/ios/chrome/browser/ui/settings/OWNERS
+++ b/ios/chrome/browser/ui/settings/OWNERS
@@ -1,6 +1,7 @@
 edchin@chromium.org
 sczs@chromium.org
 sdefresne@chromium.org
+gambard@chromium.org
 
 # TEAM: ios-directory-owners@chromium.org
 # OS: iOS
diff --git a/ios/chrome/browser/ui/settings/autofill_edit_table_view_controller+protected.h b/ios/chrome/browser/ui/settings/autofill_edit_table_view_controller+protected.h
new file mode 100644
index 0000000..591ebb0
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/autofill_edit_table_view_controller+protected.h
@@ -0,0 +1,18 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_EDIT_TABLE_VIEW_CONTROLLER_PROTECTED_H_
+#define IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_EDIT_TABLE_VIEW_CONTROLLER_PROTECTED_H_
+
+#import "ios/chrome/browser/ui/settings/autofill_edit_table_view_controller.h"
+
+// The table view for an Autofill edit entry menu.
+@interface AutofillEditTableViewController (Protected)
+
+// Returns the indexPath for the currently focused text field when in edit mode.
+- (NSIndexPath*)indexPathForCurrentTextField;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_EDIT_TABLE_VIEW_CONTROLLER_PROTECTED_H_
diff --git a/ios/chrome/browser/ui/settings/autofill_edit_table_view_controller.h b/ios/chrome/browser/ui/settings/autofill_edit_table_view_controller.h
new file mode 100644
index 0000000..d607981
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/autofill_edit_table_view_controller.h
@@ -0,0 +1,15 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_EDIT_TABLE_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_EDIT_TABLE_VIEW_CONTROLLER_H_
+
+#import "ios/chrome/browser/ui/settings/settings_root_table_view_controller.h"
+
+// The TableView for an Autofill edit entry menu.
+@interface AutofillEditTableViewController
+    : SettingsRootTableViewController <UITextFieldDelegate>
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_EDIT_TABLE_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/settings/autofill_edit_table_view_controller.mm b/ios/chrome/browser/ui/settings/autofill_edit_table_view_controller.mm
new file mode 100644
index 0000000..c7406bf
--- /dev/null
+++ b/ios/chrome/browser/ui/settings/autofill_edit_table_view_controller.mm
@@ -0,0 +1,177 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/settings/autofill_edit_table_view_controller.h"
+
+#include "base/logging.h"
+#import "base/mac/foundation_util.h"
+#import "ios/chrome/browser/ui/autofill/autofill_edit_accessory_view.h"
+#import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h"
+#import "ios/chrome/browser/ui/settings/autofill_edit_table_view_controller+protected.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface AutofillEditTableViewController () <AutofillEditAccessoryDelegate> {
+  AutofillEditCell* _currentEditingCell;
+  AutofillEditAccessoryView* _accessoryView;
+}
+@end
+
+@implementation AutofillEditTableViewController
+
+- (instancetype)initWithTableViewStyle:(UITableViewStyle)style
+                           appBarStyle:
+                               (ChromeTableViewControllerStyle)appBarStyle {
+  self = [super initWithTableViewStyle:style appBarStyle:appBarStyle];
+  if (!self) {
+    return nil;
+  }
+
+  _accessoryView = [[AutofillEditAccessoryView alloc] initWithDelegate:self];
+  [self setShouldHideDoneButton:YES];
+  [self updateEditButton];
+  return self;
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+  [super viewDidAppear:animated];
+  [[NSNotificationCenter defaultCenter]
+      addObserver:self
+         selector:@selector(keyboardDidShow)
+             name:UIKeyboardDidShowNotification
+           object:nil];
+}
+
+- (void)viewWillDisappear:(BOOL)animated {
+  [super viewWillDisappear:animated];
+  [[NSNotificationCenter defaultCenter]
+      removeObserver:self
+                name:UIKeyboardDidShowNotification
+              object:nil];
+}
+
+#pragma mark - SettingsRootTableViewController
+
+- (BOOL)shouldShowEditButton {
+  return YES;
+}
+
+- (BOOL)editButtonEnabled {
+  return YES;
+}
+
+#pragma mark - UITextFieldDelegate
+
+- (void)textFieldDidBeginEditing:(UITextField*)textField {
+  AutofillEditCell* cell = [self autofillEditCellForTextField:textField];
+  _currentEditingCell = cell;
+  [textField setInputAccessoryView:_accessoryView];
+  [self updateAccessoryViewButtonState];
+}
+
+- (void)textFieldDidEndEditing:(UITextField*)textField {
+  AutofillEditCell* cell = [self autofillEditCellForTextField:textField];
+  DCHECK(_currentEditingCell == cell);
+  [textField setInputAccessoryView:nil];
+  _currentEditingCell = nil;
+}
+
+- (BOOL)textFieldShouldReturn:(UITextField*)textField {
+  DCHECK([_currentEditingCell textField] == textField);
+  [self nextPressed];
+  return NO;
+}
+
+#pragma mark - AutofillEditAccessoryDelegate
+
+- (void)nextPressed {
+  [self moveToAnotherCellWithOffset:1];
+}
+
+- (void)previousPressed {
+  [self moveToAnotherCellWithOffset:-1];
+}
+
+- (void)closePressed {
+  [[_currentEditingCell textField] resignFirstResponder];
+}
+
+#pragma mark - Helper methods
+
+// Returns the cell containing |textField|.
+- (AutofillEditCell*)autofillEditCellForTextField:(UITextField*)textField {
+  AutofillEditCell* settingsCell = nil;
+  for (UIView* view = textField; view; view = [view superview]) {
+    AutofillEditCell* cell = base::mac::ObjCCast<AutofillEditCell>(view);
+    if (cell) {
+      settingsCell = cell;
+      break;
+    }
+  }
+
+  // There should be a cell associated with this text field.
+  DCHECK(settingsCell);
+  return settingsCell;
+}
+
+- (NSIndexPath*)indexForCellPathWithOffset:(NSInteger)offset
+                                  fromPath:(NSIndexPath*)cellPath {
+  if (!cellPath || !offset)
+    return nil;
+
+  NSInteger cellSection = [cellPath section];
+  NSInteger nextCellRow = [cellPath row] + offset;
+
+  if (nextCellRow >= 0 && nextCellRow < [self.tableView
+                                            numberOfRowsInSection:cellSection])
+    return [NSIndexPath indexPathForRow:nextCellRow inSection:cellSection];
+
+  NSInteger nextCellSection = cellSection + offset;
+  if (nextCellSection >= 0 &&
+      nextCellSection < [self.tableView numberOfSections])
+    return [NSIndexPath indexPathForRow:0 inSection:nextCellSection];
+
+  return nil;
+}
+
+- (NSIndexPath*)indexPathForCurrentTextField {
+  DCHECK(_currentEditingCell);
+  return [self.tableView indexPathForCell:_currentEditingCell];
+}
+
+- (void)moveToAnotherCellWithOffset:(NSInteger)offset {
+  NSIndexPath* cellPath = [self indexPathForCurrentTextField];
+  DCHECK(cellPath);
+  NSIndexPath* nextCellPath = [self indexForCellPathWithOffset:offset
+                                                      fromPath:cellPath];
+
+  if (!nextCellPath) {
+    [[_currentEditingCell textField] resignFirstResponder];
+  } else {
+    AutofillEditCell* nextCell = base::mac::ObjCCastStrict<AutofillEditCell>(
+        [self.tableView cellForRowAtIndexPath:nextCellPath]);
+    [nextCell.textField becomeFirstResponder];
+  }
+}
+
+- (void)updateAccessoryViewButtonState {
+  NSIndexPath* currentPath = [self indexPathForCurrentTextField];
+  NSIndexPath* nextPath = [self indexForCellPathWithOffset:1
+                                                  fromPath:currentPath];
+  NSIndexPath* previousPath = [self indexForCellPathWithOffset:-1
+                                                      fromPath:currentPath];
+
+  [[_accessoryView previousButton] setEnabled:previousPath != nil];
+  [[_accessoryView nextButton] setEnabled:nextPath != nil];
+}
+
+#pragma mark - Keyboard handling
+
+- (void)keyboardDidShow {
+  [self.tableView scrollRectToVisible:[_currentEditingCell frame] animated:YES];
+}
+
+@end
diff --git a/ios/chrome/browser/web/BUILD.gn b/ios/chrome/browser/web/BUILD.gn
index bd0408b..94363d9 100644
--- a/ios/chrome/browser/web/BUILD.gn
+++ b/ios/chrome/browser/web/BUILD.gn
@@ -143,6 +143,7 @@
     "//components/autofill/ios/form_util/resources/form_handlers.js",
     "resources/accessibility.js",
     "resources/chrome_bundle_all_frames.js",
+    "resources/console.js",
     "resources/print.js",
   ]
 }
@@ -185,6 +186,22 @@
   ]
 }
 
+source_set("java_script_console") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "java_script_console/java_script_console_message.cc",
+    "java_script_console/java_script_console_message.h",
+    "java_script_console/java_script_console_tab_helper.h",
+    "java_script_console/java_script_console_tab_helper.mm",
+    "java_script_console/java_script_console_tab_helper_delegate.h",
+  ]
+  deps = [
+    "//base",
+    "//ios/web/public",
+  ]
+  libs = [ "Foundation.framework" ]
+}
+
 source_set("web_internal") {
   configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
@@ -233,6 +250,9 @@
     "//ui/gfx",
     "//url",
   ]
+  public_deps = [
+    ":java_script_console",
+  ]
   libs = [
     "UIKit.framework",
     "Foundation.framework",
@@ -265,6 +285,7 @@
   sources = [
     "blocked_popup_tab_helper_unittest.mm",
     "chrome_web_client_unittest.mm",
+    "java_script_console/java_script_console_tab_helper_unittest.mm",
   ]
   deps = [
     ":test_support",
@@ -282,6 +303,7 @@
     "//ios/chrome/browser/passwords",
     "//ios/chrome/browser/ui",
     "//ios/chrome/browser/web",
+    "//ios/chrome/test/fakes",
     "//ios/web",
     "//ios/web/public/test",
     "//ios/web/public/test/fakes",
diff --git a/ios/chrome/browser/web/java_script_console/java_script_console_message.cc b/ios/chrome/browser/web/java_script_console/java_script_console_message.cc
new file mode 100644
index 0000000..a4004c3
--- /dev/null
+++ b/ios/chrome/browser/web/java_script_console/java_script_console_message.cc
@@ -0,0 +1,23 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ios/chrome/browser/web/java_script_console/java_script_console_message.h"
+
+JavaScriptConsoleMessage::JavaScriptConsoleMessage() {}
+
+JavaScriptConsoleMessage::JavaScriptConsoleMessage(
+    const JavaScriptConsoleMessage& other)
+    : origin(other.origin),
+      level(other.level),
+      message(base::Value::ToUniquePtrValue(other.message->Clone())) {}
+
+JavaScriptConsoleMessage& JavaScriptConsoleMessage::operator=(
+    JavaScriptConsoleMessage other) {
+  origin = other.origin;
+  level = other.level;
+  message = std::move(other.message);
+  return *this;
+}
+
+JavaScriptConsoleMessage::~JavaScriptConsoleMessage() {}
diff --git a/ios/chrome/browser/web/java_script_console/java_script_console_message.h b/ios/chrome/browser/web/java_script_console/java_script_console_message.h
new file mode 100644
index 0000000..7dd73f5
--- /dev/null
+++ b/ios/chrome/browser/web/java_script_console/java_script_console_message.h
@@ -0,0 +1,33 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_WEB_JAVA_SCRIPT_CONSOLE_JAVA_SCRIPT_CONSOLE_MESSAGE_H_
+#define IOS_CHROME_BROWSER_WEB_JAVA_SCRIPT_CONSOLE_JAVA_SCRIPT_CONSOLE_MESSAGE_H_
+
+#include "base/macros.h"
+#include "base/values.h"
+#include "url/gurl.h"
+
+// Wraps information from a received console message.
+struct JavaScriptConsoleMessage {
+ public:
+  JavaScriptConsoleMessage();
+  JavaScriptConsoleMessage(const JavaScriptConsoleMessage& other);
+  JavaScriptConsoleMessage& operator=(JavaScriptConsoleMessage other);
+  ~JavaScriptConsoleMessage();
+
+  // The origin of the frame which sent the message.
+  GURL origin;
+
+  // The log level associated with the message. (From console.js, i.e. "log",
+  // "debug", "info", "warn", "error")
+  std::string level;
+
+  // The message contents.
+  std::unique_ptr<base::Value> message;
+
+  DISALLOW_ASSIGN(JavaScriptConsoleMessage);
+};
+
+#endif  // IOS_CHROME_BROWSER_WEB_JAVA_SCRIPT_CONSOLE_JAVA_SCRIPT_CONSOLE_MESSAGE_H_
diff --git a/ios/chrome/browser/web/java_script_console/java_script_console_tab_helper.h b/ios/chrome/browser/web/java_script_console/java_script_console_tab_helper.h
new file mode 100644
index 0000000..44db6662
--- /dev/null
+++ b/ios/chrome/browser/web/java_script_console/java_script_console_tab_helper.h
@@ -0,0 +1,49 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_WEB_JAVA_SCRIPT_CONSOLE_JAVA_SCRIPT_CONSOLE_TAB_HELPER_H_
+#define IOS_CHROME_BROWSER_WEB_JAVA_SCRIPT_CONSOLE_JAVA_SCRIPT_CONSOLE_TAB_HELPER_H_
+
+#include "base/values.h"
+#include "ios/chrome/browser/web/java_script_console/java_script_console_tab_helper_delegate.h"
+#include "ios/web/public/web_state/web_state_observer.h"
+#import "ios/web/public/web_state/web_state_user_data.h"
+
+namespace web {
+class WebFrame;
+class WebState;
+}  // namespace web
+
+// Receives JavaScript console log messages and forwards them to the delegate.
+class JavaScriptConsoleTabHelper
+    : public web::WebStateUserData<JavaScriptConsoleTabHelper>,
+      public web::WebStateObserver {
+ public:
+  ~JavaScriptConsoleTabHelper() override;
+
+  // The delegate associated with the receiver. The delegate will be notified of
+  // new JavaScript messages.
+  void SetDelegate(JavaScriptConsoleTabHelperDelegate* delegate);
+
+ private:
+  // Handles the received JavaScript messages.
+  bool OnJavaScriptConsoleMessage(const base::DictionaryValue& message,
+                                  const GURL& page_url,
+                                  bool has_user_gesture,
+                                  bool main_frame,
+                                  web::WebFrame* sender_frame);
+
+  // WebStateObserver overrides.
+  void WebStateDestroyed(web::WebState* web_state) override;
+
+  explicit JavaScriptConsoleTabHelper(web::WebState* web_state);
+  friend class web::WebStateUserData<JavaScriptConsoleTabHelper>;
+
+  // The delegate associated with the receiver.
+  JavaScriptConsoleTabHelperDelegate* delegate_ = nullptr;
+
+  DISALLOW_COPY_AND_ASSIGN(JavaScriptConsoleTabHelper);
+};
+
+#endif  // IOS_CHROME_BROWSER_WEB_JAVA_SCRIPT_CONSOLE_JAVA_SCRIPT_CONSOLE_TAB_HELPER_H_
diff --git a/ios/chrome/browser/web/java_script_console/java_script_console_tab_helper.mm b/ios/chrome/browser/web/java_script_console/java_script_console_tab_helper.mm
new file mode 100644
index 0000000..d6fc014a
--- /dev/null
+++ b/ios/chrome/browser/web/java_script_console/java_script_console_tab_helper.mm
@@ -0,0 +1,78 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/web/java_script_console/java_script_console_tab_helper.h"
+
+#import <Foundation/Foundation.h>
+
+#include "base/values.h"
+#include "ios/chrome/browser/web/java_script_console/java_script_console_message.h"
+#include "ios/web/public/web_state/web_frame.h"
+#include "url/gurl.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace {
+// Name of message to which javascript console messages are sent.
+static const char* kCommandPrefix = "console";
+
+// Standard User Defaults key for "Log JS" debug setting.
+NSString* const kLogJavaScript = @"LogJavascript";
+}
+
+JavaScriptConsoleTabHelper::JavaScriptConsoleTabHelper(
+    web::WebState* web_state) {
+  web_state->AddObserver(this);
+  web_state->AddScriptCommandCallback(
+      base::BindRepeating(
+          &JavaScriptConsoleTabHelper::OnJavaScriptConsoleMessage,
+          base::Unretained(this)),
+      kCommandPrefix);
+}
+
+bool JavaScriptConsoleTabHelper::OnJavaScriptConsoleMessage(
+    const base::DictionaryValue& message,
+    const GURL& page_url,
+    bool has_user_gesture,
+    bool main_frame,
+    web::WebFrame* sender_frame) {
+  const base::Value* log_message = message.FindKey("message");
+  const base::Value* log_level_value = message.FindKey("method");
+  const base::Value* origin_value = message.FindKey("origin");
+  if (!log_message || !log_level_value || !log_level_value->is_string() ||
+      !origin_value || !origin_value->is_string()) {
+    return false;
+  }
+  std::string log_level = log_level_value->GetString();
+  std::string origin = origin_value->GetString();
+
+  if ([[NSUserDefaults standardUserDefaults] boolForKey:kLogJavaScript]) {
+    DVLOG(0) << origin << " [" << log_level << "] " << log_message;
+  }
+
+  if (!delegate_) {
+    return true;
+  }
+
+  JavaScriptConsoleMessage frame_message;
+  frame_message.level = log_level;
+  frame_message.origin = GURL(origin);
+  frame_message.message = base::Value::ToUniquePtrValue(log_message->Clone());
+  delegate_->DidReceiveConsoleMessage(frame_message);
+  return true;
+}
+
+void JavaScriptConsoleTabHelper::WebStateDestroyed(web::WebState* web_state) {
+  web_state->RemoveScriptCommandCallback(kCommandPrefix);
+  web_state->RemoveObserver(this);
+}
+
+void JavaScriptConsoleTabHelper::SetDelegate(
+    JavaScriptConsoleTabHelperDelegate* delegate) {
+  delegate_ = delegate;
+}
+
+JavaScriptConsoleTabHelper::~JavaScriptConsoleTabHelper() = default;
diff --git a/ios/chrome/browser/web/java_script_console/java_script_console_tab_helper_delegate.h b/ios/chrome/browser/web/java_script_console/java_script_console_tab_helper_delegate.h
new file mode 100644
index 0000000..59e26d9
--- /dev/null
+++ b/ios/chrome/browser/web/java_script_console/java_script_console_tab_helper_delegate.h
@@ -0,0 +1,19 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_WEB_JAVA_SCRIPT_CONSOLE_JAVA_SCRIPT_CONSOLE_TAB_HELPER_DELEGATE_H_
+#define IOS_CHROME_BROWSER_WEB_JAVA_SCRIPT_CONSOLE_JAVA_SCRIPT_CONSOLE_TAB_HELPER_DELEGATE_H_
+
+struct JavaScriptConsoleMessage;
+
+class JavaScriptConsoleTabHelperDelegate {
+ public:
+  // Called when a JavaScript message has been logged.
+  virtual void DidReceiveConsoleMessage(
+      const JavaScriptConsoleMessage& message) = 0;
+
+  virtual ~JavaScriptConsoleTabHelperDelegate() {}
+};
+
+#endif  // IOS_CHROME_BROWSER_WEB_JAVA_SCRIPT_CONSOLE_JAVA_SCRIPT_CONSOLE_TAB_HELPER_DELEGATE_H_
diff --git a/ios/chrome/browser/web/java_script_console/java_script_console_tab_helper_unittest.mm b/ios/chrome/browser/web/java_script_console/java_script_console_tab_helper_unittest.mm
new file mode 100644
index 0000000..0119c24
--- /dev/null
+++ b/ios/chrome/browser/web/java_script_console/java_script_console_tab_helper_unittest.mm
@@ -0,0 +1,74 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/web/java_script_console/java_script_console_tab_helper.h"
+
+#include "base/values.h"
+#import "ios/chrome/browser/web/chrome_web_client.h"
+#import "ios/chrome/browser/web/chrome_web_test.h"
+#include "ios/chrome/browser/web/java_script_console/java_script_console_message.h"
+#include "ios/chrome/browser/web/java_script_console/java_script_console_tab_helper_delegate.h"
+#include "ios/chrome/test/fakes/fake_java_script_console_tab_helper_delegate.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+// Test fixture to test JavaScriptConsoleTabHelper.
+class JavaScriptConsoleTabHelperTest : public ChromeWebTest {
+ protected:
+  JavaScriptConsoleTabHelperTest()
+      : ChromeWebTest(std::make_unique<ChromeWebClient>()) {}
+
+  void SetUp() override {
+    ChromeWebTest::SetUp();
+    JavaScriptConsoleTabHelper::CreateForWebState(web_state());
+  }
+
+  // Loads the given HTML and initializes the JS scripts.
+  void LoadHtml(NSString* html, GURL url) {
+    ChromeWebTest::LoadHtml(html, url);
+    ExecuteJavaScript(
+        GetWebClient()->GetDocumentStartScriptForAllFrames(GetBrowserState()));
+  }
+
+  // Returns the JavaScriptConsoleTabHelper associated with |web_state()|.
+  JavaScriptConsoleTabHelper* tab_helper() {
+    return JavaScriptConsoleTabHelper::FromWebState(web_state());
+  }
+};
+
+// Tests that a message can be logged without a
+// JavaScriptConsoleTabHelperDelegate set.
+TEST_F(JavaScriptConsoleTabHelperTest, LogMessageWithoutDelegate) {
+  LoadHtml(@"<p></p>", GURL("http://chromium.test"));
+
+  ASSERT_TRUE(tab_helper());
+
+  // No need to verify state, but logging a message should not crash the
+  // JavaScriptConsoleTabHelper when it has no delegate.
+  ExecuteJavaScript(@"console.log('Log message');");
+};
+
+// Tests that a JavaScript console message is logged correctly.
+TEST_F(JavaScriptConsoleTabHelperTest, LogMessage) {
+  GURL url = GURL("http://chromium.test");
+  LoadHtml(@"<p></p>", url);
+
+  auto delegate = std::make_unique<FakeJavaScriptConsoleTabHelperDelegate>();
+  ASSERT_TRUE(tab_helper());
+  tab_helper()->SetDelegate(delegate.get());
+
+  ASSERT_FALSE(delegate->GetLastLoggedMessage());
+
+  ExecuteJavaScript(@"console.log('Log message');");
+
+  const JavaScriptConsoleMessage* last_logged_message =
+      delegate->GetLastLoggedMessage();
+  ASSERT_TRUE(last_logged_message);
+  EXPECT_EQ("log", last_logged_message->level);
+  EXPECT_EQ(url, last_logged_message->origin);
+  EXPECT_EQ("Log message", last_logged_message->message->GetString());
+};
diff --git a/ios/chrome/browser/web/resources/chrome_bundle_all_frames.js b/ios/chrome/browser/web/resources/chrome_bundle_all_frames.js
index 9ec271c4..6e58023 100644
--- a/ios/chrome/browser/web/resources/chrome_bundle_all_frames.js
+++ b/ios/chrome/browser/web/resources/chrome_bundle_all_frames.js
@@ -7,6 +7,7 @@
 
 goog.require('__crWeb.accessibility');
 goog.require('__crWeb.autofill');
+goog.require('__crWeb.console');
 goog.require('__crWeb.fill');
 goog.require('__crWeb.form');
 goog.require('__crWeb.formHandlers');
diff --git a/ios/chrome/browser/web/resources/console.js b/ios/chrome/browser/web/resources/console.js
new file mode 100644
index 0000000..29d6b64d
--- /dev/null
+++ b/ios/chrome/browser/web/resources/console.js
@@ -0,0 +1,62 @@
+// 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.
+
+// Scripts to allow page console.log() etc. output to be seen on the console
+// of the host application.
+
+goog.provide('__crWeb.console');
+
+// Requires __crWeb.message provided by __crWeb.allFramesWebBundle.
+
+/**
+ * Namespace for this module.
+ */
+__gCrWeb.console = {};
+
+/* Beginning of anonymous object. */
+(function() {
+function sendConsoleMessage(method, originalArgs) {
+  var message, slicedArgs = Array.prototype.slice.call(originalArgs);
+  try {
+    message = slicedArgs.join(' ');
+  } catch (err) {
+  }
+  __gCrWeb.message.invokeOnHost({
+    'command': 'console.msg',
+    'method': method,
+    'message': message,
+    'origin': document.location.origin
+  });
+}
+
+var originalConsoleLog = console.log;
+console.log = function() {
+  sendConsoleMessage('log', arguments);
+  return originalConsoleLog.apply(this, arguments);
+};
+
+var originalConsoleDebug = console.debug;
+console.debug = function() {
+  sendConsoleMessage('debug', arguments);
+  return originalConsoleDebug.apply(this, arguments);
+};
+
+var originalConsoleInfo = console.info;
+console.info = function() {
+  sendConsoleMessage('info', arguments);
+  return originalConsoleInfo.apply(this, arguments);
+};
+
+var originalConsoleWarn = console.warn;
+console.warn = function() {
+  sendConsoleMessage('warn', arguments);
+  return originalConsoleWarn.apply(this, arguments);
+};
+
+var originalConsoleError = console.error;
+console.error = function() {
+  sendConsoleMessage('error', arguments);
+  return originalConsoleError.apply(this, arguments);
+};
+}());
diff --git a/ios/chrome/test/fakes/BUILD.gn b/ios/chrome/test/fakes/BUILD.gn
index 6c92812f..e58da2f 100644
--- a/ios/chrome/test/fakes/BUILD.gn
+++ b/ios/chrome/test/fakes/BUILD.gn
@@ -15,6 +15,8 @@
     "fake_download_manager_consumer.mm",
     "fake_download_manager_tab_helper_delegate.h",
     "fake_download_manager_tab_helper_delegate.mm",
+    "fake_java_script_console_tab_helper_delegate.cc",
+    "fake_java_script_console_tab_helper_delegate.h",
     "fake_pass_kit_tab_helper_delegate.h",
     "fake_pass_kit_tab_helper_delegate.mm",
     "fake_store_kit_launcher.h",
@@ -33,6 +35,7 @@
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/download",
     "//ios/chrome/browser/ui/presenters",
+    "//ios/chrome/browser/web:web_internal",
     "//ios/web/public",
     "//ios/web/public/download",
   ]
diff --git a/ios/chrome/test/fakes/fake_java_script_console_tab_helper_delegate.cc b/ios/chrome/test/fakes/fake_java_script_console_tab_helper_delegate.cc
new file mode 100644
index 0000000..1e05443
--- /dev/null
+++ b/ios/chrome/test/fakes/fake_java_script_console_tab_helper_delegate.cc
@@ -0,0 +1,21 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ios/chrome/test/fakes/fake_java_script_console_tab_helper_delegate.h"
+
+FakeJavaScriptConsoleTabHelperDelegate::
+    FakeJavaScriptConsoleTabHelperDelegate() {}
+
+FakeJavaScriptConsoleTabHelperDelegate::
+    ~FakeJavaScriptConsoleTabHelperDelegate() = default;
+
+void FakeJavaScriptConsoleTabHelperDelegate::DidReceiveConsoleMessage(
+    const JavaScriptConsoleMessage& message) {
+  last_received_message_ = std::make_unique<JavaScriptConsoleMessage>(message);
+}
+
+const JavaScriptConsoleMessage*
+FakeJavaScriptConsoleTabHelperDelegate::GetLastLoggedMessage() const {
+  return last_received_message_.get();
+}
diff --git a/ios/chrome/test/fakes/fake_java_script_console_tab_helper_delegate.h b/ios/chrome/test/fakes/fake_java_script_console_tab_helper_delegate.h
new file mode 100644
index 0000000..58f5289
--- /dev/null
+++ b/ios/chrome/test/fakes/fake_java_script_console_tab_helper_delegate.h
@@ -0,0 +1,32 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_TEST_FAKES_FAKE_JAVA_SCRIPT_CONSOLE_TAB_HELPER_DELEGATE_H_
+#define IOS_CHROME_TEST_FAKES_FAKE_JAVA_SCRIPT_CONSOLE_TAB_HELPER_DELEGATE_H_
+
+#include <memory>
+
+#include "ios/chrome/browser/web/java_script_console/java_script_console_message.h"
+#include "ios/chrome/browser/web/java_script_console/java_script_console_tab_helper_delegate.h"
+
+// A JavaScriptConsoleTabHelperDelegate class which stores the last received
+// message from |DidReceiveConsoleMessage|.
+class FakeJavaScriptConsoleTabHelperDelegate
+    : public JavaScriptConsoleTabHelperDelegate {
+ public:
+  FakeJavaScriptConsoleTabHelperDelegate();
+  ~FakeJavaScriptConsoleTabHelperDelegate() override;
+
+  void DidReceiveConsoleMessage(
+      const JavaScriptConsoleMessage& message) override;
+
+  // Returns the last messaged logged.
+  const JavaScriptConsoleMessage* GetLastLoggedMessage() const;
+
+ private:
+  // The last received message.
+  std::unique_ptr<JavaScriptConsoleMessage> last_received_message_;
+};
+
+#endif  // IOS_CHROME_TEST_FAKES_FAKE_JAVA_SCRIPT_CONSOLE_TAB_HELPER_DELEGATE_H_
diff --git a/ios/web/BUILD.gn b/ios/web/BUILD.gn
index 5fbd9f4..8372df9 100644
--- a/ios/web/BUILD.gn
+++ b/ios/web/BUILD.gn
@@ -612,7 +612,6 @@
   closure_entry_point = "__crWeb.mainFrameWebBundle"
 
   sources = [
-    "web_state/js/resources/console.js",
     "web_state/js/resources/error.js",
     "web_state/js/resources/legacy.js",
     "web_state/js/resources/main_frame_context_menu.js",
diff --git a/ios/web/web_state/js/resources/console.js b/ios/web/web_state/js/resources/console.js
deleted file mode 100644
index ab1189d..0000000
--- a/ios/web/web_state/js/resources/console.js
+++ /dev/null
@@ -1,62 +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.
-
-// Scripts to allow page console.log() etc. output to be seen on the console
-// of the host application.
-
-goog.provide('__crWeb.console');
-
-// Requires __crWeb.message provided by __crWeb.allFramesWebBundle.
-
-/**
- * Namespace for this module.
- */
-__gCrWeb.console = {};
-
-/* Beginning of anonymous object. */
-(function() {
-function sendConsoleMessage(method, originalArgs) {
-  var message, slicedArgs = Array.prototype.slice.call(originalArgs);
-  try {
-    message = slicedArgs.join(' ');
-  } catch (err) {
-  }
-  __gCrWeb.message.invokeOnHost({
-    'command': 'console',
-    'method': method,
-    'message': message,
-    'origin': document.location.origin
-  });
-}
-
-var originalConsoleLog = console.log;
-console.log = function() {
-  sendConsoleMessage('log', arguments);
-  return originalConsoleLog.apply(this, arguments);
-};
-
-var originalConsoleDebug = console.debug;
-console.debug = function() {
-  sendConsoleMessage('debug', arguments);
-  return originalConsoleDebug.apply(this, arguments);
-};
-
-var originalConsoleInfo = console.info;
-console.info = function() {
-  sendConsoleMessage('info', arguments);
-  return originalConsoleInfo.apply(this, arguments);
-};
-
-var originalConsoleWarn = console.warn;
-console.warn = function() {
-  sendConsoleMessage('warn', arguments);
-  return originalConsoleWarn.apply(this, arguments);
-};
-
-var originalConsoleError = console.error;
-console.error = function() {
-  sendConsoleMessage('error', arguments);
-  return originalConsoleError.apply(this, arguments);
-};
-}());
diff --git a/ios/web/web_state/js/resources/main_frame_web_bundle.js b/ios/web/web_state/js/resources/main_frame_web_bundle.js
index 1434758..142f299 100644
--- a/ios/web/web_state/js/resources/main_frame_web_bundle.js
+++ b/ios/web/web_state/js/resources/main_frame_web_bundle.js
@@ -7,7 +7,6 @@
 
 // Requires __crWeb.form provided by __crWeb.allFramesWebBundle.
 
-goog.require('__crWeb.console');
 goog.require('__crWeb.error');
 goog.require('__crWeb.legacy');
 goog.require('__crWeb.mainFrameContextMenu');
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index 18e5cda..0cbf1daa 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -158,9 +158,6 @@
 // Message command sent when a frame is unloading.
 NSString* const kFrameBecameUnavailableMessageName = @"FrameBecameUnavailable";
 
-// Standard User Defaults key for "Log JS" debug setting.
-NSString* const kLogJavaScript = @"LogJavascript";
-
 // Values for the histogram that counts slow/fast back/forward navigations.
 enum class BackForwardNavigationType {
   // Fast back navigation through WKWebView back-forward list.
@@ -832,9 +829,6 @@
 // Handles 'chrome.send' message.
 - (BOOL)handleChromeSendMessage:(base::DictionaryValue*)message
                         context:(NSDictionary*)context;
-// Handles 'console' message.
-- (BOOL)handleConsoleMessage:(base::DictionaryValue*)message
-                     context:(NSDictionary*)context;
 // Handles 'document.favicons' message.
 - (BOOL)handleDocumentFaviconsMessage:(base::DictionaryValue*)message
                               context:(NSDictionary*)context;
@@ -2439,7 +2433,6 @@
   dispatch_once(&onceToken, ^{
     handlers = new std::map<std::string, SEL>();
     (*handlers)["chrome.send"] = @selector(handleChromeSendMessage:context:);
-    (*handlers)["console"] = @selector(handleConsoleMessage:context:);
     (*handlers)["document.favicons"] =
         @selector(handleDocumentFaviconsMessage:context:);
     (*handlers)["window.error"] = @selector(handleWindowErrorMessage:context:);
@@ -2650,35 +2643,6 @@
   return NO;
 }
 
-- (BOOL)handleConsoleMessage:(base::DictionaryValue*)message
-                     context:(NSDictionary*)context {
-  if (![context[kIsMainFrame] boolValue])
-    return NO;
-  // Do not log if JS logging is off.
-  if (![[NSUserDefaults standardUserDefaults] boolForKey:kLogJavaScript]) {
-    return YES;
-  }
-
-  std::string method;
-  if (!message->GetString("method", &method)) {
-    DLOG(WARNING) << "JS message parameter not found: method";
-    return NO;
-  }
-  std::string consoleMessage;
-  if (!message->GetString("message", &consoleMessage)) {
-    DLOG(WARNING) << "JS message parameter not found: message";
-    return NO;
-  }
-  std::string origin;
-  if (!message->GetString("origin", &origin)) {
-    DLOG(WARNING) << "JS message parameter not found: origin";
-    return NO;
-  }
-
-  DVLOG(0) << origin << " [" << method << "] " << consoleMessage;
-  return YES;
-}
-
 - (BOOL)handleDocumentFaviconsMessage:(base::DictionaryValue*)message
                               context:(NSDictionary*)context {
   if (![context[kIsMainFrame] boolValue])
diff --git a/media/base/android/media_codec_bridge_impl.cc b/media/base/android/media_codec_bridge_impl.cc
index dbc41b7..24858d7f 100644
--- a/media/base/android/media_codec_bridge_impl.cc
+++ b/media/base/android/media_codec_bridge_impl.cc
@@ -127,8 +127,9 @@
 
       if (profile == 5 || profile == 29) {
         // Read extension config.
-        RETURN_ON_ERROR(reader.ReadBits(4, &frequency_index));
-        if (frequency_index == 0xf)
+        uint8_t ext_frequency_index = 0;
+        RETURN_ON_ERROR(reader.ReadBits(4, &ext_frequency_index));
+        if (ext_frequency_index == 0xf)
           RETURN_ON_ERROR(reader.SkipBits(24));
         RETURN_ON_ERROR(reader.ReadBits(5, &profile));
       }
diff --git a/media/base/data_source.h b/media/base/data_source.h
index 44d5386c..697b2ce 100644
--- a/media/base/data_source.h
+++ b/media/base/data_source.h
@@ -33,9 +33,7 @@
                     const DataSource::ReadCB& read_cb) = 0;
 
   // Stops the DataSource. Once this is called all future Read() calls will
-  // return an error. This is a synchronous call and may be called from any
-  // thread. Once called, the DataSource may no longer be used and should be
-  // destructed shortly thereafter.
+  // return an error.
   virtual void Stop() = 0;
 
   // Similar to Stop(), but only aborts current reads and not future reads.
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
index ba8713e..2739aa7c 100644
--- a/media/base/pipeline_impl.cc
+++ b/media/base/pipeline_impl.cc
@@ -56,7 +56,7 @@
              Demuxer* demuxer,
              std::unique_ptr<Renderer> renderer,
              base::WeakPtr<PipelineImpl> weak_pipeline);
-  void Stop();
+  void Stop(const base::Closure& stop_cb);
   void Seek(base::TimeDelta time);
   void Suspend();
   void Resume(std::unique_ptr<Renderer> renderer, base::TimeDelta time);
@@ -270,7 +270,7 @@
                                         weak_this_, base::TimeDelta()));
 }
 
-void PipelineImpl::RendererWrapper::Stop() {
+void PipelineImpl::RendererWrapper::Stop(const base::Closure& stop_cb) {
   DCHECK(media_task_runner_->BelongsToCurrentThread());
   DCHECK(state_ != kStopping && state_ != kStopped);
 
@@ -296,9 +296,17 @@
 
   SetState(kStopped);
 
-  // Reset the status. Otherwise, if we encountered an error, new errors will
+  // Reset the status. Otherwise, if we encountered an error, new erros will
   // never be propagated. See https://crbug.com/812465.
   status_ = PIPELINE_OK;
+
+  // Post the stop callback to enqueue it after the tasks that may have been
+  // posted by Demuxer and Renderer during stopping. Note that in theory the
+  // tasks posted by Demuxer/Renderer may post even more tasks that will get
+  // enqueued after |stop_cb|. This may be problematic because Demuxer may
+  // get destroyed as soon as |stop_cb| is run. In practice this is not a
+  // problem, but ideally Demuxer should be destroyed on the media thread.
+  media_task_runner_->PostTask(FROM_HERE, stop_cb);
 }
 
 void PipelineImpl::RendererWrapper::Seek(base::TimeDelta time) {
@@ -1045,13 +1053,29 @@
 
   if (media_task_runner_->BelongsToCurrentThread()) {
     // This path is executed by unittests that share media and main threads.
-    renderer_wrapper_->Stop();
+    renderer_wrapper_->Stop(base::DoNothing());
   } else {
     // This path is executed by production code where the two task runners -
     // main and media - live on different threads.
-    media_task_runner_->PostTask(
-        FROM_HERE, base::BindOnce(&RendererWrapper::Stop,
-                                  base::Unretained(renderer_wrapper_.get())));
+    //
+    // TODO(alokp): We should not have to wait for the RendererWrapper::Stop.
+    // RendererWrapper holds a raw reference to Demuxer, which in turn holds a
+    // raw reference to DataSource. Both Demuxer and DataSource need to live
+    // until RendererWrapper is stopped. If RendererWrapper owned Demuxer and
+    // Demuxer owned DataSource, we could simply let RendererWrapper get lazily
+    // destroyed on the media thread.
+    base::WaitableEvent waiter(base::WaitableEvent::ResetPolicy::AUTOMATIC,
+                               base::WaitableEvent::InitialState::NOT_SIGNALED);
+    base::Closure stop_cb =
+        base::Bind(&base::WaitableEvent::Signal, base::Unretained(&waiter));
+    // If posting the task fails or the posted task fails to run,
+    // we will wait here forever. So add a CHECK to make sure we do not run
+    // into those situations.
+    CHECK(media_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(&RendererWrapper::Stop,
+                   base::Unretained(renderer_wrapper_.get()), stop_cb)));
+    waiter.Wait();
   }
 
   // Once the pipeline is stopped, nothing is reported back to the client.
diff --git a/media/blink/multibuffer_data_source.cc b/media/blink/multibuffer_data_source.cc
index 6a0f129..0c99bb24 100644
--- a/media/blink/multibuffer_data_source.cc
+++ b/media/blink/multibuffer_data_source.cc
@@ -160,7 +160,6 @@
 }
 
 bool MultibufferDataSource::assume_fully_buffered() {
-  DCHECK(url_data());
   return !url_data()->url().SchemeIsHTTPOrHTTPS();
 }
 
@@ -323,13 +322,6 @@
   {
     base::AutoLock auto_lock(lock_);
     StopInternal_Locked();
-
-    // Cleanup resources immediately if we're already on the right thread.
-    if (render_task_runner_->BelongsToCurrentThread()) {
-      reader_.reset();
-      url_data_and_loading_state_.SetUrlData(nullptr);
-      return;
-    }
   }
 
   render_task_runner_->PostTask(FROM_HERE,
@@ -642,21 +634,25 @@
   DVLOG(1) << __func__ << "(" << begin << ", " << end << ")";
   DCHECK(render_task_runner_->BelongsToCurrentThread());
 
-  base::AutoLock auto_lock(lock_);
-  if (stop_signal_received_)
-    return;
-
   if (assume_fully_buffered())
     return;
 
-  if (end > begin)
+  base::AutoLock auto_lock(lock_);
+
+  if (end > begin) {
+    // TODO(scherkus): we shouldn't have to lock to signal host(), see
+    // http://crbug.com/113712 for details.
+    if (stop_signal_received_)
+      return;
+
     host_->AddBufferedByteRange(begin, end);
+  }
 
-  if (buffer_size_update_counter_ > 0)
+  if (buffer_size_update_counter_ > 0) {
     buffer_size_update_counter_--;
-  else
+  } else {
     UpdateBufferSizes();
-
+  }
   UpdateLoadingState_Locked(false);
 }
 
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 8b1d398..fc7eef4 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -210,65 +210,6 @@
 }
 #endif
 
-// Handles destruction of media::Renderer dependent components after the
-// renderer has been destructed on the media thread.
-void DestructionHelper(
-    scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
-    scoped_refptr<base::SingleThreadTaskRunner> vfc_task_runner,
-    std::unique_ptr<Demuxer> demuxer,
-    std::unique_ptr<DataSource> data_source,
-    std::unique_ptr<VideoFrameCompositor> compositor,
-    std::unique_ptr<CdmContextRef> cdm_context_1,
-    std::unique_ptr<CdmContextRef> cdm_context_2,
-    std::unique_ptr<MediaLog> media_log,
-    std::unique_ptr<RendererFactorySelector> renderer_factory_selector,
-    bool is_chunk_demuxer) {
-  // Since the media::Renderer is gone we can now destroy the compositor and
-  // renderer factory selector.
-  vfc_task_runner->DeleteSoon(FROM_HERE, std::move(compositor));
-  main_task_runner->DeleteSoon(FROM_HERE, std::move(renderer_factory_selector));
-
-  // ChunkDemuxer can be deleted on any thread, but other demuxers are bound to
-  // the main thread and must be deleted there now that the renderer is gone.
-  if (!is_chunk_demuxer) {
-    main_task_runner->DeleteSoon(FROM_HERE, std::move(demuxer));
-    main_task_runner->DeleteSoon(FROM_HERE, std::move(data_source));
-    main_task_runner->DeleteSoon(FROM_HERE, std::move(cdm_context_1));
-    main_task_runner->DeleteSoon(FROM_HERE, std::move(cdm_context_2));
-    main_task_runner->DeleteSoon(FROM_HERE, std::move(media_log));
-    return;
-  }
-
-  // ChunkDemuxer's streams may contain much buffered, compressed media that
-  // may need to be paged back in during destruction.  Paging delay may exceed
-  // the renderer hang monitor's threshold on at least Windows while also
-  // blocking other work on the renderer main thread, so we do the actual
-  // destruction in the background without blocking WMPI destruction or
-  // |task_runner|.  On advice of task_scheduler OWNERS, MayBlock() is not
-  // used because virtual memory overhead is not considered blocking I/O; and
-  // CONTINUE_ON_SHUTDOWN is used to allow process termination to not block on
-  // completing the task.
-  base::PostTaskWithTraits(
-      FROM_HERE,
-      {base::TaskPriority::BEST_EFFORT,
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-      base::BindOnce(
-          [](scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
-             std::unique_ptr<Demuxer> demuxer_to_destroy,
-             std::unique_ptr<CdmContextRef> cdm_context_1,
-             std::unique_ptr<CdmContextRef> cdm_context_2,
-             std::unique_ptr<MediaLog> media_log) {
-            SCOPED_UMA_HISTOGRAM_TIMER("Media.MSE.DemuxerDestructionTime");
-            demuxer_to_destroy.reset();
-            main_task_runner->DeleteSoon(FROM_HERE, std::move(cdm_context_1));
-            main_task_runner->DeleteSoon(FROM_HERE, std::move(cdm_context_2));
-            main_task_runner->DeleteSoon(FROM_HERE, std::move(media_log));
-          },
-          std::move(main_task_runner), std::move(demuxer),
-          std::move(cdm_context_1), std::move(cdm_context_2),
-          std::move(media_log)));
-}
-
 }  // namespace
 
 class BufferedDataSourceHostImpl;
@@ -419,11 +360,6 @@
   watch_time_reporter_.reset();
 
   // The underlying Pipeline must be stopped before it is destroyed.
-  //
-  // Note: This destruction happens synchronously on the media thread and
-  // |demuxer_|, |data_source_|, |compositor_|, and |media_log_| must outlive
-  // this process. They will be destructed by the DestructionHelper below
-  // after trampolining through the media thread.
   pipeline_controller_.Stop();
 
   if (last_reported_memory_usage_)
@@ -435,25 +371,48 @@
   client_->MediaRemotingStopped(
       blink::WebLocalizedString::kMediaRemotingStopNoText);
 
-  if (!surface_layer_for_video_enabled_ && video_layer_)
+  if (!surface_layer_for_video_enabled_ && video_layer_) {
     video_layer_->StopUsingProvider();
+  }
+
+  vfc_task_runner_->DeleteSoon(FROM_HERE, std::move(compositor_));
+
+  if (chunk_demuxer_) {
+    // Continue destruction of |chunk_demuxer_| on the |media_task_runner_| to
+    // avoid racing other pending tasks on |chunk_demuxer_| on that runner while
+    // not further blocking |main_task_runner_| to perform the destruction.
+    media_task_runner_->PostTask(
+        FROM_HERE, base::BindOnce(&WebMediaPlayerImpl::DemuxerDestructionHelper,
+                                  media_task_runner_, std::move(demuxer_)));
+  }
 
   media_log_->AddEvent(
       media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_DESTROYED));
+}
 
-  if (data_source_)
-    data_source_->Stop();
-
-  // Handle destruction of things that need to be destructed after the pipeline
-  // completes stopping on the media thread.
-  media_task_runner_->PostTask(
+// static
+void WebMediaPlayerImpl::DemuxerDestructionHelper(
+    scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+    std::unique_ptr<Demuxer> demuxer) {
+  DCHECK(task_runner->BelongsToCurrentThread());
+  // ChunkDemuxer's streams may contain much buffered, compressed media that may
+  // need to be paged back in during destruction.  Paging delay may exceed the
+  // renderer hang monitor's threshold on at least Windows while also blocking
+  // other work on the renderer main thread, so we do the actual destruction in
+  // the background without blocking WMPI destruction or |task_runner|.  On
+  // advice of task_scheduler OWNERS, MayBlock() is not used because virtual
+  // memory overhead is not considered blocking I/O; and CONTINUE_ON_SHUTDOWN is
+  // used to allow process termination to not block on completing the task.
+  base::PostTaskWithTraits(
       FROM_HERE,
-      base::BindOnce(&DestructionHelper, std::move(main_task_runner_),
-                     std::move(vfc_task_runner_), std::move(demuxer_),
-                     std::move(data_source_), std::move(compositor_),
-                     std::move(cdm_context_ref_),
-                     std::move(pending_cdm_context_ref_), std::move(media_log_),
-                     std::move(renderer_factory_selector_), !!chunk_demuxer_));
+      {base::TaskPriority::BEST_EFFORT,
+       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      base::BindOnce(
+          [](std::unique_ptr<Demuxer> demuxer_to_destroy) {
+            SCOPED_UMA_HISTOGRAM_TIMER("Media.MSE.DemuxerDestructionTime");
+            demuxer_to_destroy.reset();
+          },
+          std::move(demuxer)));
 }
 
 WebMediaPlayer::LoadTiming WebMediaPlayerImpl::Load(
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h
index 52e52b82..1d67327a 100644
--- a/media/blink/webmediaplayer_impl.h
+++ b/media/blink/webmediaplayer_impl.h
@@ -109,6 +109,15 @@
       std::unique_ptr<WebMediaPlayerParams> params);
   ~WebMediaPlayerImpl() override;
 
+  // Destroys |demuxer| and records a UMA for the time taken to destroy it.
+  // |task_runner| is the expected runner on which this method is called, and is
+  // used as a parameter to ensure a scheduled task bound to this method is run
+  // (to prevent uncontrolled |demuxer| destruction if |task_runner| has no
+  // other references before such task is executed.)
+  static void DemuxerDestructionHelper(
+      scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+      std::unique_ptr<Demuxer> demuxer);
+
   // WebSurfaceLayerBridgeObserver implementation.
   void OnWebLayerUpdated() override;
   void RegisterContentsLayer(cc::Layer* layer) override;
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc
index 2c155fdc..8c5eb9b 100644
--- a/media/blink/webmediaplayer_impl_unittest.cc
+++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -424,7 +424,7 @@
     // destructed since WMPI may reference them during destruction.
     wmpi_.reset();
 
-    CycleThreads();
+    base::RunLoop().RunUntilIdle();
 
     web_view_->MainFrameWidget()->Close();
   }
@@ -669,8 +669,13 @@
     // Ensure any tasks waiting to be posted to the media thread are posted.
     base::RunLoop().RunUntilIdle();
 
-    // Flush all media tasks.
-    media_thread_.FlushForTesting();
+    // Cycle media thread.
+    {
+      base::RunLoop loop;
+      media_thread_.task_runner()->PostTaskAndReply(
+          FROM_HERE, base::DoNothing(), loop.QuitClosure());
+      loop.Run();
+    }
 
     // Cycle anything that was posted back from the media thread.
     base::RunLoop().RunUntilIdle();
diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
index ac8e8c7..2af07ee0 100644
--- a/media/gpu/BUILD.gn
+++ b/media/gpu/BUILD.gn
@@ -334,6 +334,7 @@
     "h264_decoder.h",
     "h264_dpb.cc",
     "h264_dpb.h",
+    "macros.h",
     "vp9_decoder.cc",
     "vp9_decoder.h",
     "vp9_picture.cc",
diff --git a/media/gpu/macros.h b/media/gpu/macros.h
new file mode 100644
index 0000000..e758332
--- /dev/null
+++ b/media/gpu/macros.h
@@ -0,0 +1,24 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_GPU_MACROS_H_
+#define MEDIA_GPU_MACROS_H_
+
+#include "base/logging.h"
+
+#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
+#define VLOGF(level) VLOG(level) << __func__ << "(): "
+#define VPLOGF(level) VPLOG(level) << __func__ << "(): "
+
+namespace media {
+
+// Copy the memory between arrays with checking the array size.
+template <typename T, size_t N>
+inline void SafeArrayMemcpy(T (&to)[N], const T (&from)[N]) {
+  memcpy(to, from, sizeof(T[N]));
+}
+
+}  // namespace media
+
+#endif  // MEDIA_GPU_MACROS_H_
diff --git a/media/gpu/test/generic_dmabuf_video_frame_mapper.cc b/media/gpu/test/generic_dmabuf_video_frame_mapper.cc
index 4876483..0a9265b 100644
--- a/media/gpu/test/generic_dmabuf_video_frame_mapper.cc
+++ b/media/gpu/test/generic_dmabuf_video_frame_mapper.cc
@@ -11,8 +11,7 @@
 #include <vector>
 
 #include "base/bind.h"
-
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
+#include "media/gpu/macros.h"
 
 namespace media {
 namespace test {
diff --git a/media/gpu/test/vaapi_dmabuf_video_frame_mapper.cc b/media/gpu/test/vaapi_dmabuf_video_frame_mapper.cc
index bfb4547..5097dbc 100644
--- a/media/gpu/test/vaapi_dmabuf_video_frame_mapper.cc
+++ b/media/gpu/test/vaapi_dmabuf_video_frame_mapper.cc
@@ -8,6 +8,7 @@
 #include "base/memory/ptr_util.h"
 #include "build/build_config.h"
 #include "media/gpu/format_utils.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/vaapi/vaapi_picture_factory.h"
 #include "media/gpu/vaapi/vaapi_utils.h"
 #include "media/gpu/vaapi/vaapi_wrapper.h"
@@ -17,8 +18,6 @@
 #include "media/gpu/vaapi/vaapi_picture_native_pixmap.h"
 #endif
 
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-
 namespace media {
 namespace test {
 
diff --git a/media/gpu/test/video_decode_accelerator_unittest_helpers.cc b/media/gpu/test/video_decode_accelerator_unittest_helpers.cc
index b77972b1..d4f0a85 100644
--- a/media/gpu/test/video_decode_accelerator_unittest_helpers.cc
+++ b/media/gpu/test/video_decode_accelerator_unittest_helpers.cc
@@ -12,6 +12,7 @@
 #include "base/strings/string_split.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "media/base/video_decoder_config.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/test/rendering_helper.h"
 #include "media/gpu/test/texture_ref.h"
 #include "media/video/h264_parser.h"
@@ -20,8 +21,6 @@
 #include "ui/ozone/public/ozone_gpu_test_helper.h"
 #endif
 
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-
 namespace media {
 namespace test {
 
diff --git a/media/gpu/v4l2/generic_v4l2_device.cc b/media/gpu/v4l2/generic_v4l2_device.cc
index b00fda1..a1294ae0b 100644
--- a/media/gpu/v4l2/generic_v4l2_device.cc
+++ b/media/gpu/v4l2/generic_v4l2_device.cc
@@ -26,6 +26,7 @@
 #include "build/build_config.h"
 #include "media/base/video_types.h"
 #include "media/gpu/buildflags.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/v4l2/generic_v4l2_device.h"
 #include "ui/gfx/native_pixmap.h"
 #include "ui/gl/egl_util.h"
@@ -47,10 +48,6 @@
     FILE_PATH_LITERAL("/usr/lib/libv4l2.so");
 #endif
 
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-#define VPLOGF(level) VPLOG(level) << __func__ << "(): "
-
 namespace media {
 
 GenericV4L2Device::GenericV4L2Device() {
diff --git a/media/gpu/v4l2/tegra_v4l2_device.cc b/media/gpu/v4l2/tegra_v4l2_device.cc
index a7befc20..7ed27f1ee 100644
--- a/media/gpu/v4l2/tegra_v4l2_device.cc
+++ b/media/gpu/v4l2/tegra_v4l2_device.cc
@@ -8,12 +8,10 @@
 
 #include "base/posix/eintr_wrapper.h"
 #include "base/trace_event/trace_event.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/v4l2/tegra_v4l2_device.h"
 #include "ui/gl/gl_bindings.h"
 
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-
 namespace media {
 
 namespace {
diff --git a/media/gpu/v4l2/v4l2_device.cc b/media/gpu/v4l2/v4l2_device.cc
index 7296f0c..c0d849a 100644
--- a/media/gpu/v4l2/v4l2_device.cc
+++ b/media/gpu/v4l2/v4l2_device.cc
@@ -16,15 +16,12 @@
 #include "build/build_config.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/video_types.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/v4l2/generic_v4l2_device.h"
 #if defined(ARCH_CPU_ARMEL)
 #include "media/gpu/v4l2/tegra_v4l2_device.h"
 #endif
 
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-#define VPLOGF(level) VPLOG(level) << __func__ << "(): "
-
 namespace media {
 
 // Class used to store the state of a buffer that should persist between
diff --git a/media/gpu/v4l2/v4l2_image_processor.cc b/media/gpu/v4l2/v4l2_image_processor.cc
index cb6f192..b340f189a2 100644
--- a/media/gpu/v4l2/v4l2_image_processor.cc
+++ b/media/gpu/v4l2/v4l2_image_processor.cc
@@ -20,12 +20,9 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "media/base/scopedfd_helper.h"
 #include "media/base/video_types.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/v4l2/v4l2_image_processor.h"
 
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-#define VPLOGF(level) VPLOG(level) << __func__ << "(): "
-
 #define IOCTL_OR_ERROR_RETURN_VALUE(type, arg, value, type_str) \
   do {                                                          \
     if (device_->Ioctl(type, arg) != 0) {                       \
diff --git a/media/gpu/v4l2/v4l2_jpeg_decode_accelerator.cc b/media/gpu/v4l2/v4l2_jpeg_decode_accelerator.cc
index caf3b8c..d00276a4 100644
--- a/media/gpu/v4l2/v4l2_jpeg_decode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_jpeg_decode_accelerator.cc
@@ -16,12 +16,9 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "media/filters/jpeg_parser.h"
+#include "media/gpu/macros.h"
 #include "third_party/libyuv/include/libyuv.h"
 
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-#define VPLOGF(level) VPLOG(level) << __func__ << "(): "
-
 #define IOCTL_OR_ERROR_RETURN_VALUE(type, arg, value, type_name)    \
   do {                                                              \
     if (device_->Ioctl(type, arg) != 0) {                           \
diff --git a/media/gpu/v4l2/v4l2_jpeg_encode_accelerator.cc b/media/gpu/v4l2/v4l2_jpeg_encode_accelerator.cc
index 61fa696d..1b14ccb2 100644
--- a/media/gpu/v4l2/v4l2_jpeg_encode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_jpeg_encode_accelerator.cc
@@ -14,13 +14,10 @@
 #include "base/bind.h"
 #include "base/numerics/ranges.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/v4l2/v4l2_device.h"
 #include "third_party/libyuv/include/libyuv.h"
 
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-#define VPLOGF(level) VPLOG(level) << __func__ << "(): "
-
 #define IOCTL_OR_ERROR_RETURN_VALUE(type, arg, value, type_name) \
   do {                                                           \
     if (device_->Ioctl(type, arg) != 0) {                        \
diff --git a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
index 28f19e30..19aa4e4 100644
--- a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
@@ -31,14 +31,11 @@
 #include "media/base/media_switches.h"
 #include "media/base/unaligned_shared_memory.h"
 #include "media/base/video_types.h"
+#include "media/gpu/macros.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_image.h"
 #include "ui/gl/scoped_binders.h"
 
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-#define VPLOGF(level) VPLOG(level) << __func__ << "(): "
-
 #define NOTIFY_ERROR(x)                       \
   do {                                        \
     VLOGF(1) << "Setting error state: " << x; \
@@ -2586,13 +2583,6 @@
   return new V4L2VP8Picture(dec_surface);
 }
 
-#define ARRAY_MEMCPY_CHECKED(to, from)                               \
-  do {                                                               \
-    static_assert(sizeof(to) == sizeof(from),                        \
-                  #from " and " #to " arrays must be of same size"); \
-    memcpy(to, from, sizeof(to));                                    \
-  } while (0)
-
 static void FillV4L2SegmentationHeader(
     const Vp8SegmentationHeader& vp8_sgmnt_hdr,
     struct v4l2_vp8_sgmnt_hdr* v4l2_sgmnt_hdr) {
@@ -2607,12 +2597,10 @@
 #undef SET_V4L2_SPARM_FLAG_IF
   v4l2_sgmnt_hdr->segment_feature_mode = vp8_sgmnt_hdr.segment_feature_mode;
 
-  ARRAY_MEMCPY_CHECKED(v4l2_sgmnt_hdr->quant_update,
-                       vp8_sgmnt_hdr.quantizer_update_value);
-  ARRAY_MEMCPY_CHECKED(v4l2_sgmnt_hdr->lf_update,
-                       vp8_sgmnt_hdr.lf_update_value);
-  ARRAY_MEMCPY_CHECKED(v4l2_sgmnt_hdr->segment_probs,
-                       vp8_sgmnt_hdr.segment_prob);
+  SafeArrayMemcpy(v4l2_sgmnt_hdr->quant_update,
+                  vp8_sgmnt_hdr.quantizer_update_value);
+  SafeArrayMemcpy(v4l2_sgmnt_hdr->lf_update, vp8_sgmnt_hdr.lf_update_value);
+  SafeArrayMemcpy(v4l2_sgmnt_hdr->segment_probs, vp8_sgmnt_hdr.segment_prob);
 }
 
 static void FillV4L2LoopfilterHeader(
@@ -2631,10 +2619,10 @@
   LF_HDR_TO_V4L2_LF_HDR(sharpness_level);
 #undef LF_HDR_TO_V4L2_LF_HDR
 
-  ARRAY_MEMCPY_CHECKED(v4l2_lf_hdr->ref_frm_delta_magnitude,
-                       vp8_loopfilter_hdr.ref_frame_delta);
-  ARRAY_MEMCPY_CHECKED(v4l2_lf_hdr->mb_mode_delta_magnitude,
-                       vp8_loopfilter_hdr.mb_mode_delta);
+  SafeArrayMemcpy(v4l2_lf_hdr->ref_frm_delta_magnitude,
+                  vp8_loopfilter_hdr.ref_frame_delta);
+  SafeArrayMemcpy(v4l2_lf_hdr->mb_mode_delta_magnitude,
+                  vp8_loopfilter_hdr.mb_mode_delta);
 }
 
 static void FillV4L2QuantizationHeader(
@@ -2651,13 +2639,11 @@
 static void FillV4L2Vp8EntropyHeader(
     const Vp8EntropyHeader& vp8_entropy_hdr,
     struct v4l2_vp8_entropy_hdr* v4l2_entropy_hdr) {
-  ARRAY_MEMCPY_CHECKED(v4l2_entropy_hdr->coeff_probs,
-                       vp8_entropy_hdr.coeff_probs);
-  ARRAY_MEMCPY_CHECKED(v4l2_entropy_hdr->y_mode_probs,
-                       vp8_entropy_hdr.y_mode_probs);
-  ARRAY_MEMCPY_CHECKED(v4l2_entropy_hdr->uv_mode_probs,
-                       vp8_entropy_hdr.uv_mode_probs);
-  ARRAY_MEMCPY_CHECKED(v4l2_entropy_hdr->mv_probs, vp8_entropy_hdr.mv_probs);
+  SafeArrayMemcpy(v4l2_entropy_hdr->coeff_probs, vp8_entropy_hdr.coeff_probs);
+  SafeArrayMemcpy(v4l2_entropy_hdr->y_mode_probs, vp8_entropy_hdr.y_mode_probs);
+  SafeArrayMemcpy(v4l2_entropy_hdr->uv_mode_probs,
+                  vp8_entropy_hdr.uv_mode_probs);
+  SafeArrayMemcpy(v4l2_entropy_hdr->mv_probs, vp8_entropy_hdr.mv_probs);
 }
 
 bool V4L2SliceVideoDecodeAccelerator::V4L2VP8Accelerator::SubmitDecode(
@@ -2833,9 +2819,9 @@
   v4l2_lf_params->level = vp9_lf_params.level;
   v4l2_lf_params->sharpness = vp9_lf_params.sharpness;
 
-  ARRAY_MEMCPY_CHECKED(v4l2_lf_params->deltas, vp9_lf_params.ref_deltas);
-  ARRAY_MEMCPY_CHECKED(v4l2_lf_params->mode_deltas, vp9_lf_params.mode_deltas);
-  ARRAY_MEMCPY_CHECKED(v4l2_lf_params->lvl_lookup, vp9_lf_params.lvl);
+  SafeArrayMemcpy(v4l2_lf_params->deltas, vp9_lf_params.ref_deltas);
+  SafeArrayMemcpy(v4l2_lf_params->mode_deltas, vp9_lf_params.mode_deltas);
+  SafeArrayMemcpy(v4l2_lf_params->lvl_lookup, vp9_lf_params.lvl);
 }
 
 static void FillV4L2VP9QuantizationParams(
@@ -2868,12 +2854,9 @@
                          V4L2_VP9_SGMNT_PARAM_FLAG_ABS_OR_DELTA_UPDATE);
 #undef SET_SEG_PARAMS_FLAG_IF
 
-  ARRAY_MEMCPY_CHECKED(v4l2_segm_params->tree_probs,
-                       vp9_segm_params.tree_probs);
-  ARRAY_MEMCPY_CHECKED(v4l2_segm_params->pred_probs,
-                       vp9_segm_params.pred_probs);
-  ARRAY_MEMCPY_CHECKED(v4l2_segm_params->feature_data,
-                       vp9_segm_params.feature_data);
+  SafeArrayMemcpy(v4l2_segm_params->tree_probs, vp9_segm_params.tree_probs);
+  SafeArrayMemcpy(v4l2_segm_params->pred_probs, vp9_segm_params.pred_probs);
+  SafeArrayMemcpy(v4l2_segm_params->feature_data, vp9_segm_params.feature_data);
 
   static_assert(arraysize(v4l2_segm_params->feature_enabled) ==
                         arraysize(vp9_segm_params.feature_enabled) &&
@@ -2893,7 +2876,7 @@
     const Vp9FrameContext& vp9_frame_ctx,
     struct v4l2_vp9_entropy_ctx* v4l2_entropy_ctx) {
 #define ARRAY_MEMCPY_CHECKED_FRM_CTX_TO_V4L2_ENTR(a) \
-  ARRAY_MEMCPY_CHECKED(v4l2_entropy_ctx->a, vp9_frame_ctx.a)
+  SafeArrayMemcpy(v4l2_entropy_ctx->a, vp9_frame_ctx.a)
   ARRAY_MEMCPY_CHECKED_FRM_CTX_TO_V4L2_ENTR(tx_probs_8x8);
   ARRAY_MEMCPY_CHECKED_FRM_CTX_TO_V4L2_ENTR(tx_probs_16x16);
   ARRAY_MEMCPY_CHECKED_FRM_CTX_TO_V4L2_ENTR(tx_probs_32x32);
@@ -3098,7 +3081,7 @@
 static void FillVp9FrameContext(struct v4l2_vp9_entropy_ctx& v4l2_entropy_ctx,
                                 Vp9FrameContext* vp9_frame_ctx) {
 #define ARRAY_MEMCPY_CHECKED_V4L2_ENTR_TO_FRM_CTX(a) \
-  ARRAY_MEMCPY_CHECKED(vp9_frame_ctx->a, v4l2_entropy_ctx.a)
+  SafeArrayMemcpy(vp9_frame_ctx->a, v4l2_entropy_ctx.a)
   ARRAY_MEMCPY_CHECKED_V4L2_ENTR_TO_FRM_CTX(tx_probs_8x8);
   ARRAY_MEMCPY_CHECKED_V4L2_ENTR_TO_FRM_CTX(tx_probs_16x16);
   ARRAY_MEMCPY_CHECKED_V4L2_ENTR_TO_FRM_CTX(tx_probs_32x32);
diff --git a/media/gpu/v4l2/v4l2_video_decode_accelerator.cc b/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
index e947f42..1ab879ca 100644
--- a/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
@@ -28,6 +28,7 @@
 #include "media/base/unaligned_shared_memory.h"
 #include "media/base/video_frame_layout.h"
 #include "media/base/video_types.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/v4l2/v4l2_image_processor.h"
 #include "media/video/h264_parser.h"
 #include "ui/gfx/geometry/rect.h"
@@ -35,10 +36,6 @@
 #include "ui/gl/gl_fence_egl.h"
 #include "ui/gl/scoped_binders.h"
 
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-#define VPLOGF(level) VPLOG(level) << __func__ << "(): "
-
 #define NOTIFY_ERROR(x)                      \
   do {                                       \
     VLOGF(1) << "Setting error state:" << x; \
diff --git a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
index 98ffc5c..6ac3507 100644
--- a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
@@ -25,16 +25,13 @@
 #include "media/base/bitstream_buffer.h"
 #include "media/base/scopedfd_helper.h"
 #include "media/base/unaligned_shared_memory.h"
-#include "media/base/video_types.h"
 #include "media/base/video_frame_layout.h"
+#include "media/base/video_types.h"
 #include "media/gpu/gpu_video_encode_accelerator_helpers.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/v4l2/v4l2_image_processor.h"
 #include "media/video/h264_parser.h"
 
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-#define VPLOGF(level) VPLOG(level) << __func__ << "(): "
-
 #define NOTIFY_ERROR(x)                      \
   do {                                       \
     VLOGF(1) << "Setting error state:" << x; \
diff --git a/media/gpu/vaapi/h264_encoder.cc b/media/gpu/vaapi/h264_encoder.cc
index 761b54b..4367cbbb 100644
--- a/media/gpu/vaapi/h264_encoder.cc
+++ b/media/gpu/vaapi/h264_encoder.cc
@@ -6,10 +6,9 @@
 
 #include "base/bits.h"
 #include "base/stl_util.h"
+#include "media/gpu/macros.h"
 #include "media/video/h264_level_limits.h"
 
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-
 namespace media {
 namespace {
 // An IDR every 2048 frames, no I frames and no B frames.
diff --git a/media/gpu/vaapi/vaapi_h264_accelerator.cc b/media/gpu/vaapi/vaapi_h264_accelerator.cc
index de90d430..7702731a 100644
--- a/media/gpu/vaapi/vaapi_h264_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_h264_accelerator.cc
@@ -8,16 +8,10 @@
 
 #include "media/gpu/decode_surface_handler.h"
 #include "media/gpu/h264_dpb.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/vaapi/vaapi_common.h"
 #include "media/gpu/vaapi/vaapi_wrapper.h"
 
-#define ARRAY_MEMCPY_CHECKED(to, from)                               \
-  do {                                                               \
-    static_assert(sizeof(to) == sizeof(from),                        \
-                  #from " and " #to " arrays must be of same size"); \
-    memcpy(to, from, sizeof(to));                                    \
-  } while (0)
-
 namespace media {
 
 using Status = H264Decoder::H264Accelerator::Status;
diff --git a/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.cc b/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.cc
index 59bd218..0467727 100644
--- a/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.cc
@@ -21,14 +21,12 @@
 #include "media/base/unaligned_shared_memory.h"
 #include "media/base/video_frame.h"
 #include "media/filters/jpeg_parser.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/vaapi/vaapi_picture.h"
 #include "media/gpu/vaapi/vaapi_utils.h"
 #include "media/gpu/vaapi/vaapi_wrapper.h"
 #include "third_party/libyuv/include/libyuv.h"
 
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-
 namespace media {
 
 namespace {
diff --git a/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc b/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc
index db0a1daa..75b9577 100644
--- a/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc
@@ -19,11 +19,9 @@
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/video_frame.h"
 #include "media/filters/jpeg_parser.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/vaapi/vaapi_jpeg_encoder.h"
 
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-
 namespace media {
 
 namespace {
diff --git a/media/gpu/vaapi/vaapi_jpeg_encoder.cc b/media/gpu/vaapi/vaapi_jpeg_encoder.cc
index f0e27ed0a..63b635e 100644
--- a/media/gpu/vaapi/vaapi_jpeg_encoder.cc
+++ b/media/gpu/vaapi/vaapi_jpeg_encoder.cc
@@ -12,15 +12,9 @@
 #include "base/macros.h"
 #include "base/numerics/safe_conversions.h"
 #include "media/filters/jpeg_parser.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/vaapi/vaapi_wrapper.h"
 
-#define ARRAY_MEMCPY_CHECKED(to, from)                               \
-  do {                                                               \
-    static_assert(sizeof(to) == sizeof(from),                        \
-                  #from " and " #to " arrays must be of same size"); \
-    memcpy(to, from, sizeof(to));                                    \
-  } while (0)
-
 namespace media {
 
 namespace {
@@ -92,12 +86,12 @@
     huff_table_param->load_huffman_table[i] = true;
 
     // Load DC Table.
-    ARRAY_MEMCPY_CHECKED(huff_table_param->huffman_table[i].num_dc_codes,
-                         dcTable.code_length);
+    SafeArrayMemcpy(huff_table_param->huffman_table[i].num_dc_codes,
+                    dcTable.code_length);
     // |code_values| of JpegHuffmanTable needs to hold DC and AC code values
     // so it has different size than
     // |huff_table_param->huffman_table[i].dc_values|. Therefore we can't use
-    // ARRAY_MEMCPY_CHECKED() here.
+    // SafeArrayMemcpy() here.
     static_assert(arraysize(huff_table_param->huffman_table[i].dc_values) <=
                       arraysize(dcTable.code_value),
                   "DC table code value array too small.");
@@ -105,10 +99,10 @@
            sizeof(huff_table_param->huffman_table[i].dc_values));
 
     // Load AC Table.
-    ARRAY_MEMCPY_CHECKED(huff_table_param->huffman_table[i].num_ac_codes,
-                         acTable.code_length);
-    ARRAY_MEMCPY_CHECKED(huff_table_param->huffman_table[i].ac_values,
-                         acTable.code_value);
+    SafeArrayMemcpy(huff_table_param->huffman_table[i].num_ac_codes,
+                    acTable.code_length);
+    SafeArrayMemcpy(huff_table_param->huffman_table[i].ac_values,
+                    acTable.code_value);
 
     memset(huff_table_param->huffman_table[i].pad, 0,
            sizeof(huff_table_param->huffman_table[i].pad));
diff --git a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
index 1e17dbd..c83d6fc 100644
--- a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
@@ -27,6 +27,7 @@
 #include "media/gpu/accelerated_video_decoder.h"
 #include "media/gpu/format_utils.h"
 #include "media/gpu/h264_decoder.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/vaapi/vaapi_common.h"
 #include "media/gpu/vaapi/vaapi_h264_accelerator.h"
 #include "media/gpu/vaapi/vaapi_picture.h"
@@ -37,9 +38,6 @@
 #include "media/video/picture.h"
 #include "ui/gl/gl_image.h"
 
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-
 namespace media {
 
 namespace {
diff --git a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
index dcf33d6..7389e67 100644
--- a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
@@ -30,6 +30,7 @@
 #include "media/base/video_bitrate_allocation.h"
 #include "media/gpu/format_utils.h"
 #include "media/gpu/h264_dpb.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/vaapi/h264_encoder.h"
 #include "media/gpu/vaapi/vaapi_common.h"
 #include "media/gpu/vaapi/vaapi_picture_factory.h"
@@ -40,9 +41,6 @@
 #include "media/gpu/vaapi/vaapi_picture_native_pixmap.h"
 #endif
 
-#define VLOGF(level) VLOG(level) << __func__ << "(): "
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
-
 #define NOTIFY_ERROR(error, msg)                        \
   do {                                                  \
     SetState(kError);                                   \
diff --git a/media/gpu/vaapi/vaapi_vp9_accelerator.cc b/media/gpu/vaapi/vaapi_vp9_accelerator.cc
index 75eaed8..69b994f1 100644
--- a/media/gpu/vaapi/vaapi_vp9_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_vp9_accelerator.cc
@@ -5,17 +5,11 @@
 #include "media/gpu/vaapi/vaapi_vp9_accelerator.h"
 
 #include "media/gpu/decode_surface_handler.h"
+#include "media/gpu/macros.h"
 #include "media/gpu/vaapi/vaapi_common.h"
 #include "media/gpu/vaapi/vaapi_wrapper.h"
 #include "media/gpu/vp9_picture.h"
 
-#define ARRAY_MEMCPY_CHECKED(to, from)                               \
-  do {                                                               \
-    static_assert(sizeof(to) == sizeof(from),                        \
-                  #from " and " #to " arrays must be of same size"); \
-    memcpy(to, from, sizeof(to));                                    \
-  } while (0)
-
 namespace media {
 
 VaapiVP9Accelerator::VaapiVP9Accelerator(
@@ -108,8 +102,8 @@
   pic_param.frame_header_length_in_bytes = frame_hdr->uncompressed_header_size;
   pic_param.first_partition_size = frame_hdr->header_size_in_bytes;
 
-  ARRAY_MEMCPY_CHECKED(pic_param.mb_segment_tree_probs, seg.tree_probs);
-  ARRAY_MEMCPY_CHECKED(pic_param.segment_pred_probs, seg.pred_probs);
+  SafeArrayMemcpy(pic_param.mb_segment_tree_probs, seg.tree_probs);
+  SafeArrayMemcpy(pic_param.segment_pred_probs, seg.pred_probs);
 
   pic_param.profile = frame_hdr->profile;
   pic_param.bit_depth = frame_hdr->bit_depth;
@@ -140,7 +134,7 @@
                  seg.FeatureEnabled(i, Vp9SegmentationParams::SEG_LVL_SKIP));
 #undef SEG_TO_SP_SF
 
-    ARRAY_MEMCPY_CHECKED(seg_param.filter_level, lf.lvl[i]);
+    SafeArrayMemcpy(seg_param.filter_level, lf.lvl[i]);
 
     seg_param.luma_dc_quant_scale = seg.y_dequant[i][0];
     seg_param.luma_ac_quant_scale = seg.y_dequant[i][1];
diff --git a/media/gpu/vaapi/vp8_encoder.cc b/media/gpu/vaapi/vp8_encoder.cc
index b527c5fa..054e7f4 100644
--- a/media/gpu/vaapi/vp8_encoder.cc
+++ b/media/gpu/vaapi/vp8_encoder.cc
@@ -5,8 +5,7 @@
 #include "media/gpu/vaapi/vp8_encoder.h"
 
 #include "base/bits.h"
-
-#define DVLOGF(level) DVLOG(level) << __func__ << "(): "
+#include "media/gpu/macros.h"
 
 namespace media {
 
diff --git a/media/learning/impl/BUILD.gn b/media/learning/impl/BUILD.gn
index dca4a51..94e238d 100644
--- a/media/learning/impl/BUILD.gn
+++ b/media/learning/impl/BUILD.gn
@@ -15,6 +15,8 @@
     "model.h",
     "random_tree_trainer.cc",
     "random_tree_trainer.h",
+    "target_distribution.cc",
+    "target_distribution.h",
     "training_algorithm.h",
   ]
 
@@ -35,6 +37,7 @@
   sources = [
     "learning_session_impl_unittest.cc",
     "random_tree_trainer_unittest.cc",
+    "target_distribution_unittest.cc",
   ]
 
   deps = [
diff --git a/media/learning/impl/target_distribution.cc b/media/learning/impl/target_distribution.cc
new file mode 100644
index 0000000..91aa2adf
--- /dev/null
+++ b/media/learning/impl/target_distribution.cc
@@ -0,0 +1,70 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/learning/impl/target_distribution.h"
+
+namespace media {
+namespace learning {
+
+TargetDistribution::TargetDistribution() = default;
+TargetDistribution::~TargetDistribution() = default;
+
+TargetDistribution& TargetDistribution::operator+=(
+    const TargetDistribution& rhs) {
+  for (auto& rhs_pair : rhs.counts()) {
+    counts_[rhs_pair.first] += rhs_pair.second;
+    total_counts_ += rhs_pair.second;
+  }
+
+  return *this;
+}
+
+TargetDistribution& TargetDistribution::operator+=(const TargetValue& rhs) {
+  counts_[rhs]++;
+  total_counts_++;
+  return *this;
+}
+
+int TargetDistribution::operator[](const TargetValue& value) const {
+  auto iter = counts_.find(value);
+  if (iter == counts_.end())
+    return 0;
+
+  return iter->second;
+}
+
+void TargetDistribution::Add(const TargetValue& value, int counts) {
+  counts_[value] += counts;
+  total_counts_ += counts;
+}
+
+bool TargetDistribution::FindSingularMax(TargetValue* value_out,
+                                         int* counts_out) const {
+  if (!counts_.size())
+    return false;
+
+  int unused_counts;
+  if (!counts_out)
+    counts_out = &unused_counts;
+
+  auto iter = counts_.begin();
+  *value_out = iter->first;
+  *counts_out = iter->second;
+  bool singular_max = true;
+  for (iter++; iter != counts_.end(); iter++) {
+    if (iter->second > *counts_out) {
+      *value_out = iter->first;
+      *counts_out = iter->second;
+      singular_max = true;
+    } else if (iter->second == *counts_out) {
+      // If this turns out to be the max, then it's not singular.
+      singular_max = false;
+    }
+  }
+
+  return singular_max;
+}
+
+}  // namespace learning
+}  // namespace media
diff --git a/media/learning/impl/target_distribution.h b/media/learning/impl/target_distribution.h
new file mode 100644
index 0000000..07cb850a
--- /dev/null
+++ b/media/learning/impl/target_distribution.h
@@ -0,0 +1,65 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_LEARNING_IMPL_TARGET_DISTRIBUTION_H_
+#define MEDIA_LEARNING_IMPL_TARGET_DISTRIBUTION_H_
+
+#include "base/component_export.h"
+#include "base/containers/flat_map.h"
+#include "base/macros.h"
+#include "media/learning/common/value.h"
+
+namespace media {
+namespace learning {
+
+// TargetDistribution of target values.
+class COMPONENT_EXPORT(LEARNING_IMPL) TargetDistribution {
+ public:
+  TargetDistribution();
+  ~TargetDistribution();
+
+  // Add |rhs| to our counts.
+  TargetDistribution& operator+=(const TargetDistribution& rhs);
+
+  // Increment |rhs| by one.
+  TargetDistribution& operator+=(const TargetValue& rhs);
+
+  // Return the number of counts for |value|.
+  int operator[](const TargetValue& value) const;
+
+  // It would be nice to have an int& variant of operator[], but then we can't
+  // keep |total_counts_| up to date.
+
+  // Include |counts| counts for |value|.
+  // TODO(liberato): operator+=(std::pair<value, int>)?
+  void Add(const TargetValue& value, int counts);
+
+  // Return the total counts in the map.
+  int total_counts() const { return total_counts_; }
+
+  // Find the singular value with the highest counts, and copy it into
+  // |value_out| and (optionally) |counts_out|.  Returns true if there is a
+  // singular maximum, else returns false with the out params undefined.
+  bool FindSingularMax(TargetValue* value_out, int* counts_out = nullptr) const;
+
+ private:
+  // We use a flat_map since this will often have only one or two TargetValues,
+  // such as "true" or "false".
+  using distribution_map_t = base::flat_map<TargetValue, int>;
+
+  const distribution_map_t& counts() const { return counts_; }
+
+  // [value] == counts
+  distribution_map_t counts_;
+
+  // Sum of all entries in |counts_|.
+  int total_counts_ = 0;
+
+  // Allow copy and assign.
+};
+
+}  // namespace learning
+}  // namespace media
+
+#endif  // MEDIA_LEARNING_IMPL_TARGET_DISTRIBUTION_H_
diff --git a/media/learning/impl/target_distribution_unittest.cc b/media/learning/impl/target_distribution_unittest.cc
new file mode 100644
index 0000000..533ed75
--- /dev/null
+++ b/media/learning/impl/target_distribution_unittest.cc
@@ -0,0 +1,136 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/learning/impl/target_distribution.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace media {
+namespace learning {
+
+class TargetDistributionTest : public testing::Test {
+ public:
+  TargetDistributionTest() : value_1(123), value_2(456), value_3(789) {}
+
+  TargetDistribution distribution_;
+
+  TargetValue value_1;
+  const int counts_1 = 100;
+
+  TargetValue value_2;
+  const int counts_2 = 10;
+
+  TargetValue value_3;
+};
+
+TEST_F(TargetDistributionTest, EmptyTargetDistributionHasZeroCounts) {
+  EXPECT_EQ(distribution_.total_counts(), 0);
+}
+
+TEST_F(TargetDistributionTest, AddingCountsWorks) {
+  distribution_.Add(value_1, counts_1);
+  EXPECT_EQ(distribution_.total_counts(), counts_1);
+  EXPECT_EQ(distribution_[value_1], counts_1);
+  distribution_.Add(value_1, counts_1);
+  EXPECT_EQ(distribution_.total_counts(), counts_1 * 2);
+  EXPECT_EQ(distribution_[value_1], counts_1 * 2);
+}
+
+TEST_F(TargetDistributionTest, MultipleValuesAreSeparate) {
+  distribution_.Add(value_1, counts_1);
+  distribution_.Add(value_2, counts_2);
+  EXPECT_EQ(distribution_.total_counts(), counts_1 + counts_2);
+  EXPECT_EQ(distribution_[value_1], counts_1);
+  EXPECT_EQ(distribution_[value_2], counts_2);
+}
+
+TEST_F(TargetDistributionTest, AddingTargetValues) {
+  distribution_ += value_1;
+  EXPECT_EQ(distribution_.total_counts(), 1);
+  EXPECT_EQ(distribution_[value_1], 1);
+  EXPECT_EQ(distribution_[value_2], 0);
+
+  distribution_ += value_1;
+  EXPECT_EQ(distribution_.total_counts(), 2);
+  EXPECT_EQ(distribution_[value_1], 2);
+  EXPECT_EQ(distribution_[value_2], 0);
+
+  distribution_ += value_2;
+  EXPECT_EQ(distribution_.total_counts(), 3);
+  EXPECT_EQ(distribution_[value_1], 2);
+  EXPECT_EQ(distribution_[value_2], 1);
+}
+
+TEST_F(TargetDistributionTest, AddingTargetDistributions) {
+  distribution_.Add(value_1, counts_1);
+
+  TargetDistribution rhs;
+  rhs.Add(value_2, counts_2);
+
+  distribution_ += rhs;
+
+  EXPECT_EQ(distribution_.total_counts(), counts_1 + counts_2);
+  EXPECT_EQ(distribution_[value_1], counts_1);
+  EXPECT_EQ(distribution_[value_2], counts_2);
+}
+
+TEST_F(TargetDistributionTest, FindSingularMaxFindsTheSingularMax) {
+  distribution_.Add(value_1, counts_1);
+  distribution_.Add(value_2, counts_2);
+  ASSERT_TRUE(counts_1 > counts_2);
+
+  TargetValue max_value(0);
+  int max_counts = 0;
+  EXPECT_TRUE(distribution_.FindSingularMax(&max_value, &max_counts));
+  EXPECT_EQ(max_value, value_1);
+  EXPECT_EQ(max_counts, counts_1);
+}
+
+TEST_F(TargetDistributionTest,
+       FindSingularMaxFindsTheSingularMaxAlternateOrder) {
+  // Switch the order, to handle sorting in different directions.
+  distribution_.Add(value_1, counts_2);
+  distribution_.Add(value_2, counts_1);
+  ASSERT_TRUE(counts_1 > counts_2);
+
+  TargetValue max_value(0);
+  int max_counts = 0;
+  EXPECT_TRUE(distribution_.FindSingularMax(&max_value, &max_counts));
+  EXPECT_EQ(max_value, value_2);
+  EXPECT_EQ(max_counts, counts_1);
+}
+
+TEST_F(TargetDistributionTest, FindSingularMaxReturnsFalsForNonSingularMax) {
+  distribution_.Add(value_1, counts_1);
+  distribution_.Add(value_2, counts_1);
+
+  TargetValue max_value(0);
+  int max_counts = 0;
+  EXPECT_FALSE(distribution_.FindSingularMax(&max_value, &max_counts));
+}
+
+TEST_F(TargetDistributionTest, FindSingularMaxIgnoresNonSingularNonMax) {
+  distribution_.Add(value_1, counts_1);
+  // |value_2| and |value_3| are tied, but not the max.
+  distribution_.Add(value_2, counts_2);
+  distribution_.Add(value_3, counts_2);
+  ASSERT_TRUE(counts_1 > counts_2);
+
+  TargetValue max_value(0);
+  int max_counts = 0;
+  EXPECT_TRUE(distribution_.FindSingularMax(&max_value, &max_counts));
+  EXPECT_EQ(max_value, value_1);
+  EXPECT_EQ(max_counts, counts_1);
+}
+
+TEST_F(TargetDistributionTest, FindSingularMaxDoesntRequireCounts) {
+  distribution_.Add(value_1, counts_1);
+
+  TargetValue max_value(0);
+  EXPECT_TRUE(distribution_.FindSingularMax(&max_value));
+  EXPECT_EQ(max_value, value_1);
+}
+
+}  // namespace learning
+}  // namespace media
diff --git a/mojo/core/BUILD.gn b/mojo/core/BUILD.gn
index 2515e87..956d574 100644
--- a/mojo/core/BUILD.gn
+++ b/mojo/core/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build/config/nacl/config.gni")
+import("//testing/libfuzzer/fuzzer_test.gni")
 import("//testing/test.gni")
 
 component("embedder_internal") {
@@ -31,7 +32,11 @@
     if (invoker.for_shared_library) {
       visibility = [ ":shared_library" ]
     } else {
-      visibility = [ ":embedder_internal" ]
+      visibility = [
+        ":embedder_internal",
+        ":mojo_core_channel_fuzzer",
+        ":mojo_core_node_channel_fuzzer",
+      ]
     }
 
     public = [
@@ -328,3 +333,25 @@
     "//testing/gtest",
   ]
 }
+
+fuzzer_test("mojo_core_channel_fuzzer") {
+  sources = [
+    "channel_fuzzer.cc",
+  ]
+  deps = [
+    ":impl_for_embedder",
+    "//base",
+    "//mojo/public/cpp/platform",
+  ]
+}
+
+fuzzer_test("mojo_core_node_channel_fuzzer") {
+  sources = [
+    "node_channel_fuzzer.cc",
+  ]
+  deps = [
+    ":impl_for_embedder",
+    "//base",
+    "//mojo/public/cpp/platform",
+  ]
+}
diff --git a/mojo/core/channel.cc b/mojo/core/channel.cc
index 603e1a4..a3062e7 100644
--- a/mojo/core/channel.cc
+++ b/mojo/core/channel.cc
@@ -13,6 +13,7 @@
 
 #include "base/macros.h"
 #include "base/memory/aligned_memory.h"
+#include "base/memory/ptr_util.h"
 #include "base/numerics/safe_math.h"
 #include "base/process/process_handle.h"
 #include "build/build_config.h"
@@ -58,6 +59,8 @@
 // Fuchsia: The zx_channel_write() API supports up to 64 handles.
 const size_t kMaxAttachedHandles = 64;
 
+Channel::Message::Message() = default;
+
 Channel::Message::Message(size_t payload_size, size_t max_handles)
     : Message(payload_size, payload_size, max_handles) {}
 
@@ -162,6 +165,19 @@
 }
 
 // static
+Channel::MessagePtr Channel::Message::CreateRawForFuzzing(
+    base::span<const unsigned char> data) {
+  auto message = base::WrapUnique(new Message);
+  message->size_ = data.size();
+  if (data.size()) {
+    message->data_ = static_cast<char*>(
+        base::AlignedAlloc(data.size(), kChannelMessageAlignment));
+    std::copy(data.begin(), data.end(), message->data_);
+  }
+  return message;
+}
+
+// static
 Channel::MessagePtr Channel::Message::Deserialize(
     const void* data,
     size_t data_num_bytes,
diff --git a/mojo/core/channel.h b/mojo/core/channel.h
index 17108e9f..15a1a2df 100644
--- a/mojo/core/channel.h
+++ b/mojo/core/channel.h
@@ -7,6 +7,7 @@
 
 #include <vector>
 
+#include "base/containers/span.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/process/process_handle.h"
@@ -143,6 +144,8 @@
             MessageType message_type);
     ~Message();
 
+    static MessagePtr CreateRawForFuzzing(base::span<const unsigned char> data);
+
     // Constructs a Message from serialized message data, optionally coming from
     // a known remote process.
     static MessagePtr Deserialize(
@@ -197,6 +200,8 @@
     void SetVersionForTest(uint16_t version_number);
 
    private:
+    Message();
+
     // The message data buffer.
     char* data_ = nullptr;
 
diff --git a/mojo/core/channel_fuzzer.cc b/mojo/core/channel_fuzzer.cc
new file mode 100644
index 0000000..dc3b0b2b
--- /dev/null
+++ b/mojo/core/channel_fuzzer.cc
@@ -0,0 +1,68 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <stdint.h>
+
+#include "base/bind_helpers.h"
+#include "base/message_loop/message_loop.h"
+#include "base/no_destructor.h"
+#include "base/run_loop.h"
+#include "build/build_config.h"
+#include "mojo/core/channel.h"
+#include "mojo/core/connection_params.h"
+#include "mojo/public/cpp/platform/platform_channel.h"
+
+using namespace mojo::core;
+
+// A fake delegate for each Channel endpoint. By the time an incoming message
+// reaches a Delegate, all interesting message parsing at the lowest protocol
+// layer has already been done by the receiving Channel implementation, so this
+// doesn't need to do any work.
+class FakeChannelDelegate : public Channel::Delegate {
+ public:
+  FakeChannelDelegate() = default;
+  ~FakeChannelDelegate() override = default;
+
+  void OnChannelMessage(const void* payload,
+                        size_t payload_size,
+                        std::vector<mojo::PlatformHandle> handles) override {}
+  void OnChannelError(Channel::Error error) override {}
+};
+
+extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data, size_t size) {
+  static base::NoDestructor<base::MessageLoop> message_loop(
+      base::MessageLoop::TYPE_IO);
+
+  // Platform-specific implementation of an OS IPC primitive that is normally
+  // used to carry messages between processes.
+  mojo::PlatformChannel channel;
+
+  FakeChannelDelegate receiver_delegate;
+  auto receiver = Channel::Create(&receiver_delegate,
+                                  ConnectionParams(channel.TakeLocalEndpoint()),
+                                  message_loop->task_runner());
+  receiver->Start();
+
+  FakeChannelDelegate sender_delegate;
+  auto sender = Channel::Create(&sender_delegate,
+                                ConnectionParams(channel.TakeRemoteEndpoint()),
+                                message_loop->task_runner());
+  sender->Start();
+
+  sender->Write(
+      Channel::Message::CreateRawForFuzzing(base::make_span(data, size)));
+
+  // Make sure |receiver| does whatever work it's gonna do in response to our
+  // message. By the time the loop goes idle, all parsing will be done.
+  base::RunLoop().RunUntilIdle();
+
+  // Clean up our channels so we don't leak their underlying OS primitives.
+  sender->ShutDown();
+  sender.reset();
+  receiver->ShutDown();
+  receiver.reset();
+  base::RunLoop().RunUntilIdle();
+
+  return 0;
+}
diff --git a/mojo/core/channel_posix.cc b/mojo/core/channel_posix.cc
index 67a998b..bf83419b 100644
--- a/mojo/core/channel_posix.cc
+++ b/mojo/core/channel_posix.cc
@@ -48,7 +48,7 @@
       : message_(std::move(message)),
         offset_(offset),
         handles_(message_->TakeHandlesForTransport()) {
-    DCHECK_GT(message_->data_num_bytes(), offset_);
+    DCHECK(!message_->data_num_bytes() || message_->data_num_bytes() > offset_);
   }
 
   MessageView(MessageView&& other) { *this = std::move(other); }
@@ -70,8 +70,10 @@
 
   size_t data_offset() const { return offset_; }
   void advance_data_offset(size_t num_bytes) {
-    DCHECK_GT(message_->data_num_bytes(), offset_ + num_bytes);
-    offset_ += num_bytes;
+    if (num_bytes) {
+      DCHECK_GT(message_->data_num_bytes(), offset_ + num_bytes);
+      offset_ += num_bytes;
+    }
   }
 
   std::vector<PlatformHandleInTransit> TakeHandles() {
diff --git a/mojo/core/node_channel_fuzzer.cc b/mojo/core/node_channel_fuzzer.cc
new file mode 100644
index 0000000..2cb572b
--- /dev/null
+++ b/mojo/core/node_channel_fuzzer.cc
@@ -0,0 +1,127 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <stdint.h>
+
+#include "base/bind_helpers.h"
+#include "base/message_loop/message_loop.h"
+#include "base/no_destructor.h"
+#include "base/run_loop.h"
+#include "build/build_config.h"
+#include "mojo/core/channel.h"
+#include "mojo/core/connection_params.h"
+#include "mojo/core/node_channel.h"  // nogncheck
+#include "mojo/public/cpp/platform/platform_channel.h"
+
+using namespace mojo::core;
+
+// Implementation of NodeChannel::Delegate which does nothing. All of the
+// interesting NodeChannel control message message parsing is done by
+// NodeChannel by the time any of the delegate methods are invoked, so there's
+// no need for this to do any work.
+class FakeNodeChannelDelegate : public NodeChannel::Delegate {
+ public:
+  FakeNodeChannelDelegate() = default;
+  ~FakeNodeChannelDelegate() override = default;
+
+  void OnAcceptInvitee(const ports::NodeName& from_node,
+                       const ports::NodeName& inviter_name,
+                       const ports::NodeName& token) override {}
+  void OnAcceptInvitation(const ports::NodeName& from_node,
+                          const ports::NodeName& token,
+                          const ports::NodeName& invitee_name) override {}
+  void OnAddBrokerClient(const ports::NodeName& from_node,
+                         const ports::NodeName& client_name,
+                         base::ProcessHandle process_handle) override {}
+  void OnBrokerClientAdded(const ports::NodeName& from_node,
+                           const ports::NodeName& client_name,
+                           mojo::PlatformHandle broker_channel) override {}
+  void OnAcceptBrokerClient(const ports::NodeName& from_node,
+                            const ports::NodeName& broker_name,
+                            mojo::PlatformHandle broker_channel) override {}
+  void OnEventMessage(const ports::NodeName& from_node,
+                      Channel::MessagePtr message) override {}
+  void OnRequestPortMerge(const ports::NodeName& from_node,
+                          const ports::PortName& connector_port_name,
+                          const std::string& token) override {}
+  void OnRequestIntroduction(const ports::NodeName& from_node,
+                             const ports::NodeName& name) override {}
+  void OnIntroduce(const ports::NodeName& from_node,
+                   const ports::NodeName& name,
+                   mojo::PlatformHandle channel_handle) override {}
+  void OnBroadcast(const ports::NodeName& from_node,
+                   Channel::MessagePtr message) override {}
+#if defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS))
+  void OnRelayEventMessage(const ports::NodeName& from_node,
+                           base::ProcessHandle from_process,
+                           const ports::NodeName& destination,
+                           Channel::MessagePtr message) override {}
+  void OnEventMessageFromRelay(const ports::NodeName& from_node,
+                               const ports::NodeName& source_node,
+                               Channel::MessagePtr message) override {}
+#endif
+  void OnAcceptPeer(const ports::NodeName& from_node,
+                    const ports::NodeName& token,
+                    const ports::NodeName& peer_name,
+                    const ports::PortName& port_name) override {}
+  void OnChannelError(const ports::NodeName& node,
+                      NodeChannel* channel) override {}
+};
+
+// A fake delegate for the sending Channel endpoint. The sending Channel is not
+// being fuzzed and won't receive any interesting messages, so this doesn't need
+// to do anything.
+class FakeChannelDelegate : public Channel::Delegate {
+ public:
+  FakeChannelDelegate() = default;
+  ~FakeChannelDelegate() override = default;
+
+  void OnChannelMessage(const void* payload,
+                        size_t payload_size,
+                        std::vector<mojo::PlatformHandle> handles) override {}
+  void OnChannelError(Channel::Error error) override {}
+};
+
+extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data, size_t size) {
+  static base::NoDestructor<base::MessageLoop> message_loop(
+      base::MessageLoop::TYPE_IO);
+
+  // Platform-specific implementation of an OS IPC primitive that is normally
+  // used to carry messages between processes.
+  mojo::PlatformChannel channel;
+
+  FakeNodeChannelDelegate receiver_delegate;
+  auto receiver = NodeChannel::Create(
+      &receiver_delegate, ConnectionParams(channel.TakeLocalEndpoint()),
+      message_loop->task_runner(), base::DoNothing());
+  receiver->Start();
+
+  // We only use a Channel for the sender side, since it allows us to easily
+  // encode and transmit raw messages. For this fuzzer, we allocate a valid
+  // Channel Message with a valid header, but fill its payload contents with
+  // fuzz. Such messages will always reach the receiving NodeChannel to be
+  // parsed further.
+  FakeChannelDelegate sender_delegate;
+  auto sender = Channel::Create(&sender_delegate,
+                                ConnectionParams(channel.TakeRemoteEndpoint()),
+                                message_loop->task_runner());
+  sender->Start();
+  auto message = std::make_unique<Channel::Message>(size, 0 /* num_handles */);
+  std::copy(data, data + size,
+            static_cast<unsigned char*>(message->mutable_payload()));
+  sender->Write(std::move(message));
+
+  // Make sure |receiver| does whatever work it's gonna do in response to our
+  // message. By the time the loop goes idle, all parsing will be done.
+  base::RunLoop().RunUntilIdle();
+
+  // Clean up our channels so we don't leak the underlying OS primitives.
+  sender->ShutDown();
+  sender.reset();
+  receiver->ShutDown();
+  receiver.reset();
+  base::RunLoop().RunUntilIdle();
+
+  return 0;
+}
diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc
index 6411200f..70ea152 100644
--- a/net/dns/host_resolver_impl.cc
+++ b/net/dns/host_resolver_impl.cc
@@ -515,14 +515,23 @@
 // DNS-over-HTTPS?
 bool DnsServerSupportsDoh(const IPAddress& dns_server) {
   static const base::NoDestructor<std::unordered_set<std::string>>
-      upgradable_servers({
+      upgradable_servers(std::initializer_list<std::string>({
           // Google Public DNS
-          "8.8.8.8", "8.8.4.4", "2001:4860:4860::8888", "2001:4860:4860::8844",
+          "8.8.8.8",
+          "8.8.4.4",
+          "2001:4860:4860::8888",
+          "2001:4860:4860::8844",
           // Cloudflare DNS
-          "1.1.1.1", "1.0.0.1", "2606:4700:4700::1111", "2606:4700:4700::1001",
+          "1.1.1.1",
+          "1.0.0.1",
+          "2606:4700:4700::1111",
+          "2606:4700:4700::1001",
           // Quad9 DNS
-          "9.9.9.9", "149.112.112.112", "2620:fe::fe", "2620:fe::9",
-      });
+          "9.9.9.9",
+          "149.112.112.112",
+          "2620:fe::fe",
+          "2620:fe::9",
+      }));
   return upgradable_servers->find(dns_server.ToString()) !=
          upgradable_servers->end();
 }
diff --git a/pdf/pdf_features.cc b/pdf/pdf_features.cc
index 91454c4..2b9d28a7 100644
--- a/pdf/pdf_features.cc
+++ b/pdf/pdf_features.cc
@@ -10,5 +10,8 @@
 const base::Feature kSaveEditedPDFForm{"SaveEditedPDFForm",
                                        base::FEATURE_DISABLED_BY_DEFAULT};
 
+const base::Feature kPDFAnnotations{"PDFAnnotations",
+                                    base::FEATURE_DISABLED_BY_DEFAULT};
+
 }  // namespace features
 }  // namespace chrome_pdf
diff --git a/pdf/pdf_features.h b/pdf/pdf_features.h
index 56019e5..4364431 100644
--- a/pdf/pdf_features.h
+++ b/pdf/pdf_features.h
@@ -14,6 +14,7 @@
 namespace features {
 
 extern const base::Feature kSaveEditedPDFForm;
+extern const base::Feature kPDFAnnotations;
 
 }  // namespace features
 }  // namespace chrome_pdf
diff --git a/services/identity/public/cpp/primary_account_mutator.h b/services/identity/public/cpp/primary_account_mutator.h
index e2ba816..fe890d8 100644
--- a/services/identity/public/cpp/primary_account_mutator.h
+++ b/services/identity/public/cpp/primary_account_mutator.h
@@ -51,9 +51,10 @@
   //    - the account is known by the IdentityManager.
   virtual bool SetPrimaryAccount(const std::string& account_id) = 0;
 
-  // Clears the primary account. Depending on |action|, the other accounts
+  // Clears the primary account, and returns whether the operation
+  // succeeded or not. Depending on |action|, the other accounts
   // known to the IdentityManager may be deleted.
-  virtual void ClearPrimaryAccount(
+  virtual bool ClearPrimaryAccount(
       ClearAccountsAction action,
       signin_metrics::ProfileSignout source_metric,
       signin_metrics::SignoutDelete delete_metric) = 0;
diff --git a/services/identity/public/cpp/primary_account_mutator_impl.cc b/services/identity/public/cpp/primary_account_mutator_impl.cc
index e6135213..78316b30 100644
--- a/services/identity/public/cpp/primary_account_mutator_impl.cc
+++ b/services/identity/public/cpp/primary_account_mutator_impl.cc
@@ -37,11 +37,26 @@
   return true;
 }
 
-void PrimaryAccountMutatorImpl::ClearPrimaryAccount(
+bool PrimaryAccountMutatorImpl::ClearPrimaryAccount(
     ClearAccountsAction action,
     signin_metrics::ProfileSignout source_metric,
     signin_metrics::SignoutDelete delete_metric) {
-  NOTIMPLEMENTED();
+  // TODO: report failure if SignOut is not allowed.
+
+  switch (action) {
+    case PrimaryAccountMutator::ClearAccountsAction::kDefault:
+      signin_manager_->SignOut(source_metric, delete_metric);
+      break;
+    case PrimaryAccountMutator::ClearAccountsAction::kKeepAll:
+      signin_manager_->SignOutAndKeepAllAccounts(source_metric, delete_metric);
+      break;
+    case PrimaryAccountMutator::ClearAccountsAction::kRemoveAll:
+      signin_manager_->SignOutAndRemoveAllAccounts(source_metric,
+                                                   delete_metric);
+      break;
+  }
+
+  return true;
 }
 
 bool PrimaryAccountMutatorImpl::IsSettingPrimaryAccountAllowed() const {
diff --git a/services/identity/public/cpp/primary_account_mutator_impl.h b/services/identity/public/cpp/primary_account_mutator_impl.h
index 45643e4..912e700 100644
--- a/services/identity/public/cpp/primary_account_mutator_impl.h
+++ b/services/identity/public/cpp/primary_account_mutator_impl.h
@@ -22,7 +22,7 @@
 
   // PrimaryAccountMutator implementation.
   bool SetPrimaryAccount(const std::string& account_id) override;
-  void ClearPrimaryAccount(
+  bool ClearPrimaryAccount(
       ClearAccountsAction action,
       signin_metrics::ProfileSignout source_metric,
       signin_metrics::SignoutDelete delete_metric) override;
diff --git a/services/identity/public/cpp/primary_account_mutator_unittest.cc b/services/identity/public/cpp/primary_account_mutator_unittest.cc
index 99568cf..34dbdc9 100644
--- a/services/identity/public/cpp/primary_account_mutator_unittest.cc
+++ b/services/identity/public/cpp/primary_account_mutator_unittest.cc
@@ -5,6 +5,7 @@
 #include "services/identity/public/cpp/primary_account_mutator.h"
 
 #include "base/test/scoped_task_environment.h"
+#include "components/signin/core/browser/signin_metrics.h"
 #include "services/identity/public/cpp/identity_test_environment.h"
 #include "testing/platform_test.h"
 
@@ -134,3 +135,111 @@
   EXPECT_FALSE(primary_account_mutator()->SetPrimaryAccount(
       primary_account_info.account_id));
 }
+
+TEST_F(PrimaryAccountMutatorTest, ClearPrimaryAccount_Default) {
+  if (!primary_account_mutator())
+    return;
+
+  // This test requires two accounts to be made available.
+  AccountInfo primary_account_info =
+      environment()->MakeAccountAvailable(kPrimaryAccountEmail);
+  AccountInfo other_account_info =
+      environment()->MakeAccountAvailable(kAnotherAccountEmail);
+
+  EXPECT_FALSE(identity_manager()->HasPrimaryAccount());
+  EXPECT_TRUE(identity_manager()->HasAccountWithRefreshToken(
+      primary_account_info.account_id));
+  EXPECT_TRUE(identity_manager()->HasAccountWithRefreshToken(
+      other_account_info.account_id));
+
+  // Sign in the primary account to check ClearPrimaryAccount() later on.
+  primary_account_mutator()->SetPrimaryAccount(primary_account_info.account_id);
+  EXPECT_TRUE(identity_manager()->HasPrimaryAccount());
+  EXPECT_EQ(identity_manager()->GetPrimaryAccountId(),
+            primary_account_info.account_id);
+
+  EXPECT_TRUE(primary_account_mutator()->ClearPrimaryAccount(
+      identity::PrimaryAccountMutator::ClearAccountsAction::kDefault,
+      signin_metrics::SIGNOUT_TEST,
+      signin_metrics::SignoutDelete::IGNORE_METRIC));
+
+  // The underlying SigninManager in IdentityTestEnvironment (FakeSigninManager)
+  // will be created with signin::AccountConsistencyMethod::kDisabled, which
+  // should result in ClearPrimaryAccount() removing all the tokens.
+  // Other possible combinations are covered by IdentityManagerTests unit tests.
+  EXPECT_FALSE(identity_manager()->HasPrimaryAccount());
+  EXPECT_FALSE(identity_manager()->HasAccountWithRefreshToken(
+      primary_account_info.account_id));
+  EXPECT_FALSE(identity_manager()->HasAccountWithRefreshToken(
+      other_account_info.account_id));
+}
+
+TEST_F(PrimaryAccountMutatorTest, ClearPrimaryAccount_KeepAll) {
+  if (!primary_account_mutator())
+    return;
+
+  // This test requires two accounts to be made available.
+  AccountInfo primary_account_info =
+      environment()->MakeAccountAvailable(kPrimaryAccountEmail);
+  AccountInfo other_account_info =
+      environment()->MakeAccountAvailable(kAnotherAccountEmail);
+
+  EXPECT_FALSE(identity_manager()->HasPrimaryAccount());
+  EXPECT_TRUE(identity_manager()->HasAccountWithRefreshToken(
+      primary_account_info.account_id));
+  EXPECT_TRUE(identity_manager()->HasAccountWithRefreshToken(
+      other_account_info.account_id));
+
+  // Sign in the primary account to check ClearPrimaryAccount() later on.
+  primary_account_mutator()->SetPrimaryAccount(primary_account_info.account_id);
+  EXPECT_TRUE(identity_manager()->HasPrimaryAccount());
+  EXPECT_EQ(identity_manager()->GetPrimaryAccountId(),
+            primary_account_info.account_id);
+
+  EXPECT_TRUE(primary_account_mutator()->ClearPrimaryAccount(
+      identity::PrimaryAccountMutator::ClearAccountsAction::kKeepAll,
+      signin_metrics::SIGNOUT_TEST,
+      signin_metrics::SignoutDelete::IGNORE_METRIC));
+
+  // ClearPrimaryAccount() should keep all the accounts available in this case.
+  EXPECT_FALSE(identity_manager()->HasPrimaryAccount());
+  EXPECT_TRUE(identity_manager()->HasAccountWithRefreshToken(
+      primary_account_info.account_id));
+  EXPECT_TRUE(identity_manager()->HasAccountWithRefreshToken(
+      other_account_info.account_id));
+}
+
+TEST_F(PrimaryAccountMutatorTest, ClearPrimaryAccount_RemoveAll) {
+  if (!primary_account_mutator())
+    return;
+
+  // This test requires two accounts to be made available.
+  AccountInfo primary_account_info =
+      environment()->MakeAccountAvailable(kPrimaryAccountEmail);
+  AccountInfo other_account_info =
+      environment()->MakeAccountAvailable(kAnotherAccountEmail);
+
+  EXPECT_FALSE(identity_manager()->HasPrimaryAccount());
+  EXPECT_TRUE(identity_manager()->HasAccountWithRefreshToken(
+      primary_account_info.account_id));
+  EXPECT_TRUE(identity_manager()->HasAccountWithRefreshToken(
+      other_account_info.account_id));
+
+  // Sign in the primary account to check ClearPrimaryAccount() later on.
+  primary_account_mutator()->SetPrimaryAccount(primary_account_info.account_id);
+  EXPECT_TRUE(identity_manager()->HasPrimaryAccount());
+  EXPECT_EQ(identity_manager()->GetPrimaryAccountId(),
+            primary_account_info.account_id);
+
+  EXPECT_TRUE(primary_account_mutator()->ClearPrimaryAccount(
+      identity::PrimaryAccountMutator::ClearAccountsAction::kRemoveAll,
+      signin_metrics::SIGNOUT_TEST,
+      signin_metrics::SignoutDelete::IGNORE_METRIC));
+
+  // ClearPrimaryAccount() should remove all the accounts in this case.
+  EXPECT_FALSE(identity_manager()->HasPrimaryAccount());
+  EXPECT_FALSE(identity_manager()->HasAccountWithRefreshToken(
+      primary_account_info.account_id));
+  EXPECT_FALSE(identity_manager()->HasAccountWithRefreshToken(
+      other_account_info.account_id));
+}
\ No newline at end of file
diff --git a/services/network/cors/cors_url_loader.cc b/services/network/cors/cors_url_loader.cc
index 01c835bd..714fa96a 100644
--- a/services/network/cors/cors_url_loader.cc
+++ b/services/network/cors/cors_url_loader.cc
@@ -199,11 +199,14 @@
   DCHECK(forwarding_client_);
   DCHECK(!deferred_redirect_url_);
 
+  int response_status_code =
+      response_head.headers ? response_head.headers->response_code() : 0;
+
   const bool is_304_for_revalidation =
-      request_.is_revalidating && response_head.headers->response_code() == 304;
+      request_.is_revalidating && response_status_code == 304;
   if (fetch_cors_flag_ && !is_304_for_revalidation) {
     const auto error_status = CheckAccess(
-        request_.url, response_head.headers->response_code(),
+        request_.url, response_status_code,
         GetHeaderString(response_head, header_names::kAccessControlAllowOrigin),
         GetHeaderString(response_head,
                         header_names::kAccessControlAllowCredentials),
diff --git a/services/network/cors/cors_url_loader_unittest.cc b/services/network/cors/cors_url_loader_unittest.cc
index ec29de44..6c2526a 100644
--- a/services/network/cors/cors_url_loader_unittest.cc
+++ b/services/network/cors/cors_url_loader_unittest.cc
@@ -76,7 +76,7 @@
     on_create_loader_and_start_ = closure;
   }
 
-  const network::ResourceRequest& request() const { return request_; }
+  const ResourceRequest& request() const { return request_; }
   const GURL& GetRequestedURL() const { return request_.url; }
   int num_created_loaders() const { return num_created_loaders_; }
 
@@ -228,12 +228,10 @@
   void AddAllowListEntryForOrigin(const url::Origin& source_origin,
                                   const std::string& protocol,
                                   const std::string& domain,
-                                  bool allow_subdomains) {
+                                  const mojom::CorsOriginAccessMatchMode mode) {
     origin_access_list_.AddAllowListEntryForOrigin(
-        source_origin,
-        network::mojom::CorsOriginPattern::New(
-            protocol, domain, allow_subdomains,
-            network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority));
+        source_origin, protocol, domain, mode,
+        mojom::CorsOriginAccessMatchPriority::kDefaultPriority);
   }
 
   static net::RedirectInfo CreateRedirectInfo(
@@ -1014,8 +1012,9 @@
 
   // Adds an entry to allow the cross origin request beyond the CORS
   // rules.
-  AddAllowListEntryForOrigin(url::Origin::Create(origin), url.scheme(),
-                             url.host(), false);
+  AddAllowListEntryForOrigin(
+      url::Origin::Create(origin), url.scheme(), url.host(),
+      mojom::CorsOriginAccessMatchMode::kDisallowSubdomains);
 
   CreateLoaderAndStart(origin, url, mojom::FetchRequestMode::kCors);
 
diff --git a/services/network/public/cpp/cors/origin_access_entry.cc b/services/network/public/cpp/cors/origin_access_entry.cc
index 99ac4f57..b9eb5fac 100644
--- a/services/network/public/cpp/cors/origin_access_entry.cc
+++ b/services/network/public/cpp/cors/origin_access_entry.cc
@@ -6,6 +6,7 @@
 
 #include "base/strings/string_util.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
+#include "services/network/public/mojom/cors_origin_pattern.mojom.h"
 #include "url/origin.h"
 #include "url/url_util.h"
 
@@ -125,6 +126,11 @@
   return kMatchesOrigin;
 }
 
+mojo::InlinedStructPtr<mojom::CorsOriginPattern>
+OriginAccessEntry::CreateCorsOriginPattern() const {
+  return mojom::CorsOriginPattern::New(protocol_, host_, mode_, priority_);
+}
+
 }  // namespace cors
 
 }  // namespace network
diff --git a/services/network/public/cpp/cors/origin_access_entry.h b/services/network/public/cpp/cors/origin_access_entry.h
index e7197cf..f49838d6 100644
--- a/services/network/public/cpp/cors/origin_access_entry.h
+++ b/services/network/public/cpp/cors/origin_access_entry.h
@@ -18,6 +18,10 @@
 
 namespace network {
 
+namespace mojom {
+class CorsOriginPattern;
+}  // namespace mojom
+
 namespace cors {
 
 // A class to hold a protocol and host pair and to provide methods to determine
@@ -37,12 +41,11 @@
   // IPv6 addresses must include brackets (e.g.
   // '[2001:db8:85a3::8a2e:370:7334]', not '2001:db8:85a3::8a2e:370:7334').
   // The priority argument is used to break ties when multiple entries match.
-  OriginAccessEntry(
-      const std::string& protocol,
-      const std::string& host,
-      const mojom::CorsOriginAccessMatchMode mode,
-      const mojom::CorsOriginAccessMatchPriority priority =
-          network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority);
+  OriginAccessEntry(const std::string& protocol,
+                    const std::string& host,
+                    const mojom::CorsOriginAccessMatchMode mode,
+                    const mojom::CorsOriginAccessMatchPriority priority =
+                        mojom::CorsOriginAccessMatchPriority::kDefaultPriority);
   OriginAccessEntry(OriginAccessEntry&& from);
 
   // 'matchesOrigin' requires a protocol match (e.g. 'http' != 'https').
@@ -56,6 +59,11 @@
     return registerable_domain_;
   }
 
+  // Creates mojom::CorsOriginPattern instance that represents |this|
+  // OriginAccessEntry instance.
+  mojo::InlinedStructPtr<mojom::CorsOriginPattern> CreateCorsOriginPattern()
+      const;
+
  private:
   const std::string protocol_;
   const std::string host_;
diff --git a/services/network/public/cpp/cors/origin_access_entry_unittest.cc b/services/network/public/cpp/cors/origin_access_entry_unittest.cc
index 4c4e50b..1f086e0 100644
--- a/services/network/public/cpp/cors/origin_access_entry_unittest.cc
+++ b/services/network/public/cpp/cors/origin_access_entry_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "services/network/public/cpp/cors/origin_access_entry.h"
 
+#include "services/network/public/mojom/cors_origin_pattern.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 #include "url/origin.h"
@@ -315,6 +316,20 @@
   }
 }
 
+TEST(OriginAccessEntryTest, CreateCorsOriginPattern) {
+  const std::string kProtocol = "https";
+  const std::string kDomain = "google.com";
+  const auto kMode = mojom::CorsOriginAccessMatchMode::kAllowSubdomains;
+  const auto kPriority = mojom::CorsOriginAccessMatchPriority::kDefaultPriority;
+
+  OriginAccessEntry entry(kProtocol, kDomain, kMode, kPriority);
+  mojom::CorsOriginPatternPtr pattern = entry.CreateCorsOriginPattern();
+  DCHECK_EQ(kProtocol, pattern->protocol);
+  DCHECK_EQ(kDomain, pattern->domain);
+  DCHECK_EQ(kMode, pattern->mode);
+  DCHECK_EQ(kPriority, pattern->priority);
+}
+
 }  // namespace
 
 }  // namespace cors
diff --git a/services/network/public/cpp/cors/origin_access_list.cc b/services/network/public/cpp/cors/origin_access_list.cc
index e6b3ad1..6a302632 100644
--- a/services/network/public/cpp/cors/origin_access_list.cc
+++ b/services/network/public/cpp/cors/origin_access_list.cc
@@ -4,6 +4,8 @@
 
 #include "services/network/public/cpp/cors/origin_access_list.h"
 
+#include "services/network/public/mojom/cors_origin_pattern.mojom.h"
+
 namespace network {
 
 namespace cors {
@@ -13,14 +15,25 @@
 
 void OriginAccessList::SetAllowListForOrigin(
     const url::Origin& source_origin,
-    const std::vector<mojom::CorsOriginPatternPtr>& patterns) {
+    const std::vector<CorsOriginPatternPtr>& patterns) {
   SetForOrigin(source_origin, patterns, &allow_list_);
 }
 
 void OriginAccessList::AddAllowListEntryForOrigin(
     const url::Origin& source_origin,
-    const mojom::CorsOriginPatternPtr& pattern) {
-  AddForOrigin(source_origin, pattern, &allow_list_);
+    const std::string& protocol,
+    const std::string& domain,
+    const mojom::CorsOriginAccessMatchMode mode,
+    const mojom::CorsOriginAccessMatchPriority priority) {
+  AddForOrigin(source_origin,
+               mojom::CorsOriginPattern::New(protocol, domain, mode, priority),
+               &allow_list_);
+}
+
+void OriginAccessList::ClearAllowListForOrigin(
+    const url::Origin& source_origin) {
+  SetForOrigin(source_origin, std::vector<mojom::CorsOriginPatternPtr>(),
+               &allow_list_);
 }
 
 void OriginAccessList::ClearAllowList() {
@@ -29,14 +42,25 @@
 
 void OriginAccessList::SetBlockListForOrigin(
     const url::Origin& source_origin,
-    const std::vector<mojom::CorsOriginPatternPtr>& patterns) {
+    const std::vector<CorsOriginPatternPtr>& patterns) {
   SetForOrigin(source_origin, patterns, &block_list_);
 }
 
 void OriginAccessList::AddBlockListEntryForOrigin(
     const url::Origin& source_origin,
-    const mojom::CorsOriginPatternPtr& pattern) {
-  AddForOrigin(source_origin, pattern, &block_list_);
+    const std::string& protocol,
+    const std::string& domain,
+    const mojom::CorsOriginAccessMatchMode mode,
+    const mojom::CorsOriginAccessMatchPriority priority) {
+  AddForOrigin(source_origin,
+               mojom::CorsOriginPattern::New(protocol, domain, mode, priority),
+               &block_list_);
+}
+
+void OriginAccessList::ClearBlockListForOrigin(
+    const url::Origin& source_origin) {
+  SetForOrigin(source_origin, std::vector<mojom::CorsOriginPatternPtr>(),
+               &block_list_);
 }
 
 void OriginAccessList::ClearBlockList() {
@@ -64,10 +88,38 @@
   return allow_list_priority > block_list_priority;
 }
 
+std::vector<mojo::StructPtr<mojom::CorsOriginAccessPatterns>>
+OriginAccessList::CreateCorsOriginAccessPatternsList() const {
+  std::set<std::string> origins;
+  for (const auto& allow_map : allow_list_)
+    origins.insert(allow_map.first);
+  for (const auto& block_map : block_list_)
+    origins.insert(block_map.first);
+
+  std::vector<mojom::CorsOriginAccessPatternsPtr> access_patterns;
+  for (const auto& origin : origins) {
+    std::vector<mojom::CorsOriginPatternPtr> allow_patterns;
+    const auto& allow_entries = allow_list_.find(origin);
+    if (allow_entries != allow_list_.end()) {
+      for (const auto& pattern : allow_entries->second)
+        allow_patterns.push_back(pattern.CreateCorsOriginPattern());
+    }
+    std::vector<mojom::CorsOriginPatternPtr> block_patterns;
+    const auto& block_entries = block_list_.find(origin);
+    if (block_entries != block_list_.end()) {
+      for (const auto& pattern : block_entries->second)
+        block_patterns.push_back(pattern.CreateCorsOriginPattern());
+    }
+    access_patterns.push_back(mojom::CorsOriginAccessPatterns::New(
+        origin, std::move(allow_patterns), std::move(block_patterns)));
+  }
+  return access_patterns;
+}
+
 // static
 void OriginAccessList::SetForOrigin(
     const url::Origin& source_origin,
-    const std::vector<mojom::CorsOriginPatternPtr>& patterns,
+    const std::vector<CorsOriginPatternPtr>& patterns,
     PatternMap* map) {
   DCHECK(map);
   DCHECK(!source_origin.opaque());
@@ -80,28 +132,20 @@
   Patterns& native_patterns = (*map)[source];
   for (const auto& pattern : patterns) {
     native_patterns.push_back(OriginAccessEntry(
-        pattern->protocol, pattern->domain,
-        pattern->allow_subdomains
-            ? mojom::CorsOriginAccessMatchMode::kAllowSubdomains
-            : mojom::CorsOriginAccessMatchMode::kDisallowSubdomains,
-        pattern->priority));
+        pattern->protocol, pattern->domain, pattern->mode, pattern->priority));
   }
 }
 
 // static
 void OriginAccessList::AddForOrigin(const url::Origin& source_origin,
-                                    const mojom::CorsOriginPatternPtr& pattern,
+                                    const CorsOriginPatternPtr& pattern,
                                     PatternMap* map) {
   DCHECK(map);
   DCHECK(!source_origin.opaque());
 
   std::string source = source_origin.Serialize();
-  (*map)[source].push_back(OriginAccessEntry(
-      pattern->protocol, pattern->domain,
-      pattern->allow_subdomains
-          ? mojom::CorsOriginAccessMatchMode::kAllowSubdomains
-          : mojom::CorsOriginAccessMatchMode::kDisallowSubdomains,
-      pattern->priority));
+  (*map)[source].push_back(OriginAccessEntry(pattern->protocol, pattern->domain,
+                                             pattern->mode, pattern->priority));
 }
 
 // static
diff --git a/services/network/public/cpp/cors/origin_access_list.h b/services/network/public/cpp/cors/origin_access_list.h
index dac77504..9f8f318 100644
--- a/services/network/public/cpp/cors/origin_access_list.h
+++ b/services/network/public/cpp/cors/origin_access_list.h
@@ -12,30 +12,44 @@
 #include "base/component_export.h"
 #include "base/macros.h"
 #include "services/network/public/cpp/cors/origin_access_entry.h"
-#include "services/network/public/mojom/cors_origin_pattern.mojom.h"
+#include "services/network/public/mojom/cors_origin_pattern.mojom-shared.h"
 #include "url/origin.h"
 
 namespace network {
 
+namespace mojom {
+class CorsOriginPattern;
+class CorsOriginAccessPatterns;
+}  // namespace mojom
+
 namespace cors {
 
 // A class to manage origin access allow / block lists. If these lists conflict,
 // blacklisting is respected. These lists are managed per source-origin basis.
 class COMPONENT_EXPORT(NETWORK_CPP) OriginAccessList {
  public:
+  using CorsOriginPatternPtr = mojo::InlinedStructPtr<mojom::CorsOriginPattern>;
+
   OriginAccessList();
   ~OriginAccessList();
 
   // Clears the old allow list for |source_origin|, and set |patterns| to the
   // allow list. When two or more patterns in a list match, the entry with the
   // higher |priority| takes precedence.
-  void SetAllowListForOrigin(
-      const url::Origin& source_origin,
-      const std::vector<mojom::CorsOriginPatternPtr>& patterns);
+  void SetAllowListForOrigin(const url::Origin& source_origin,
+                             const std::vector<CorsOriginPatternPtr>& patterns);
 
-  // Adds |pattern| to the allow list for |source_origin|.
-  void AddAllowListEntryForOrigin(const url::Origin& source_origin,
-                                  const mojom::CorsOriginPatternPtr& pattern);
+  // Adds an access pattern by |protocol|, |domain|, |mode|, and |priority|,
+  // to the allow list for |source_origin|.
+  void AddAllowListEntryForOrigin(
+      const url::Origin& source_origin,
+      const std::string& protocol,
+      const std::string& domain,
+      const mojom::CorsOriginAccessMatchMode mode,
+      const mojom::CorsOriginAccessMatchPriority priority);
+
+  // Clears the old allow list for |source_origin|.
+  void ClearAllowListForOrigin(const url::Origin& source_origin);
 
   // Clears the old allow list.
   void ClearAllowList();
@@ -43,13 +57,20 @@
   // Clears the old block list for |source_origin| and set |patterns| to the
   // block list. When two or more patterns in a list match, the entry with the
   // higher |priority| takes precedence.
-  void SetBlockListForOrigin(
-      const url::Origin& source_origin,
-      const std::vector<mojom::CorsOriginPatternPtr>& patterns);
+  void SetBlockListForOrigin(const url::Origin& source_origin,
+                             const std::vector<CorsOriginPatternPtr>& patterns);
 
-  // Adds |pattern| to the block list for |source_origin|.
-  void AddBlockListEntryForOrigin(const url::Origin& source_origin,
-                                  const mojom::CorsOriginPatternPtr& pattern);
+  // Adds an access pattern by |protocol|, |domain|, |mode|, and |priority|,
+  // to the block list for |source_origin|.
+  void AddBlockListEntryForOrigin(
+      const url::Origin& source_origin,
+      const std::string& protocol,
+      const std::string& domain,
+      const mojom::CorsOriginAccessMatchMode mode,
+      const mojom::CorsOriginAccessMatchPriority priority);
+
+  // Clears the old block list for |source_origin|.
+  void ClearBlockListForOrigin(const url::Origin& source_origin);
 
   // Clears the old block list.
   void ClearBlockList();
@@ -59,22 +80,28 @@
   bool IsAllowed(const url::Origin& source_origin,
                  const GURL& destination) const;
 
+  // Creates mojom::CorsPriginAccessPatterns instance vector that represents
+  // |this| OriginAccessList instance.
+  std::vector<mojo::StructPtr<mojom::CorsOriginAccessPatterns>>
+  CreateCorsOriginAccessPatternsList() const;
+
  private:
   using Patterns = std::vector<OriginAccessEntry>;
   using PatternMap = std::map<std::string, Patterns>;
 
-  static void SetForOrigin(
-      const url::Origin& source_origin,
-      const std::vector<mojom::CorsOriginPatternPtr>& patterns,
-      PatternMap* map);
-  static void AddForOrigin(const url::Origin& source_origin,
-                           const mojom::CorsOriginPatternPtr& pattern,
+  static void SetForOrigin(const url::Origin& source_origin,
+                           const std::vector<CorsOriginPatternPtr>& patterns,
                            PatternMap* map);
-  static network::mojom::CorsOriginAccessMatchPriority
-  GetHighestPriorityOfRuleForOrigin(const std::string& source,
-                                    const url::Origin& destination_origin,
-                                    const PatternMap& map);
+  static void AddForOrigin(const url::Origin& source_origin,
+                           const CorsOriginPatternPtr& pattern,
+                           PatternMap* map);
+  static mojom::CorsOriginAccessMatchPriority GetHighestPriorityOfRuleForOrigin(
+      const std::string& source,
+      const url::Origin& destination_origin,
+      const PatternMap& map);
 
+  // TODO(toyoshim): Redesign to have an unified map to be consistent with
+  // mojom::CorsOriginAccessPatterns. See https://crbug.com/908756.
   PatternMap allow_list_;
   PatternMap block_list_;
 
diff --git a/services/network/public/cpp/cors/origin_access_list_unittest.cc b/services/network/public/cpp/cors/origin_access_list_unittest.cc
index 16dcfaa..f64e153 100644
--- a/services/network/public/cpp/cors/origin_access_list_unittest.cc
+++ b/services/network/public/cpp/cors/origin_access_list_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "services/network/public/cpp/cors/origin_access_list.h"
 #include "services/network/public/mojom/cors.mojom.h"
+#include "services/network/public/mojom/cors_origin_pattern.mojom.h"
 
 #include <memory>
 
@@ -17,6 +18,12 @@
 
 namespace {
 
+const auto kAllowSubdomains =
+    mojom::CorsOriginAccessMatchMode::kAllowSubdomains;
+
+const auto kDisallowSubdomains =
+    mojom::CorsOriginAccessMatchMode::kDisallowSubdomains;
+
 // OriginAccessListTest is a out of blink version of blink::SecurityPolicyTest,
 // but it contains only tests for the allow/block lists management.
 class OriginAccessListTest : public testing::Test {
@@ -49,39 +56,35 @@
   }
   void SetAllowListEntry(const std::string& protocol,
                          const std::string& host,
-                         bool allow_subdomains) {
+                         const mojom::CorsOriginAccessMatchMode mode) {
     std::vector<mojom::CorsOriginPatternPtr> patterns;
     patterns.push_back(mojom::CorsOriginPattern::New(
-        protocol, host, allow_subdomains,
-        network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority));
+        protocol, host, mode,
+        mojom::CorsOriginAccessMatchPriority::kDefaultPriority));
     list_.SetAllowListForOrigin(source_origin_, patterns);
   }
-  void AddAllowListEntry(
-      const std::string& protocol,
-      const std::string& host,
-      bool allow_subdomains,
-      const network::mojom::CorsOriginAccessMatchPriority priority) {
-    list_.AddAllowListEntryForOrigin(
-        source_origin_, network::mojom::CorsOriginPattern::New(
-                            protocol, host, allow_subdomains, priority));
+  void AddAllowListEntry(const std::string& protocol,
+                         const std::string& host,
+                         const mojom::CorsOriginAccessMatchMode mode,
+                         const mojom::CorsOriginAccessMatchPriority priority) {
+    list_.AddAllowListEntryForOrigin(source_origin_, protocol, host, mode,
+                                     priority);
   }
   void SetBlockListEntry(const std::string& protocol,
                          const std::string& host,
-                         bool allow_subdomains) {
+                         const mojom::CorsOriginAccessMatchMode mode) {
     std::vector<mojom::CorsOriginPatternPtr> patterns;
     patterns.push_back(mojom::CorsOriginPattern::New(
-        protocol, host, allow_subdomains,
-        network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority));
+        protocol, host, mode,
+        mojom::CorsOriginAccessMatchPriority::kDefaultPriority));
     list_.SetBlockListForOrigin(source_origin_, patterns);
   }
-  void AddBlockListEntry(
-      const std::string& protocol,
-      const std::string& host,
-      bool allow_subdomains,
-      const network::mojom::CorsOriginAccessMatchPriority priority) {
-    list_.AddBlockListEntryForOrigin(
-        source_origin_, network::mojom::CorsOriginPattern::New(
-                            protocol, host, allow_subdomains, priority));
+  void AddBlockListEntry(const std::string& protocol,
+                         const std::string& host,
+                         const mojom::CorsOriginAccessMatchMode mode,
+                         const mojom::CorsOriginAccessMatchPriority priority) {
+    list_.AddBlockListEntryForOrigin(source_origin_, protocol, host, mode,
+                                     priority);
   }
   void ResetLists() {
     std::vector<mojom::CorsOriginPatternPtr> patterns;
@@ -110,7 +113,7 @@
 
   // Adding access for https://example.com should work, but should not grant
   // access to subdomains or other schemes.
-  SetAllowListEntry("https", "example.com", false);
+  SetAllowListEntry("https", "example.com", kDisallowSubdomains);
   EXPECT_TRUE(IsAllowed(https_example_origin()));
   EXPECT_FALSE(IsAllowed(https_sub_example_origin()));
   EXPECT_FALSE(IsAllowed(http_example_origin()));
@@ -123,9 +126,8 @@
 
   // Adding an entry that matches subdomains should grant access to any
   // subdomains.
-  AddAllowListEntry(
-      "https", "example.com", true,
-      network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority);
+  AddAllowListEntry("https", "example.com", kAllowSubdomains,
+                    mojom::CorsOriginAccessMatchPriority::kDefaultPriority);
   EXPECT_TRUE(IsAllowed(https_example_origin()));
   EXPECT_TRUE(IsAllowed(https_sub_example_origin()));
   EXPECT_FALSE(IsAllowed(http_example_origin()));
@@ -133,7 +135,7 @@
 
 TEST_F(OriginAccessListTest, IsAccessAllowedWildCard) {
   // An empty domain that matches subdomains results in matching every domain.
-  SetAllowListEntry("https", "", true);
+  SetAllowListEntry("https", "", kAllowSubdomains);
   EXPECT_TRUE(IsAllowed(https_example_origin()));
   EXPECT_TRUE(IsAllowed(https_google_origin()));
   EXPECT_FALSE(IsAllowed(http_example_origin()));
@@ -141,63 +143,109 @@
 
 TEST_F(OriginAccessListTest, IsAccessAllowedWithBlockListEntry) {
   // The block list takes priority over the allow list.
-  SetAllowListEntry("https", "example.com", true);
-  SetBlockListEntry("https", "example.com", false);
+  SetAllowListEntry("https", "example.com", kAllowSubdomains);
+  SetBlockListEntry("https", "example.com", kDisallowSubdomains);
 
   EXPECT_FALSE(IsAllowed(https_example_origin()));
   EXPECT_TRUE(IsAllowed(https_sub_example_origin()));
 }
 
 TEST_F(OriginAccessListTest, IsAccessAllowedWildcardWithBlockListEntry) {
-  SetAllowListEntry("https", "", true);
-  AddBlockListEntry(
-      "https", "google.com", false,
-      network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority);
+  SetAllowListEntry("https", "", kAllowSubdomains);
+  AddBlockListEntry("https", "google.com", kDisallowSubdomains,
+                    mojom::CorsOriginAccessMatchPriority::kDefaultPriority);
 
   EXPECT_TRUE(IsAllowed(https_example_origin()));
   EXPECT_FALSE(IsAllowed(https_google_origin()));
 }
 
 TEST_F(OriginAccessListTest, IsPriorityRespected) {
-  SetAllowListEntry("https", "example.com", true);
+  SetAllowListEntry("https", "example.com", kAllowSubdomains);
   EXPECT_TRUE(IsAllowed(https_example_origin()));
   EXPECT_TRUE(IsAllowed(https_sub_example_origin()));
 
   // Higher priority blocklist overrides lower priority allowlist.
-  AddBlockListEntry(
-      "https", "example.com", true,
-      network::mojom::CorsOriginAccessMatchPriority::kLowPriority);
+  AddBlockListEntry("https", "example.com", kAllowSubdomains,
+                    mojom::CorsOriginAccessMatchPriority::kLowPriority);
   EXPECT_FALSE(IsAllowed(https_example_origin()));
   EXPECT_FALSE(IsAllowed(https_sub_example_origin()));
 
   // Higher priority allowlist overrides lower priority blocklist.
-  AddAllowListEntry(
-      "https", "example.com", false,
-      network::mojom::CorsOriginAccessMatchPriority::kMediumPriority);
+  AddAllowListEntry("https", "example.com", kDisallowSubdomains,
+                    mojom::CorsOriginAccessMatchPriority::kMediumPriority);
   EXPECT_TRUE(IsAllowed(https_example_origin()));
   EXPECT_FALSE(IsAllowed(https_sub_example_origin()));
 }
 
 TEST_F(OriginAccessListTest, IsPriorityRespectedReverse) {
-  AddAllowListEntry(
-      "https", "example.com", false,
-      network::mojom::CorsOriginAccessMatchPriority::kMediumPriority);
+  AddAllowListEntry("https", "example.com", kDisallowSubdomains,
+                    mojom::CorsOriginAccessMatchPriority::kMediumPriority);
   EXPECT_TRUE(IsAllowed(https_example_origin()));
   EXPECT_FALSE(IsAllowed(https_sub_example_origin()));
 
-  AddBlockListEntry(
-      "https", "example.com", true,
-      network::mojom::CorsOriginAccessMatchPriority::kLowPriority);
+  AddBlockListEntry("https", "example.com", kAllowSubdomains,
+                    mojom::CorsOriginAccessMatchPriority::kLowPriority);
   EXPECT_TRUE(IsAllowed(https_example_origin()));
   EXPECT_FALSE(IsAllowed(https_sub_example_origin()));
 
-  AddAllowListEntry(
-      "https", "example.com", true,
-      network::mojom::CorsOriginAccessMatchPriority::kDefaultPriority);
+  AddAllowListEntry("https", "example.com", kAllowSubdomains,
+                    mojom::CorsOriginAccessMatchPriority::kDefaultPriority);
   EXPECT_TRUE(IsAllowed(https_example_origin()));
   EXPECT_FALSE(IsAllowed(https_sub_example_origin()));
 }
 
+TEST_F(OriginAccessListTest, CreateCorsOriginAccessPatternsList) {
+  const url::Origin kOrigin1 =
+      url::Origin::Create(GURL("https://foo.google.com"));
+  const url::Origin kOrigin2 =
+      url::Origin::Create(GURL("https://bar.google.com"));
+  const std::string kProtocol = "https";
+  const std::string kDomain1 = "foo.example.com";
+  const std::string kDomain2 = "bar.example.com";
+
+  OriginAccessList list;
+  list.AddAllowListEntryForOrigin(
+      kOrigin1, kProtocol, kDomain1, kAllowSubdomains,
+      mojom::CorsOriginAccessMatchPriority::kMediumPriority);
+  list.AddBlockListEntryForOrigin(
+      kOrigin2, kProtocol, kDomain2, kDisallowSubdomains,
+      mojom::CorsOriginAccessMatchPriority::kDefaultPriority);
+
+  std::vector<mojom::CorsOriginAccessPatternsPtr> patterns =
+      list.CreateCorsOriginAccessPatternsList();
+  bool found_origin1 = false;
+  bool found_origin2 = false;
+  for (const auto& pattern : patterns) {
+    if (pattern->source_origin == kOrigin1.Serialize()) {
+      EXPECT_FALSE(found_origin1);
+      found_origin1 = true;
+
+      EXPECT_EQ(0u, pattern->block_patterns.size());
+      ASSERT_EQ(1u, pattern->allow_patterns.size());
+      EXPECT_EQ(kProtocol, pattern->allow_patterns[0]->protocol);
+      EXPECT_EQ(kDomain1, pattern->allow_patterns[0]->domain);
+      EXPECT_EQ(kAllowSubdomains, pattern->allow_patterns[0]->mode);
+      EXPECT_EQ(mojom::CorsOriginAccessMatchPriority::kMediumPriority,
+                pattern->allow_patterns[0]->priority);
+    } else if (pattern->source_origin == kOrigin2.Serialize()) {
+      EXPECT_FALSE(found_origin2);
+      found_origin2 = true;
+
+      EXPECT_EQ(0u, pattern->allow_patterns.size());
+      ASSERT_EQ(1u, pattern->block_patterns.size());
+      EXPECT_EQ(kProtocol, pattern->block_patterns[0]->protocol);
+      EXPECT_EQ(kDomain2, pattern->block_patterns[0]->domain);
+      EXPECT_EQ(kDisallowSubdomains, pattern->block_patterns[0]->mode);
+      EXPECT_EQ(mojom::CorsOriginAccessMatchPriority::kDefaultPriority,
+                pattern->block_patterns[0]->priority);
+    } else {
+      FAIL();
+    }
+  }
+  EXPECT_TRUE(found_origin1);
+  EXPECT_TRUE(found_origin2);
+}
+
 }  // namespace
 
 }  // namespace cors
diff --git a/services/network/public/mojom/cors_origin_pattern.mojom b/services/network/public/mojom/cors_origin_pattern.mojom
index d8c1049..787a589 100644
--- a/services/network/public/mojom/cors_origin_pattern.mojom
+++ b/services/network/public/mojom/cors_origin_pattern.mojom
@@ -27,7 +27,7 @@
   kMaxPriority
 };
 
-// Parameters for representing a access origin whitelist or blacklist for CORS.
+// Parameters for representing a access origin allowlist or blocklist for CORS.
 struct CorsOriginPattern {
   // The protocol part of the destination URL.
   string protocol;
@@ -35,8 +35,8 @@
   // The domain part of the destination URL.
   string domain;
 
-  // Whether subdomains match this protocol and host pattern.
-  bool allow_subdomains;
+  // Specifies a mode for domain match.
+  CorsOriginAccessMatchMode mode;
 
   // Order of preference in which the pattern is applied.  Higher priority
   // patterns take precedence over lower ones.  In the case were both a
@@ -44,3 +44,12 @@
   // the block list rule takes priority.
   CorsOriginAccessMatchPriority priority;
 };
+
+// Parameters for representing pairs of source origin and allow/block-lists
+// for CORS.
+struct CorsOriginAccessPatterns {
+  string source_origin;
+
+  array<CorsOriginPattern> allow_patterns;
+  array<CorsOriginPattern> block_patterns;
+};
diff --git a/services/ws/public/cpp/gpu/BUILD.gn b/services/ws/public/cpp/gpu/BUILD.gn
index 94dbf46..26c597a 100644
--- a/services/ws/public/cpp/gpu/BUILD.gn
+++ b/services/ws/public/cpp/gpu/BUILD.gn
@@ -35,6 +35,7 @@
     "//gpu/command_buffer/client:gles2_cmd_helper",
     "//gpu/command_buffer/client:gles2_implementation",
     "//gpu/command_buffer/client:raster",
+    "//gpu/command_buffer/client:raster_interface",
     "//gpu/command_buffer/client:webgpu",
     "//gpu/command_buffer/common:raster",
     "//gpu/skia_bindings",
@@ -43,4 +44,10 @@
     "//services/ws/public/mojom",
     "//ui/gl",
   ]
+
+  if (use_aura || is_mac) {
+    public += [ "shared_worker_context_provider_factory.h" ]
+
+    sources += [ "shared_worker_context_provider_factory.cc" ]
+  }
 }
diff --git a/services/ws/public/cpp/gpu/shared_worker_context_provider_factory.cc b/services/ws/public/cpp/gpu/shared_worker_context_provider_factory.cc
new file mode 100644
index 0000000..fcc123aa
--- /dev/null
+++ b/services/ws/public/cpp/gpu/shared_worker_context_provider_factory.cc
@@ -0,0 +1,108 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "services/ws/public/cpp/gpu/shared_worker_context_provider_factory.h"
+
+#include "components/viz/common/gpu/raster_context_provider.h"
+#include "gpu/command_buffer/client/raster_interface.h"
+#include "gpu/command_buffer/common/context_result.h"
+#include "gpu/ipc/client/gpu_channel_host.h"
+#include "services/ws/public/cpp/gpu/context_provider_command_buffer.h"
+#include "ui/base/ui_base_features.h"
+
+namespace ws {
+namespace {
+
+bool CheckWorkerContextLost(viz::RasterContextProvider* context_provider) {
+  if (!context_provider)
+    return false;
+
+  viz::RasterContextProvider::ScopedRasterContextLock lock(context_provider);
+  return lock.RasterInterface()->GetGraphicsResetStatusKHR() != GL_NO_ERROR;
+}
+
+}  // namespace
+
+SharedWorkerContextProviderFactory::SharedWorkerContextProviderFactory(
+    int32_t stream_id,
+    gpu::SchedulingPriority priority,
+    const GURL& identifying_url,
+    ws::command_buffer_metrics::ContextType context_type)
+    : stream_id_(stream_id),
+      priority_(priority),
+      identifying_url_(identifying_url),
+      context_type_(context_type) {}
+
+SharedWorkerContextProviderFactory::~SharedWorkerContextProviderFactory() =
+    default;
+
+void SharedWorkerContextProviderFactory::Reset() {
+  provider_ = nullptr;
+}
+
+gpu::ContextResult SharedWorkerContextProviderFactory::Validate(
+    scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
+    gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager) {
+  if (CheckWorkerContextLost(provider_.get()))
+    provider_ = nullptr;
+
+  if (provider_)
+    return gpu::ContextResult::kSuccess;
+
+  // TODO(crbug.com/909568): refactor
+  // RenderThreadImpl::SharedCompositorWorkerContextProvider to use this.
+  const bool need_alpha_channel = false;
+  const bool support_locking = true;
+  const bool support_gles2_interface = features::IsUiGpuRasterizationEnabled();
+  const bool support_raster_interface = true;
+  const bool support_grcontext = features::IsUiGpuRasterizationEnabled();
+  provider_ = CreateContextProvider(
+      std::move(gpu_channel_host), gpu_memory_buffer_manager,
+      gpu::kNullSurfaceHandle, need_alpha_channel, false /* support_stencil */,
+      support_locking, support_gles2_interface, support_raster_interface,
+      support_grcontext, context_type_);
+  auto result = provider_->BindToCurrentThread();
+  if (result != gpu::ContextResult::kSuccess)
+    provider_ = nullptr;
+  return result;
+}
+
+scoped_refptr<viz::RasterContextProvider>
+SharedWorkerContextProviderFactory::CreateContextProvider(
+    scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
+    gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
+    gpu::SurfaceHandle surface_handle,
+    bool need_alpha_channel,
+    bool need_stencil_bits,
+    bool support_locking,
+    bool support_gles2_interface,
+    bool support_raster_interface,
+    bool support_grcontext,
+    ws::command_buffer_metrics::ContextType type) {
+  DCHECK(gpu_channel_host);
+
+  gpu::ContextCreationAttribs attributes;
+  attributes.alpha_size = need_alpha_channel ? 8 : -1;
+  attributes.depth_size = 0;
+  attributes.stencil_size = need_stencil_bits ? 8 : 0;
+  attributes.samples = 0;
+  attributes.sample_buffers = 0;
+  attributes.bind_generates_resource = false;
+  attributes.lose_context_when_out_of_memory = true;
+  attributes.buffer_preserved = false;
+  attributes.enable_gles2_interface = support_gles2_interface;
+  attributes.enable_raster_interface = support_raster_interface;
+
+  gpu::SharedMemoryLimits memory_limits =
+      gpu::SharedMemoryLimits::ForDisplayCompositor();
+
+  constexpr bool automatic_flushes = false;
+
+  return base::MakeRefCounted<ws::ContextProviderCommandBuffer>(
+      std::move(gpu_channel_host), gpu_memory_buffer_manager, stream_id_,
+      priority_, surface_handle, identifying_url_, automatic_flushes,
+      support_locking, support_grcontext, memory_limits, attributes, type);
+}
+
+}  // namespace ws
diff --git a/services/ws/public/cpp/gpu/shared_worker_context_provider_factory.h b/services/ws/public/cpp/gpu/shared_worker_context_provider_factory.h
new file mode 100644
index 0000000..d5139d20
--- /dev/null
+++ b/services/ws/public/cpp/gpu/shared_worker_context_provider_factory.h
@@ -0,0 +1,81 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SERVICES_WS_PUBLIC_CPP_GPU_SHARED_WORKER_CONTEXT_PROVIDER_FACTORY_H_
+#define SERVICES_WS_PUBLIC_CPP_GPU_SHARED_WORKER_CONTEXT_PROVIDER_FACTORY_H_
+
+#include <stdint.h>
+
+#include "base/macros.h"
+#include "base/memory/scoped_refptr.h"
+#include "gpu/ipc/common/surface_handle.h"
+#include "url/gurl.h"
+
+namespace gpu {
+class GpuChannelHost;
+class GpuMemoryBufferManager;
+
+enum class ContextResult;
+enum class SchedulingPriority;
+}  // namespace gpu
+
+namespace viz {
+class RasterContextProvider;
+}
+
+namespace ws {
+
+namespace command_buffer_metrics {
+enum class ContextType;
+}
+
+// SharedWorkerContextProviderFactory is responsible for creation, and owning
+// viz::RasterContextProvider.
+class SharedWorkerContextProviderFactory {
+ public:
+  SharedWorkerContextProviderFactory(
+      int32_t stream_id,
+      gpu::SchedulingPriority priority,
+      const GURL& identifying_url,
+      ws::command_buffer_metrics::ContextType context_type);
+  ~SharedWorkerContextProviderFactory();
+
+  // Drops the reference to |provider_|. This ensures the next time Validate()
+  // is called a new RasterContextProvider is created.
+  void Reset();
+
+  // Validates |provider_|, and if necessary attempts to recreate. Returns
+  // creation status. Use provider() to access the created
+  // RasterContextProvider.
+  gpu::ContextResult Validate(
+      scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
+      gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager);
+
+  scoped_refptr<viz::RasterContextProvider> provider() { return provider_; }
+
+ private:
+  scoped_refptr<viz::RasterContextProvider> CreateContextProvider(
+      scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
+      gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
+      gpu::SurfaceHandle surface_handle,
+      bool need_alpha_channel,
+      bool need_stencil_bits,
+      bool support_locking,
+      bool support_gles2_interface,
+      bool support_raster_interface,
+      bool support_grcontext,
+      ws::command_buffer_metrics::ContextType type);
+
+  const int32_t stream_id_;
+  const gpu::SchedulingPriority priority_;
+  const GURL identifying_url_;
+  const ws::command_buffer_metrics::ContextType context_type_;
+  scoped_refptr<viz::RasterContextProvider> provider_;
+
+  DISALLOW_COPY_AND_ASSIGN(SharedWorkerContextProviderFactory);
+};
+
+}  // namespace ws
+
+#endif  // SERVICES_WS_PUBLIC_CPP_GPU_SHARED_WORKER_CONTEXT_PROVIDER_FACTORY_H_
diff --git a/third_party/blink/public/platform/modules/indexeddb/web_idb_key.h b/third_party/blink/public/platform/modules/indexeddb/web_idb_key.h
index 7255f7d..afd0270 100644
--- a/third_party/blink/public/platform/modules/indexeddb/web_idb_key.h
+++ b/third_party/blink/public/platform/modules/indexeddb/web_idb_key.h
@@ -161,9 +161,7 @@
   WebIDBKey& operator=(std::unique_ptr<IDBKey>) noexcept;
   operator IDBKey*() const noexcept { return private_.get(); }
 
-  std::unique_ptr<IDBKey> ReleaseIdbKey() noexcept {
-    return std::move(private_);
-  }
+  std::unique_ptr<IDBKey> ReleaseIdbKey() noexcept;
 #endif  // INSIDE_BLINK
 
  private:
diff --git a/third_party/blink/renderer/DEPS b/third_party/blink/renderer/DEPS
index 35830ed..2515e2d 100644
--- a/third_party/blink/renderer/DEPS
+++ b/third_party/blink/renderer/DEPS
@@ -35,6 +35,7 @@
     "+base/time/time.h",
     "+base/timer/elapsed_timer.h",
     "+build",
+    "+services/network/public/mojom",
     "+services/service_manager/public/cpp/connector.h",
     "+services/service_manager/public/cpp/interface_provider.h",
     "+testing/gmock/include/gmock",
diff --git a/third_party/blink/renderer/bindings/DEPS b/third_party/blink/renderer/bindings/DEPS
index 8d67591..d06b67f 100644
--- a/third_party/blink/renderer/bindings/DEPS
+++ b/third_party/blink/renderer/bindings/DEPS
@@ -2,7 +2,6 @@
     "+base/memory/scoped_refptr.h",
     "+base/process/process_metrics.h",
     "+gin/public",
-    "+services/network/public/mojom/fetch_api.mojom-blink.h",
     "+third_party/blink/renderer/bindings",
     "+third_party/blink/renderer/core",
     "+third_party/blink/renderer/modules",
diff --git a/third_party/blink/renderer/bindings/core/v8/referrer_script_info.cc b/third_party/blink/renderer/bindings/core/v8/referrer_script_info.cc
index 4768bf10..ecc6988e 100644
--- a/third_party/blink/renderer/bindings/core/v8/referrer_script_info.cc
+++ b/third_party/blink/renderer/bindings/core/v8/referrer_script_info.cc
@@ -54,8 +54,9 @@
 
   v8::Local<v8::Primitive> referrer_policy_value =
       host_defined_options->Get(isolate, kReferrerPolicy);
-  ReferrerPolicy referrer_policy = static_cast<ReferrerPolicy>(
-      referrer_policy_value->IntegerValue(context).ToChecked());
+  network::mojom::ReferrerPolicy referrer_policy =
+      static_cast<network::mojom::ReferrerPolicy>(
+          referrer_policy_value->IntegerValue(context).ToChecked());
 
   return ReferrerScriptInfo(base_url, credentials_mode, nonce, parser_state,
                             referrer_policy);
diff --git a/third_party/blink/renderer/bindings/core/v8/referrer_script_info.h b/third_party/blink/renderer/bindings/core/v8/referrer_script_info.h
index a97f21d..93e544b 100644
--- a/third_party/blink/renderer/bindings/core/v8/referrer_script_info.h
+++ b/third_party/blink/renderer/bindings/core/v8/referrer_script_info.h
@@ -6,9 +6,9 @@
 #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_REFERRER_SCRIPT_INFO_H_
 
 #include "services/network/public/mojom/fetch_api.mojom-blink.h"
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/loader/fetch/script_fetch_options.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/wtf/text/text_position.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 #include "v8/include/v8.h"
@@ -25,7 +25,7 @@
                      network::mojom::FetchCredentialsMode credentials_mode,
                      const String& nonce,
                      ParserDisposition parser_state,
-                     ReferrerPolicy referrer_policy)
+                     network::mojom::ReferrerPolicy referrer_policy)
       : base_url_(base_url),
         credentials_mode_(credentials_mode),
         nonce_(nonce),
@@ -49,7 +49,9 @@
   }
   const String& Nonce() const { return nonce_; }
   ParserDisposition ParserState() const { return parser_state_; }
-  ReferrerPolicy GetReferrerPolicy() const { return referrer_policy_; }
+  network::mojom::ReferrerPolicy GetReferrerPolicy() const {
+    return referrer_policy_;
+  }
 
   bool IsDefaultValue() const {
     return base_url_.IsNull() &&
@@ -84,7 +86,8 @@
   // Spec: "referencing script's referrer policy"
   // The default value is "the empty string" per:
   // https://html.spec.whatwg.org/multipage/webappapis.html#default-classic-script-fetch-options
-  const ReferrerPolicy referrer_policy_ = kReferrerPolicyDefault;
+  const network::mojom::ReferrerPolicy referrer_policy_ =
+      network::mojom::ReferrerPolicy::kDefault;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/bindings/core/v8/referrer_script_info_test.cc b/third_party/blink/renderer/bindings/core/v8/referrer_script_info_test.cc
index 16efb50..76279d4 100644
--- a/third_party/blink/renderer/bindings/core/v8/referrer_script_info_test.cc
+++ b/third_party/blink/renderer/bindings/core/v8/referrer_script_info_test.cc
@@ -12,11 +12,11 @@
 
 TEST(ReferrerScriptInfo, IsDefaultValue) {
   EXPECT_TRUE(ReferrerScriptInfo().IsDefaultValue());
-  EXPECT_FALSE(
-      ReferrerScriptInfo(KURL("http://example.com"),
-                         network::mojom::FetchCredentialsMode::kInclude, "",
-                         kNotParserInserted, kReferrerPolicyDefault)
-          .IsDefaultValue());
+  EXPECT_FALSE(ReferrerScriptInfo(
+                   KURL("http://example.com"),
+                   network::mojom::FetchCredentialsMode::kInclude, "",
+                   kNotParserInserted, network::mojom::ReferrerPolicy::kDefault)
+                   .IsDefaultValue());
 }
 
 TEST(ReferrerScriptInfo, ToFromV8) {
@@ -28,7 +28,8 @@
                   .IsEmpty());
 
   ReferrerScriptInfo info(url, network::mojom::FetchCredentialsMode::kInclude,
-                          "foobar", kNotParserInserted, kReferrerPolicyOrigin);
+                          "foobar", kNotParserInserted,
+                          network::mojom::ReferrerPolicy::kOrigin);
   v8::Local<v8::PrimitiveArray> v8_info =
       info.ToV8HostDefinedOptions(scope.GetIsolate());
 
@@ -39,7 +40,8 @@
             decoded.CredentialsMode());
   EXPECT_EQ("foobar", decoded.Nonce());
   EXPECT_EQ(kNotParserInserted, decoded.ParserState());
-  EXPECT_EQ(kReferrerPolicyOrigin, decoded.GetReferrerPolicy());
+  EXPECT_EQ(network::mojom::ReferrerPolicy::kOrigin,
+            decoded.GetReferrerPolicy());
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/bindings/scripts/generate_v8_context_snapshot_external_references.py b/third_party/blink/renderer/bindings/scripts/generate_v8_context_snapshot_external_references.py
index b029ad3..487db25 100644
--- a/third_party/blink/renderer/bindings/scripts/generate_v8_context_snapshot_external_references.py
+++ b/third_party/blink/renderer/bindings/scripts/generate_v8_context_snapshot_external_references.py
@@ -66,9 +66,11 @@
         self._opts = opts
         self._info_provider = info_provider
 
-    def create_interface_context(self, interface, interfaces):
+    def create_interface_context(self, interface, component, interfaces):
         '''Creates a Jinja context which is based on an interface.'''
 
+        assert component in ['core', 'modules']
+
         name = '%s%s' % (v8_utilities.cpp_name(interface), 'Partial' if interface.is_partial else '')
 
         # Constructors
@@ -117,6 +119,7 @@
 
         return {
             'attributes': attributes,
+            'exported': '%s_EXPORT ' % component.upper(),
             'has_origin_safe_method_setter': has_origin_safe_method_setter,
             'has_constructor_callback': has_constructor_callback,
             'has_cross_origin_named_getter': has_cross_origin_named_getter,
@@ -127,6 +130,7 @@
             'indexed_property_getter': indexed_property_getter,
             'indexed_property_setter': v8_interface.property_setter(interface.indexed_property_setter, interface),
             'indexed_property_deleter': v8_interface.property_deleter(interface.indexed_property_deleter),
+            'internal_namespace': v8_interface.internal_namespace(interface),
             'is_array_buffer_or_view': interface.idl_type.is_array_buffer_or_view,
             'is_callback': interface.is_callback,
             'is_partial': interface.is_partial,
@@ -180,9 +184,14 @@
             return
 
         context_builder = InterfaceTemplateContextBuilder(self._opts, self._info_provider)
-        context = context_builder.create_interface_context(interface, interfaces)
+        context = context_builder.create_interface_context(interface, component, interfaces)
         name = '%s%s' % (interface.name, 'Partial' if interface.is_partial else '')
         self._interface_contexts[name] = context
+
+        # Do not include unnecessary header files.
+        if not context['attributes'] and not context['named_property_setter']:
+            return
+
         include_file = 'third_party/blink/renderer/bindings/%s/v8/%s.h' % (
             component, utilities.to_snake_case(context['v8_name']))
         self._include_files.add(include_file)
diff --git a/third_party/blink/renderer/bindings/templates/external_reference_table.cc.tmpl b/third_party/blink/renderer/bindings/templates/external_reference_table.cc.tmpl
index 5673d42..a6ab16e 100644
--- a/third_party/blink/renderer/bindings/templates/external_reference_table.cc.tmpl
+++ b/third_party/blink/renderer/bindings/templates/external_reference_table.cc.tmpl
@@ -12,6 +12,17 @@
 
 namespace blink {
 
+{# We use forward declaration instead of include for faster compile time here. #}
+{% for interface in interfaces %}
+{% if interface.has_constructor_callback %}
+
+namespace {{interface.internal_namespace}} {
+{{interface.exported}}void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
+}  // namespace {{interface.internal_namespace}}
+
+{% endif %}
+{% endfor %}
+
 const intptr_t* {{class}}::GetTable() {
   static const intptr_t reference_table[] = {
 #if defined(USE_V8_CONTEXT_SNAPSHOT)
@@ -73,7 +84,7 @@
     {%  endif %}
     {# Other properties #}
     {%  if interface.has_constructor_callback %}
-    reinterpret_cast<intptr_t>({{v8_class}}::ConstructorCallback),
+    reinterpret_cast<intptr_t>({{interface.internal_namespace}}::ConstructorCallback),
     {%  endif %}
     {%  if interface.named_property_getter %}
     reinterpret_cast<intptr_t>({{v8_class}}::NamedPropertyGetterCallback),
diff --git a/third_party/blink/renderer/bindings/templates/interface.cc.tmpl b/third_party/blink/renderer/bindings/templates/interface.cc.tmpl
index cd051e0..2c4ad47 100644
--- a/third_party/blink/renderer/bindings/templates/interface.cc.tmpl
+++ b/third_party/blink/renderer/bindings/templates/interface.cc.tmpl
@@ -837,7 +837,7 @@
 {##############################################################################}
 {% block constructor_callback %}
 {% if constructors or has_custom_constructor or has_html_constructor %}
-void {{v8_class}}::ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+{{exported}}void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
   {{ runtime_timer_scope_disabled_by_default(runtime_call_stats.constructor_counter) }}
   {% if measure_as %}
   UseCounter::Count(CurrentExecutionContext(info.GetIsolate()), WebFeature::k{{measure_as('Constructor')}});
diff --git a/third_party/blink/renderer/bindings/templates/interface.h.tmpl b/third_party/blink/renderer/bindings/templates/interface.h.tmpl
index 4b0935a..884a85d 100644
--- a/third_party/blink/renderer/bindings/templates/interface.h.tmpl
+++ b/third_party/blink/renderer/bindings/templates/interface.h.tmpl
@@ -153,10 +153,6 @@
   {% endfor %}
 
   // Callback functions
-  {% if constructors or has_custom_constructor or has_html_constructor %}
-  {{exported}}static void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
-
-  {% endif %}
   {% for constant in constants | has_special_getter %}
   {{exported}}static void {{constant.camel_case_name}}ConstantGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&);
   {% endfor %}
diff --git a/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl b/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl
index d38de8387..ded9e35 100644
--- a/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl
+++ b/third_party/blink/renderer/bindings/templates/interface_base.cc.tmpl
@@ -132,6 +132,7 @@
 {{generate_constructor(constructor)}}
 {% endfor %}
 {% block overloaded_constructor %}{% endblock %}
+{% block constructor_callback %}{% endblock %}
 {# Special operations (methods) #}
 {% block named_property_getter %}{% endblock %}
 {% block named_property_setter %}{% endblock %}
@@ -396,7 +397,6 @@
 {% endif %}{# not is_array_buffer_or_view #}
 {##############################################################################}
 {% block named_constructor %}{% endblock %}
-{% block constructor_callback %}{% endblock %}
 {##############################################################################}
 {% block install_dom_template %}
 {% if not is_array_buffer_or_view %}
@@ -430,7 +430,7 @@
          'v8::Local<v8::FunctionTemplate>()' %}
   V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interfaceTemplate, {{v8_class}}::wrapperTypeInfo.interface_name, {{parent_interface_template}}, {{v8_class}}::internalFieldCount);
   {% if constructors or has_custom_constructor or has_html_constructor %}
-  interfaceTemplate->SetCallHandler({{v8_class}}::ConstructorCallback);
+  interfaceTemplate->SetCallHandler({{internal_namespace}}::ConstructorCallback);
   interfaceTemplate->SetLength({{interface_length}});
   {% endif %}
   {% endif %}{# is_partial #}
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_2.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_2.cc
index 7b6231d..ce840042 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_2.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_2.cc
@@ -341,6 +341,22 @@
   V8SetReturnValue(info, wrapper);
 }
 
+CORE_EXPORT void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterface2_Constructor");
+
+  if (!info.IsConstructCall()) {
+    V8ThrowException::ThrowTypeError(info.GetIsolate(), ExceptionMessages::ConstructorNotCallableAsFunction("TestInterface2"));
+    return;
+  }
+
+  if (ConstructorMode::Current(info.GetIsolate()) == ConstructorMode::kWrapExistingObject) {
+    V8SetReturnValue(info, info.Holder());
+    return;
+  }
+
+  test_interface_2_v8_internal::Constructor(info);
+}
+
 static void NamedPropertyGetter(const AtomicString& name, const v8::PropertyCallbackInfo<v8::Value>& info) {
   const CString& nameInUtf8 = name.Utf8();
   ExceptionState exceptionState(info.GetIsolate(), ExceptionState::kGetterContext, "TestInterface2", nameInUtf8.data());
@@ -672,29 +688,13 @@
     {"toString", V8TestInterface2::ToStringMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds},
 };
 
-void V8TestInterface2::ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
-  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterface2_Constructor");
-
-  if (!info.IsConstructCall()) {
-    V8ThrowException::ThrowTypeError(info.GetIsolate(), ExceptionMessages::ConstructorNotCallableAsFunction("TestInterface2"));
-    return;
-  }
-
-  if (ConstructorMode::Current(info.GetIsolate()) == ConstructorMode::kWrapExistingObject) {
-    V8SetReturnValue(info, info.Holder());
-    return;
-  }
-
-  test_interface_2_v8_internal::Constructor(info);
-}
-
 void V8TestInterface2::InstallV8TestInterface2Template(
     v8::Isolate* isolate,
     const DOMWrapperWorld& world,
     v8::Local<v8::FunctionTemplate> interfaceTemplate) {
   // Initialize the interface object's template.
   V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interfaceTemplate, V8TestInterface2::wrapperTypeInfo.interface_name, v8::Local<v8::FunctionTemplate>(), V8TestInterface2::internalFieldCount);
-  interfaceTemplate->SetCallHandler(V8TestInterface2::ConstructorCallback);
+  interfaceTemplate->SetCallHandler(test_interface_2_v8_internal::ConstructorCallback);
   interfaceTemplate->SetLength(0);
 
   v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_2.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_2.h
index 910bed7..49a19e8 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_2.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_2.h
@@ -53,7 +53,6 @@
   CORE_EXPORT static void InstallV8TestInterface2Template(v8::Isolate*, const DOMWrapperWorld&, v8::Local<v8::FunctionTemplate> interfaceTemplate);
 
   // Callback functions
-  CORE_EXPORT static void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
   CORE_EXPORT static void SizeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor.cc
index 8e34d64bf..5fb280a 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor.cc
@@ -339,6 +339,23 @@
   exceptionState.ThrowTypeError("No matching constructor signature.");
 }
 
+CORE_EXPORT void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceConstructor_Constructor");
+
+  UseCounter::Count(CurrentExecutionContext(info.GetIsolate()), WebFeature::kTestFeature);
+  if (!info.IsConstructCall()) {
+    V8ThrowException::ThrowTypeError(info.GetIsolate(), ExceptionMessages::ConstructorNotCallableAsFunction("TestInterfaceConstructor"));
+    return;
+  }
+
+  if (ConstructorMode::Current(info.GetIsolate()) == ConstructorMode::kWrapExistingObject) {
+    V8SetReturnValue(info, info.Holder());
+    return;
+  }
+
+  test_interface_constructor_v8_internal::Constructor(info);
+}
+
 }  // namespace test_interface_constructor_v8_internal
 
 // Suppress warning: global constructors, because struct WrapperTypeInfo is trivial
@@ -471,30 +488,13 @@
   V8SetReturnValue(info, namedConstructor);
 }
 
-void V8TestInterfaceConstructor::ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
-  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceConstructor_Constructor");
-
-  UseCounter::Count(CurrentExecutionContext(info.GetIsolate()), WebFeature::kTestFeature);
-  if (!info.IsConstructCall()) {
-    V8ThrowException::ThrowTypeError(info.GetIsolate(), ExceptionMessages::ConstructorNotCallableAsFunction("TestInterfaceConstructor"));
-    return;
-  }
-
-  if (ConstructorMode::Current(info.GetIsolate()) == ConstructorMode::kWrapExistingObject) {
-    V8SetReturnValue(info, info.Holder());
-    return;
-  }
-
-  test_interface_constructor_v8_internal::Constructor(info);
-}
-
 static void InstallV8TestInterfaceConstructorTemplate(
     v8::Isolate* isolate,
     const DOMWrapperWorld& world,
     v8::Local<v8::FunctionTemplate> interfaceTemplate) {
   // Initialize the interface object's template.
   V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interfaceTemplate, V8TestInterfaceConstructor::wrapperTypeInfo.interface_name, v8::Local<v8::FunctionTemplate>(), V8TestInterfaceConstructor::internalFieldCount);
-  interfaceTemplate->SetCallHandler(V8TestInterfaceConstructor::ConstructorCallback);
+  interfaceTemplate->SetCallHandler(test_interface_constructor_v8_internal::ConstructorCallback);
   interfaceTemplate->SetLength(0);
 
   v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor.h
index 9c5f2b3..708f269 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor.h
@@ -47,7 +47,6 @@
   static const int internalFieldCount = kV8DefaultWrapperInternalFieldCount;
 
   // Callback functions
-  CORE_EXPORT static void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
   static void InstallRuntimeEnabledFeaturesOnTemplate(
       v8::Isolate*,
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_2.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_2.cc
index 5d41027..8f398894 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_2.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_2.cc
@@ -240,9 +240,7 @@
   exceptionState.ThrowTypeError("No matching constructor signature.");
 }
 
-}  // namespace test_interface_constructor_2_v8_internal
-
-void V8TestInterfaceConstructor2::ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+CORE_EXPORT void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
   RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceConstructor2_Constructor");
 
   if (!info.IsConstructCall()) {
@@ -258,13 +256,15 @@
   test_interface_constructor_2_v8_internal::Constructor(info);
 }
 
+}  // namespace test_interface_constructor_2_v8_internal
+
 static void InstallV8TestInterfaceConstructor2Template(
     v8::Isolate* isolate,
     const DOMWrapperWorld& world,
     v8::Local<v8::FunctionTemplate> interfaceTemplate) {
   // Initialize the interface object's template.
   V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interfaceTemplate, V8TestInterfaceConstructor2::wrapperTypeInfo.interface_name, v8::Local<v8::FunctionTemplate>(), V8TestInterfaceConstructor2::internalFieldCount);
-  interfaceTemplate->SetCallHandler(V8TestInterfaceConstructor2::ConstructorCallback);
+  interfaceTemplate->SetCallHandler(test_interface_constructor_2_v8_internal::ConstructorCallback);
   interfaceTemplate->SetLength(1);
 
   v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_2.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_2.h
index 25c93f4..b0cba24 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_2.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_2.h
@@ -38,7 +38,6 @@
   static const int internalFieldCount = kV8DefaultWrapperInternalFieldCount;
 
   // Callback functions
-  CORE_EXPORT static void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
   static void InstallRuntimeEnabledFeaturesOnTemplate(
       v8::Isolate*,
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_3.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_3.cc
index 1a435c8..89f20d1 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_3.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_3.cc
@@ -82,9 +82,7 @@
   V8SetReturnValue(info, wrapper);
 }
 
-}  // namespace test_interface_constructor_3_v8_internal
-
-void V8TestInterfaceConstructor3::ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+CORE_EXPORT void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
   RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceConstructor3_Constructor");
 
   if (!info.IsConstructCall()) {
@@ -100,13 +98,15 @@
   test_interface_constructor_3_v8_internal::Constructor(info);
 }
 
+}  // namespace test_interface_constructor_3_v8_internal
+
 static void InstallV8TestInterfaceConstructor3Template(
     v8::Isolate* isolate,
     const DOMWrapperWorld& world,
     v8::Local<v8::FunctionTemplate> interfaceTemplate) {
   // Initialize the interface object's template.
   V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interfaceTemplate, V8TestInterfaceConstructor3::wrapperTypeInfo.interface_name, v8::Local<v8::FunctionTemplate>(), V8TestInterfaceConstructor3::internalFieldCount);
-  interfaceTemplate->SetCallHandler(V8TestInterfaceConstructor3::ConstructorCallback);
+  interfaceTemplate->SetCallHandler(test_interface_constructor_3_v8_internal::ConstructorCallback);
   interfaceTemplate->SetLength(1);
 
   v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_3.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_3.h
index d54da8d..8c2b1df 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_3.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_3.h
@@ -38,7 +38,6 @@
   static const int internalFieldCount = kV8DefaultWrapperInternalFieldCount;
 
   // Callback functions
-  CORE_EXPORT static void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
   static void InstallRuntimeEnabledFeaturesOnTemplate(
       v8::Isolate*,
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_4.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_4.cc
index d7c33279..ef476236 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_4.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_4.cc
@@ -116,9 +116,7 @@
   exceptionState.ThrowTypeError("No matching constructor signature.");
 }
 
-}  // namespace test_interface_constructor_4_v8_internal
-
-void V8TestInterfaceConstructor4::ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+CORE_EXPORT void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
   RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceConstructor4_Constructor");
 
   if (!info.IsConstructCall()) {
@@ -134,13 +132,15 @@
   test_interface_constructor_4_v8_internal::Constructor(info);
 }
 
+}  // namespace test_interface_constructor_4_v8_internal
+
 static void InstallV8TestInterfaceConstructor4Template(
     v8::Isolate* isolate,
     const DOMWrapperWorld& world,
     v8::Local<v8::FunctionTemplate> interfaceTemplate) {
   // Initialize the interface object's template.
   V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interfaceTemplate, V8TestInterfaceConstructor4::wrapperTypeInfo.interface_name, v8::Local<v8::FunctionTemplate>(), V8TestInterfaceConstructor4::internalFieldCount);
-  interfaceTemplate->SetCallHandler(V8TestInterfaceConstructor4::ConstructorCallback);
+  interfaceTemplate->SetCallHandler(test_interface_constructor_4_v8_internal::ConstructorCallback);
   interfaceTemplate->SetLength(1);
 
   v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_4.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_4.h
index 32973bd..3ed8f75 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_4.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_constructor_4.h
@@ -38,7 +38,6 @@
   static const int internalFieldCount = kV8DefaultWrapperInternalFieldCount;
 
   // Callback functions
-  CORE_EXPORT static void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
   static void InstallRuntimeEnabledFeaturesOnTemplate(
       v8::Isolate*,
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_custom_constructor.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_custom_constructor.cc
index 5cc7f57..3026aee 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_custom_constructor.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_custom_constructor.cc
@@ -61,9 +61,7 @@
 
 namespace test_interface_custom_constructor_v8_internal {
 
-}  // namespace test_interface_custom_constructor_v8_internal
-
-void V8TestInterfaceCustomConstructor::ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+CORE_EXPORT void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
   RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceCustomConstructor_Constructor");
 
   if (!info.IsConstructCall()) {
@@ -79,13 +77,15 @@
   V8TestInterfaceCustomConstructor::ConstructorCustom(info);
 }
 
+}  // namespace test_interface_custom_constructor_v8_internal
+
 static void InstallV8TestInterfaceCustomConstructorTemplate(
     v8::Isolate* isolate,
     const DOMWrapperWorld& world,
     v8::Local<v8::FunctionTemplate> interfaceTemplate) {
   // Initialize the interface object's template.
   V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interfaceTemplate, V8TestInterfaceCustomConstructor::wrapperTypeInfo.interface_name, v8::Local<v8::FunctionTemplate>(), V8TestInterfaceCustomConstructor::internalFieldCount);
-  interfaceTemplate->SetCallHandler(V8TestInterfaceCustomConstructor::ConstructorCallback);
+  interfaceTemplate->SetCallHandler(test_interface_custom_constructor_v8_internal::ConstructorCallback);
   interfaceTemplate->SetLength(0);
 
   v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_custom_constructor.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_custom_constructor.h
index be28986b..05952a1 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_custom_constructor.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_custom_constructor.h
@@ -39,7 +39,6 @@
   static const int internalFieldCount = kV8DefaultWrapperInternalFieldCount;
 
   // Callback functions
-  CORE_EXPORT static void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
   static void InstallRuntimeEnabledFeaturesOnTemplate(
       v8::Isolate*,
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_event_init_constructor.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_event_init_constructor.cc
index ed68980..2d209035 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_event_init_constructor.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_event_init_constructor.cc
@@ -111,6 +111,22 @@
   V8SetReturnValue(info, wrapper);
 }
 
+CORE_EXPORT void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceEventInitConstructor_Constructor");
+
+  if (!info.IsConstructCall()) {
+    V8ThrowException::ThrowTypeError(info.GetIsolate(), ExceptionMessages::ConstructorNotCallableAsFunction("TestInterfaceEventInitConstructor"));
+    return;
+  }
+
+  if (ConstructorMode::Current(info.GetIsolate()) == ConstructorMode::kWrapExistingObject) {
+    V8SetReturnValue(info, info.Holder());
+    return;
+  }
+
+  test_interface_event_init_constructor_v8_internal::Constructor(info);
+}
+
 }  // namespace test_interface_event_init_constructor_v8_internal
 
 void V8TestInterfaceEventInitConstructor::ReadonlyStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
@@ -130,29 +146,13 @@
     { "isTrusted", V8TestInterfaceEventInitConstructor::IsTrustedAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete | v8::ReadOnly), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds },
 };
 
-void V8TestInterfaceEventInitConstructor::ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
-  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestInterfaceEventInitConstructor_Constructor");
-
-  if (!info.IsConstructCall()) {
-    V8ThrowException::ThrowTypeError(info.GetIsolate(), ExceptionMessages::ConstructorNotCallableAsFunction("TestInterfaceEventInitConstructor"));
-    return;
-  }
-
-  if (ConstructorMode::Current(info.GetIsolate()) == ConstructorMode::kWrapExistingObject) {
-    V8SetReturnValue(info, info.Holder());
-    return;
-  }
-
-  test_interface_event_init_constructor_v8_internal::Constructor(info);
-}
-
 static void InstallV8TestInterfaceEventInitConstructorTemplate(
     v8::Isolate* isolate,
     const DOMWrapperWorld& world,
     v8::Local<v8::FunctionTemplate> interfaceTemplate) {
   // Initialize the interface object's template.
   V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interfaceTemplate, V8TestInterfaceEventInitConstructor::wrapperTypeInfo.interface_name, V8Event::DomTemplate(isolate, world), V8TestInterfaceEventInitConstructor::internalFieldCount);
-  interfaceTemplate->SetCallHandler(V8TestInterfaceEventInitConstructor::ConstructorCallback);
+  interfaceTemplate->SetCallHandler(test_interface_event_init_constructor_v8_internal::ConstructorCallback);
   interfaceTemplate->SetLength(2);
 
   v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_event_init_constructor.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_event_init_constructor.h
index d8c4401..f1cdc1c 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_event_init_constructor.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_event_init_constructor.h
@@ -39,7 +39,6 @@
   static const int internalFieldCount = kV8DefaultWrapperInternalFieldCount;
 
   // Callback functions
-  CORE_EXPORT static void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
   CORE_EXPORT static void ReadonlyStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void IsTrustedAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_node.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_node.cc
index 7840bdf..782d92c0 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_node.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_node.cc
@@ -179,6 +179,22 @@
   V8SetReturnValue(info, wrapper);
 }
 
+CORE_EXPORT void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestNode_Constructor");
+
+  if (!info.IsConstructCall()) {
+    V8ThrowException::ThrowTypeError(info.GetIsolate(), ExceptionMessages::ConstructorNotCallableAsFunction("TestNode"));
+    return;
+  }
+
+  if (ConstructorMode::Current(info.GetIsolate()) == ConstructorMode::kWrapExistingObject) {
+    V8SetReturnValue(info, info.Holder());
+    return;
+  }
+
+  test_node_v8_internal::Constructor(info);
+}
+
 }  // namespace test_node_v8_internal
 
 void V8TestNode::HrefAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
@@ -244,29 +260,13 @@
     { "hrefByteString", V8TestNode::HrefByteStringAttributeGetterCallback, V8TestNode::HrefByteStringAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds },
 };
 
-void V8TestNode::ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
-  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestNode_Constructor");
-
-  if (!info.IsConstructCall()) {
-    V8ThrowException::ThrowTypeError(info.GetIsolate(), ExceptionMessages::ConstructorNotCallableAsFunction("TestNode"));
-    return;
-  }
-
-  if (ConstructorMode::Current(info.GetIsolate()) == ConstructorMode::kWrapExistingObject) {
-    V8SetReturnValue(info, info.Holder());
-    return;
-  }
-
-  test_node_v8_internal::Constructor(info);
-}
-
 static void InstallV8TestNodeTemplate(
     v8::Isolate* isolate,
     const DOMWrapperWorld& world,
     v8::Local<v8::FunctionTemplate> interfaceTemplate) {
   // Initialize the interface object's template.
   V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interfaceTemplate, V8TestNode::wrapperTypeInfo.interface_name, V8Node::DomTemplate(isolate, world), V8TestNode::internalFieldCount);
-  interfaceTemplate->SetCallHandler(V8TestNode::ConstructorCallback);
+  interfaceTemplate->SetCallHandler(test_node_v8_internal::ConstructorCallback);
   interfaceTemplate->SetLength(0);
 
   v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_node.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_node.h
index 239bd76..66e788d 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_node.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_node.h
@@ -39,7 +39,6 @@
   static const int internalFieldCount = kV8DefaultWrapperInternalFieldCount;
 
   // Callback functions
-  CORE_EXPORT static void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
   CORE_EXPORT static void HrefAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void HrefAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_typedefs.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_typedefs.cc
index 12de506..08ea767 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_typedefs.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_typedefs.cc
@@ -399,6 +399,22 @@
   V8SetReturnValue(info, wrapper);
 }
 
+CORE_EXPORT void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestTypedefs_Constructor");
+
+  if (!info.IsConstructCall()) {
+    V8ThrowException::ThrowTypeError(info.GetIsolate(), ExceptionMessages::ConstructorNotCallableAsFunction("TestTypedefs"));
+    return;
+  }
+
+  if (ConstructorMode::Current(info.GetIsolate()) == ConstructorMode::kWrapExistingObject) {
+    V8SetReturnValue(info, info.Holder());
+    return;
+  }
+
+  test_typedefs_v8_internal::Constructor(info);
+}
+
 }  // namespace test_typedefs_v8_internal
 
 void V8TestTypedefs::ULongLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
@@ -562,29 +578,13 @@
     {"voidMethodUnionWithTypedef", V8TestTypedefs::VoidMethodUnionWithTypedefMethodCallback, 1, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds},
 };
 
-void V8TestTypedefs::ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
-  RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestTypedefs_Constructor");
-
-  if (!info.IsConstructCall()) {
-    V8ThrowException::ThrowTypeError(info.GetIsolate(), ExceptionMessages::ConstructorNotCallableAsFunction("TestTypedefs"));
-    return;
-  }
-
-  if (ConstructorMode::Current(info.GetIsolate()) == ConstructorMode::kWrapExistingObject) {
-    V8SetReturnValue(info, info.Holder());
-    return;
-  }
-
-  test_typedefs_v8_internal::Constructor(info);
-}
-
 static void InstallV8TestTypedefsTemplate(
     v8::Isolate* isolate,
     const DOMWrapperWorld& world,
     v8::Local<v8::FunctionTemplate> interfaceTemplate) {
   // Initialize the interface object's template.
   V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interfaceTemplate, V8TestTypedefs::wrapperTypeInfo.interface_name, v8::Local<v8::FunctionTemplate>(), V8TestTypedefs::internalFieldCount);
-  interfaceTemplate->SetCallHandler(V8TestTypedefs::ConstructorCallback);
+  interfaceTemplate->SetCallHandler(test_typedefs_v8_internal::ConstructorCallback);
   interfaceTemplate->SetLength(1);
 
   v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_typedefs.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_typedefs.h
index 98e8357..ffa0c96 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_typedefs.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_typedefs.h
@@ -43,7 +43,6 @@
   static const int internalFieldCount = kV8DefaultWrapperInternalFieldCount;
 
   // Callback functions
-  CORE_EXPORT static void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
   CORE_EXPORT static void ULongLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
   CORE_EXPORT static void ULongLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>&);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_variadic_constructor_arguments.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_variadic_constructor_arguments.cc
index 3c2d2b4b..054d1532 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_variadic_constructor_arguments.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_variadic_constructor_arguments.cc
@@ -79,9 +79,7 @@
   V8SetReturnValue(info, wrapper);
 }
 
-}  // namespace test_variadic_constructor_arguments_v8_internal
-
-void V8TestVariadicConstructorArguments::ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+CORE_EXPORT void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
   RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestVariadicConstructorArguments_Constructor");
 
   if (!info.IsConstructCall()) {
@@ -97,13 +95,15 @@
   test_variadic_constructor_arguments_v8_internal::Constructor(info);
 }
 
+}  // namespace test_variadic_constructor_arguments_v8_internal
+
 static void InstallV8TestVariadicConstructorArgumentsTemplate(
     v8::Isolate* isolate,
     const DOMWrapperWorld& world,
     v8::Local<v8::FunctionTemplate> interfaceTemplate) {
   // Initialize the interface object's template.
   V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interfaceTemplate, V8TestVariadicConstructorArguments::wrapperTypeInfo.interface_name, v8::Local<v8::FunctionTemplate>(), V8TestVariadicConstructorArguments::internalFieldCount);
-  interfaceTemplate->SetCallHandler(V8TestVariadicConstructorArguments::ConstructorCallback);
+  interfaceTemplate->SetCallHandler(test_variadic_constructor_arguments_v8_internal::ConstructorCallback);
   interfaceTemplate->SetLength(0);
 
   v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_variadic_constructor_arguments.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_variadic_constructor_arguments.h
index cd368a00..bbaa13e1 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_variadic_constructor_arguments.h
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_variadic_constructor_arguments.h
@@ -38,7 +38,6 @@
   static const int internalFieldCount = kV8DefaultWrapperInternalFieldCount;
 
   // Callback functions
-  CORE_EXPORT static void ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
   static void InstallRuntimeEnabledFeaturesOnTemplate(
       v8::Isolate*,
diff --git a/third_party/blink/renderer/core/DEPS b/third_party/blink/renderer/core/DEPS
index 21541a9baa..a6c6801 100644
--- a/third_party/blink/renderer/core/DEPS
+++ b/third_party/blink/renderer/core/DEPS
@@ -38,7 +38,6 @@
     "+services/network/public/cpp/cors/cors_error_status.h",
     "+services/network/public/cpp/features.h",
     "+services/network/public/cpp/shared_url_loader_factory.h",
-    "+services/network/public/mojom",
     "+services/resource_coordinator/public/cpp/resource_coordinator_features.h",
     "+services/service_manager/public",
     "+services/ws/public/mojom/ime/ime.mojom-shared.h",
diff --git a/third_party/blink/renderer/core/css/invalidation/invalidation_set.cc b/third_party/blink/renderer/core/css/invalidation/invalidation_set.cc
index 1e115ca..c8192681 100644
--- a/third_party/blink/renderer/core/css/invalidation/invalidation_set.cc
+++ b/third_party/blink/renderer/core/css/invalidation/invalidation_set.cc
@@ -106,7 +106,7 @@
     }
   }
 
-  if (element.HasPartName() && invalidation_flags_.InvalidatesParts()) {
+  if (element.HasPart() && invalidation_flags_.InvalidatesParts()) {
     TRACE_STYLE_INVALIDATOR_INVALIDATION_SELECTORPART_IF_ENABLED(
         element, kInvalidationSetMatchedPart, *this, "");
     return true;
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_context.cc b/third_party/blink/renderer/core/css/parser/css_parser_context.cc
index c6e1dc48..fa214682 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_context.cc
+++ b/third_party/blink/renderer/core/css/parser/css_parser_context.cc
@@ -73,7 +73,7 @@
     const CSSParserContext* other,
     const KURL& base_url,
     bool is_opaque_response_from_service_worker,
-    ReferrerPolicy referrer_policy,
+    network::mojom::ReferrerPolicy referrer_policy,
     const WTF::TextEncoding& charset,
     const Document* use_counter_document) {
   return MakeGarbageCollected<CSSParserContext>(
@@ -112,7 +112,7 @@
     const Document& document,
     const KURL& base_url_override,
     bool is_opaque_response_from_service_worker,
-    ReferrerPolicy referrer_policy_override,
+    network::mojom::ReferrerPolicy referrer_policy_override,
     const WTF::TextEncoding& charset,
     SelectorProfile profile) {
   CSSParserMode mode =
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_context.h b/third_party/blink/renderer/core/css/parser/css_parser_context.h
index 31df30f..c14c66fd 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_context.h
+++ b/third_party/blink/renderer/core/css/parser/css_parser_context.h
@@ -42,12 +42,13 @@
   static CSSParserContext* Create(const CSSParserContext* other,
                                   const Document* use_counter_document);
 
-  static CSSParserContext* Create(const CSSParserContext* other,
-                                  const KURL& base_url_override,
-                                  bool is_opaque_response_from_service_worker,
-                                  ReferrerPolicy referrer_policy_override,
-                                  const WTF::TextEncoding& charset_override,
-                                  const Document* use_counter_document);
+  static CSSParserContext* Create(
+      const CSSParserContext* other,
+      const KURL& base_url_override,
+      bool is_opaque_response_from_service_worker,
+      network::mojom::ReferrerPolicy referrer_policy_override,
+      const WTF::TextEncoding& charset_override,
+      const Document* use_counter_document);
 
   static CSSParserContext* Create(
       CSSParserMode,
@@ -59,7 +60,7 @@
       const Document&,
       const KURL& base_url_override,
       bool is_opaque_response_from_service_worker,
-      ReferrerPolicy referrer_policy_override,
+      network::mojom::ReferrerPolicy referrer_policy_override,
       const WTF::TextEncoding& charset = WTF::TextEncoding(),
       SelectorProfile = kLiveProfile);
   // This is used for workers, where we don't have a document.
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 5660cdb6..b492c41 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -326,11 +326,11 @@
   if (!RuntimeEnabledFeatures::CSSPartPseudoElementEnabled())
     return;
 
-  const SpaceSplitString* part_names = element.PartNames();
-  if (!part_names)
+  DOMTokenList* part = element.GetPart();
+  if (!part)
     return;
 
-  PartNames current_names(*part_names);
+  PartNames current_names(part->TokenSet());
 
   // ::part selectors in the shadow host's scope and above can match this
   // element.
diff --git a/third_party/blink/renderer/core/css/selector_query_test.cc b/third_party/blink/renderer/core/css/selector_query_test.cc
index db7b911..b677facb 100644
--- a/third_party/blink/renderer/core/css/selector_query_test.cc
+++ b/third_party/blink/renderer/core/css/selector_query_test.cc
@@ -71,7 +71,7 @@
       CSSParserContext::Create(
           *document, NullURL(),
           false /* is_opaque_response_from_service_worker */,
-          kReferrerPolicyDefault, WTF::TextEncoding(),
+          network::mojom::ReferrerPolicy::kDefault, WTF::TextEncoding(),
           CSSParserContext::kSnapshotProfile),
       nullptr, "span::before");
   std::unique_ptr<SelectorQuery> query =
@@ -83,7 +83,7 @@
       CSSParserContext::Create(
           *document, NullURL(),
           false /* is_opaque_response_from_service_worker */,
-          kReferrerPolicyDefault, WTF::TextEncoding(),
+          network::mojom::ReferrerPolicy::kDefault, WTF::TextEncoding(),
           CSSParserContext::kSnapshotProfile),
       nullptr, "span");
   query = SelectorQuery::Adopt(std::move(selector_list));
@@ -104,7 +104,7 @@
       CSSParserContext::Create(
           *document, NullURL(),
           false /* is_opaque_response_from_service_worker */,
-          kReferrerPolicyDefault, WTF::TextEncoding(),
+          network::mojom::ReferrerPolicy::kDefault, WTF::TextEncoding(),
           CSSParserContext::kSnapshotProfile),
       nullptr, "p:last-of-type");
   std::unique_ptr<SelectorQuery> query =
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index 1e4b8e4..bd346f6 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -411,10 +411,10 @@
 
   // rules (a) and (f) above
   const uint32_t kNameStartMask =
-      WTF::Unicode::kLetter_Lowercase | WTF::Unicode::kLetter_Uppercase |
-      WTF::Unicode::kLetter_Other | WTF::Unicode::kLetter_Titlecase |
-      WTF::Unicode::kNumber_Letter;
-  if (!(WTF::Unicode::Category(c) & kNameStartMask))
+      WTF::unicode::kLetter_Lowercase | WTF::unicode::kLetter_Uppercase |
+      WTF::unicode::kLetter_Other | WTF::unicode::kLetter_Titlecase |
+      WTF::unicode::kNumber_Letter;
+  if (!(WTF::unicode::Category(c) & kNameStartMask))
     return false;
 
   // rule (c) above
@@ -422,10 +422,10 @@
     return false;
 
   // rule (d) above
-  WTF::Unicode::CharDecompositionType decomp_type =
-      WTF::Unicode::DecompositionType(c);
-  if (decomp_type == WTF::Unicode::kDecompositionFont ||
-      decomp_type == WTF::Unicode::kDecompositionCompat)
+  WTF::unicode::CharDecompositionType decomp_type =
+      WTF::unicode::DecompositionType(c);
+  if (decomp_type == WTF::unicode::kDecompositionFont ||
+      decomp_type == WTF::unicode::kDecompositionCompat)
     return false;
 
   return true;
@@ -446,10 +446,10 @@
 
   // rules (b) and (f) above
   const uint32_t kOtherNamePartMask =
-      WTF::Unicode::kMark_NonSpacing | WTF::Unicode::kMark_Enclosing |
-      WTF::Unicode::kMark_SpacingCombining | WTF::Unicode::kLetter_Modifier |
-      WTF::Unicode::kNumber_DecimalDigit;
-  if (!(WTF::Unicode::Category(c) & kOtherNamePartMask))
+      WTF::unicode::kMark_NonSpacing | WTF::unicode::kMark_Enclosing |
+      WTF::unicode::kMark_SpacingCombining | WTF::unicode::kLetter_Modifier |
+      WTF::unicode::kNumber_DecimalDigit;
+  if (!(WTF::unicode::Category(c) & kOtherNamePartMask))
     return false;
 
   // rule (c) above
@@ -457,10 +457,10 @@
     return false;
 
   // rule (d) above
-  WTF::Unicode::CharDecompositionType decomp_type =
-      WTF::Unicode::DecompositionType(c);
-  if (decomp_type == WTF::Unicode::kDecompositionFont ||
-      decomp_type == WTF::Unicode::kDecompositionCompat)
+  WTF::unicode::CharDecompositionType decomp_type =
+      WTF::unicode::DecompositionType(c);
+  if (decomp_type == WTF::unicode::kDecompositionFont ||
+      decomp_type == WTF::unicode::kDecompositionCompat)
     return false;
 
   return true;
@@ -1635,9 +1635,9 @@
   bool pending_whitespace = false;
   for (unsigned i = 0; i < length; ++i) {
     UChar32 c = characters[i];
-    if ((c <= WTF::Unicode::kSpaceCharacter &&
-         c != WTF::Unicode::kLineTabulationCharacter) ||
-        c == WTF::Unicode::kDeleteCharacter) {
+    if ((c <= WTF::unicode::kSpaceCharacter &&
+         c != WTF::unicode::kLineTabulationCharacter) ||
+        c == WTF::unicode::kDeleteCharacter) {
       if (builder_index != 0)
         pending_whitespace = true;
     } else {
@@ -4318,13 +4318,14 @@
   return referrer_document->url_.StrippedForUseAsReferrer();
 }
 
-ReferrerPolicy Document::GetReferrerPolicy() const {
-  ReferrerPolicy policy = ExecutionContext::GetReferrerPolicy();
+network::mojom::ReferrerPolicy Document::GetReferrerPolicy() const {
+  network::mojom::ReferrerPolicy policy = ExecutionContext::GetReferrerPolicy();
   // For srcdoc documents without their own policy, walk up the frame
   // tree to find the document that is either not a srcdoc or doesn't
   // have its own policy. This algorithm is defined in
   // https://html.spec.whatwg.org/multipage/window-object.html#set-up-a-window-environment-settings-object.
-  if (!frame_ || policy != kReferrerPolicyDefault || !IsSrcdocDocument()) {
+  if (!frame_ || policy != network::mojom::ReferrerPolicy::kDefault ||
+      !IsSrcdocDocument()) {
     return policy;
   }
   LocalFrame* frame = ToLocalFrame(frame_->Tree().Parent());
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h
index 24a8ec9..af01e08 100644
--- a/third_party/blink/renderer/core/dom/document.h
+++ b/third_party/blink/renderer/core/dom/document.h
@@ -307,7 +307,7 @@
   ViewportData& GetViewportData() const { return *viewport_data_; }
 
   String OutgoingReferrer() const override;
-  ReferrerPolicy GetReferrerPolicy() const override;
+  network::mojom::ReferrerPolicy GetReferrerPolicy() const override;
 
   void SetDoctype(DocumentType*);
   DocumentType* doctype() const { return doc_type_.Get(); }
diff --git a/third_party/blink/renderer/core/dom/document_test.cc b/third_party/blink/renderer/core/dom/document_test.cc
index b1264c4..c090869 100644
--- a/third_party/blink/renderer/core/dom/document_test.cc
+++ b/third_party/blink/renderer/core/dom/document_test.cc
@@ -33,6 +33,7 @@
 #include <memory>
 
 #include "build/build_config.h"
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/web_application_cache_host.h"
@@ -56,7 +57,6 @@
 #include "third_party/blink/renderer/core/testing/page_test_base.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/weborigin/scheme_registry.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
@@ -485,45 +485,55 @@
 }
 
 TEST_F(DocumentTest, referrerPolicyParsing) {
-  EXPECT_EQ(kReferrerPolicyDefault, GetDocument().GetReferrerPolicy());
+  EXPECT_EQ(network::mojom::ReferrerPolicy::kDefault,
+            GetDocument().GetReferrerPolicy());
 
   struct TestCase {
     const char* policy;
-    ReferrerPolicy expected;
+    network::mojom::ReferrerPolicy expected;
     bool is_legacy;
   } tests[] = {
-      {"", kReferrerPolicyDefault, false},
+      {"", network::mojom::ReferrerPolicy::kDefault, false},
       // Test that invalid policy values are ignored.
-      {"not-a-real-policy", kReferrerPolicyDefault, false},
-      {"not-a-real-policy,also-not-a-real-policy", kReferrerPolicyDefault,
+      {"not-a-real-policy", network::mojom::ReferrerPolicy::kDefault, false},
+      {"not-a-real-policy,also-not-a-real-policy",
+       network::mojom::ReferrerPolicy::kDefault, false},
+      {"not-a-real-policy,unsafe-url", network::mojom::ReferrerPolicy::kAlways,
        false},
-      {"not-a-real-policy,unsafe-url", kReferrerPolicyAlways, false},
-      {"unsafe-url,not-a-real-policy", kReferrerPolicyAlways, false},
+      {"unsafe-url,not-a-real-policy", network::mojom::ReferrerPolicy::kAlways,
+       false},
       // Test parsing each of the policy values.
-      {"always", kReferrerPolicyAlways, true},
-      {"default", kReferrerPolicyNoReferrerWhenDowngrade, true},
-      {"never", kReferrerPolicyNever, true},
-      {"no-referrer", kReferrerPolicyNever, false},
-      {"default", kReferrerPolicyNoReferrerWhenDowngrade, true},
-      {"no-referrer-when-downgrade", kReferrerPolicyNoReferrerWhenDowngrade,
-       false},
-      {"origin", kReferrerPolicyOrigin, false},
-      {"origin-when-crossorigin", kReferrerPolicyOriginWhenCrossOrigin, true},
-      {"origin-when-cross-origin", kReferrerPolicyOriginWhenCrossOrigin, false},
-      {"same-origin", kReferrerPolicySameOrigin, false},
-      {"strict-origin", kReferrerPolicyStrictOrigin, false},
+      {"always", network::mojom::ReferrerPolicy::kAlways, true},
+      {"default", network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade,
+       true},
+      {"never", network::mojom::ReferrerPolicy::kNever, true},
+      {"no-referrer", network::mojom::ReferrerPolicy::kNever, false},
+      {"default", network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade,
+       true},
+      {"no-referrer-when-downgrade",
+       network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade, false},
+      {"origin", network::mojom::ReferrerPolicy::kOrigin, false},
+      {"origin-when-crossorigin",
+       network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin, true},
+      {"origin-when-cross-origin",
+       network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin, false},
+      {"same-origin", network::mojom::ReferrerPolicy::kSameOrigin, false},
+      {"strict-origin", network::mojom::ReferrerPolicy::kStrictOrigin, false},
       {"strict-origin-when-cross-origin",
-       kReferrerPolicyStrictOriginWhenCrossOrigin, false},
-      {"unsafe-url", kReferrerPolicyAlways},
+       network::mojom::ReferrerPolicy::
+           kNoReferrerWhenDowngradeOriginWhenCrossOrigin,
+       false},
+      {"unsafe-url", network::mojom::ReferrerPolicy::kAlways},
   };
 
   for (auto test : tests) {
-    GetDocument().SetReferrerPolicy(kReferrerPolicyDefault);
+    GetDocument().SetReferrerPolicy(network::mojom::ReferrerPolicy::kDefault);
     if (test.is_legacy) {
       // Legacy keyword support must be explicitly enabled for the policy to
       // parse successfully.
       GetDocument().ParseAndSetReferrerPolicy(test.policy);
-      EXPECT_EQ(kReferrerPolicyDefault, GetDocument().GetReferrerPolicy());
+      EXPECT_EQ(network::mojom::ReferrerPolicy::kDefault,
+                GetDocument().GetReferrerPolicy());
       GetDocument().ParseAndSetReferrerPolicy(test.policy, true);
     } else {
       GetDocument().ParseAndSetReferrerPolicy(test.policy);
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 41b0c1d..56dfd51b 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -1612,7 +1612,7 @@
     SetHasName(!params.new_value.IsNull());
   } else if (name == html_names::kPartAttr) {
     if (RuntimeEnabledFeatures::CSSPartPseudoElementEnabled()) {
-      EnsureElementRareData().SetPart(params.new_value);
+      part().DidUpdateAttributeValue(params.old_value, params.new_value);
       GetDocument().GetStyleEngine().PartChangedForElement(*this);
     }
   } else if (name == html_names::kExportpartsAttr) {
@@ -5088,23 +5088,33 @@
   ContainerNode::Trace(visitor);
 }
 
-bool Element::HasPartName() const {
+bool Element::HasPart() const {
   if (!RuntimeEnabledFeatures::CSSPartPseudoElementEnabled())
     return false;
   if (HasRareData()) {
-    if (auto* part_names = GetElementRareData()->PartNames()) {
-      return part_names->size() > 0;
+    if (auto* part = GetElementRareData()->GetPart()) {
+      return part->length() > 0;
     }
   }
   return false;
 }
 
-const SpaceSplitString* Element::PartNames() const {
+DOMTokenList* Element::GetPart() const {
   return RuntimeEnabledFeatures::CSSPartPseudoElementEnabled() && HasRareData()
-             ? GetElementRareData()->PartNames()
+             ? GetElementRareData()->GetPart()
              : nullptr;
 }
 
+DOMTokenList& Element::part() {
+  ElementRareData& rare_data = EnsureElementRareData();
+  DOMTokenList* part = rare_data.GetPart();
+  if (!part) {
+    part = DOMTokenList::Create(*this, kPartAttr);
+    rare_data.SetPart(part);
+  }
+  return *part;
+}
+
 bool Element::HasPartNamesMap() const {
   const NamesMap* names_map = PartNamesMap();
   return names_map && names_map->size() > 0;
diff --git a/third_party/blink/renderer/core/dom/element.h b/third_party/blink/renderer/core/dom/element.h
index f48c261..430fd71 100644
--- a/third_party/blink/renderer/core/dom/element.h
+++ b/third_party/blink/renderer/core/dom/element.h
@@ -843,8 +843,13 @@
   const SpaceSplitString& ClassNames() const;
   bool HasClassName(const AtomicString& class_name) const;
 
-  bool HasPartName() const;
-  const SpaceSplitString* PartNames() const;
+  // Returns true if the element has 1 or more part names.
+  bool HasPart() const;
+  // Returns the list of part names if it has ever been created.
+  DOMTokenList* GetPart() const;
+  // IDL method.
+  // Returns the list of part names, creating it if it doesn't exist.
+  DOMTokenList& part();
 
   bool HasPartNamesMap() const;
   const NamesMap* PartNamesMap() const;
diff --git a/third_party/blink/renderer/core/dom/element.idl b/third_party/blink/renderer/core/dom/element.idl
index dfddb635..6c6e917 100644
--- a/third_party/blink/renderer/core/dom/element.idl
+++ b/third_party/blink/renderer/core/dom/element.idl
@@ -36,6 +36,7 @@
     [Affects=Nothing, CEReactions, Reflect=class] attribute DOMString className;
     [Affects=Nothing, SameObject, PerWorldBindings, PutForwards=value] readonly attribute DOMTokenList classList;
     [Unscopable, CEReactions, Reflect] attribute DOMString slot;
+    [RuntimeEnabled=CSSPartPseudoElement, Affects=Nothing, SameObject, PerWorldBindings, PutForwards=value] readonly attribute DOMTokenList part;
 
     // Pointer Events
     // https://w3c.github.io/pointerevents/#extensions-to-the-element-interface
diff --git a/third_party/blink/renderer/core/dom/element_rare_data.cc b/third_party/blink/renderer/core/dom/element_rare_data.cc
index 692a5f96..12b8eda 100644
--- a/third_party/blink/renderer/core/dom/element_rare_data.cc
+++ b/third_party/blink/renderer/core/dom/element_rare_data.cc
@@ -41,8 +41,8 @@
 
 struct SameSizeAsElementRareData : NodeRareData {
   IntSize scroll_offset;
-  void* pointers_or_strings[5];
-  Member<void*> members[16];
+  void* pointers_or_strings[4];
+  Member<void*> members[17];
   bool flags[1];
 };
 
diff --git a/third_party/blink/renderer/core/dom/element_rare_data.h b/third_party/blink/renderer/core/dom/element_rare_data.h
index a3ad9560..6f8d1db 100644
--- a/third_party/blink/renderer/core/dom/element_rare_data.h
+++ b/third_party/blink/renderer/core/dom/element_rare_data.h
@@ -100,15 +100,12 @@
     class_list_ = class_list;
   }
 
-  void SetPart(const AtomicString part_names) {
+  void SetPart(DOMTokenList* part) {
     if (!RuntimeEnabledFeatures::CSSPartPseudoElementEnabled())
       return;
-    if (!part_names_) {
-      part_names_.reset(new SpaceSplitString());
-    }
-    part_names_->Set(part_names);
+    part_ = part;
   }
-  const SpaceSplitString* PartNames() const { return part_names_.get(); }
+  DOMTokenList* GetPart() const { return part_.Get(); }
 
   void SetPartNamesMap(const AtomicString part_names) {
     if (!RuntimeEnabledFeatures::CSSPartPseudoElementEnabled())
@@ -218,7 +215,7 @@
   TraceWrapperMember<DatasetDOMStringMap> dataset_;
   TraceWrapperMember<ShadowRoot> shadow_root_;
   TraceWrapperMember<DOMTokenList> class_list_;
-  std::unique_ptr<SpaceSplitString> part_names_;
+  TraceWrapperMember<DOMTokenList> part_;
   std::unique_ptr<NamesMap> part_names_map_;
   TraceWrapperMember<NamedNodeMap> attribute_map_;
   TraceWrapperMember<AttrNodeList> attr_node_list_;
diff --git a/third_party/blink/renderer/core/dom/element_test.cc b/third_party/blink/renderer/core/dom/element_test.cc
index 8c5c190a..db52ab4 100644
--- a/third_party/blink/renderer/core/dom/element_test.cc
+++ b/third_party/blink/renderer/core/dom/element_test.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/core/dom/dom_token_list.h"
 #include "third_party/blink/renderer/core/dom/node_computed_style.h"
 #include "third_party/blink/renderer/core/editing/testing/editing_test_base.h"
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
@@ -365,32 +366,34 @@
   ASSERT_TRUE(has_two_parts);
 
   {
-    EXPECT_TRUE(has_one_part->HasPartName());
-    const SpaceSplitString* part_names = has_one_part->PartNames();
-    ASSERT_TRUE(part_names);
-    ASSERT_EQ(1UL, part_names->size());
-    ASSERT_EQ("partname", (*part_names)[0].Ascii());
+    EXPECT_TRUE(has_one_part->HasPart());
+    const DOMTokenList* part = has_one_part->GetPart();
+    ASSERT_TRUE(part);
+    ASSERT_EQ(1UL, part->length());
+    ASSERT_EQ("partname", part->value());
   }
 
   {
-    EXPECT_TRUE(has_two_parts->HasPartName());
-    const SpaceSplitString* part_names = has_two_parts->PartNames();
-    ASSERT_TRUE(part_names);
-    ASSERT_EQ(2UL, part_names->size());
-    ASSERT_EQ("partname1", (*part_names)[0].Ascii());
-    ASSERT_EQ("partname2", (*part_names)[1].Ascii());
+    EXPECT_TRUE(has_two_parts->HasPart());
+    const DOMTokenList* part = has_two_parts->GetPart();
+    ASSERT_TRUE(part);
+    ASSERT_EQ(2UL, part->length());
+    ASSERT_EQ("partname1 partname2", part->value());
   }
 
   {
-    EXPECT_FALSE(has_no_part->HasPartName());
-    EXPECT_FALSE(has_no_part->PartNames());
+    EXPECT_FALSE(has_no_part->HasPart());
+    EXPECT_FALSE(has_no_part->GetPart());
+
+    // Calling the DOM API should force creation of an empty DOMTokenList.
+    const DOMTokenList& part = has_no_part->part();
+    EXPECT_FALSE(has_no_part->HasPart());
+    EXPECT_EQ(&part, has_no_part->GetPart());
 
     // Now update the attribute value and make sure it's reflected.
     has_no_part->setAttribute("part", "partname");
-    const SpaceSplitString* part_names = has_no_part->PartNames();
-    ASSERT_TRUE(part_names);
-    ASSERT_EQ(1UL, part_names->size());
-    ASSERT_EQ("partname", (*part_names)[0].Ascii());
+    ASSERT_EQ(1UL, part.length());
+    ASSERT_EQ("partname", part.value());
   }
 }
 
diff --git a/third_party/blink/renderer/core/dom/first_letter_pseudo_element.cc b/third_party/blink/renderer/core/dom/first_letter_pseudo_element.cc
index 62dc36f..a689ec3 100644
--- a/third_party/blink/renderer/core/dom/first_letter_pseudo_element.cc
+++ b/third_party/blink/renderer/core/dom/first_letter_pseudo_element.cc
@@ -44,16 +44,16 @@
 // (Pe), "initial" (Pi). "final" (Pf) and "other" (Po) punctuation classes),
 // that precedes or follows the first letter should be included"
 static inline bool IsPunctuationForFirstLetter(UChar32 c) {
-  WTF::Unicode::CharCategory char_category = WTF::Unicode::Category(c);
-  return char_category == WTF::Unicode::kPunctuation_Open ||
-         char_category == WTF::Unicode::kPunctuation_Close ||
-         char_category == WTF::Unicode::kPunctuation_InitialQuote ||
-         char_category == WTF::Unicode::kPunctuation_FinalQuote ||
-         char_category == WTF::Unicode::kPunctuation_Other;
+  WTF::unicode::CharCategory char_category = WTF::unicode::Category(c);
+  return char_category == WTF::unicode::kPunctuation_Open ||
+         char_category == WTF::unicode::kPunctuation_Close ||
+         char_category == WTF::unicode::kPunctuation_InitialQuote ||
+         char_category == WTF::unicode::kPunctuation_FinalQuote ||
+         char_category == WTF::unicode::kPunctuation_Other;
 }
 
 static inline bool IsSpaceForFirstLetter(UChar c) {
-  return IsSpaceOrNewline(c) || c == WTF::Unicode::kNoBreakSpaceCharacter;
+  return IsSpaceOrNewline(c) || c == WTF::unicode::kNoBreakSpaceCharacter;
 }
 
 unsigned FirstLetterPseudoElement::FirstLetterLength(const String& text) {
diff --git a/third_party/blink/renderer/core/editing/element_inner_text.cc b/third_party/blink/renderer/core/editing/element_inner_text.cc
index a6130a3..e96d4a71 100644
--- a/third_party/blink/renderer/core/editing/element_inner_text.cc
+++ b/third_party/blink/renderer/core/editing/element_inner_text.cc
@@ -11,6 +11,7 @@
 #include "third_party/blink/renderer/core/dom/node_traversal.h"
 #include "third_party/blink/renderer/core/dom/text.h"
 #include "third_party/blink/renderer/core/editing/editing_utilities.h"
+#include "third_party/blink/renderer/core/editing/ephemeral_range.h"
 #include "third_party/blink/renderer/core/html/forms/html_opt_group_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_option_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_select_element.h"
@@ -21,9 +22,9 @@
 #include "third_party/blink/renderer/core/layout/layout_table_section.h"
 #include "third_party/blink/renderer/core/layout/layout_text_fragment.h"
 #include "third_party/blink/renderer/core/layout/line/inline_text_box.h"
-#include "third_party/blink/renderer/core/layout/ng/inline/ng_physical_text_fragment.h"
-#include "third_party/blink/renderer/core/paint/ng/ng_paint_fragment.h"
-#include "third_party/blink/renderer/core/paint/ng/ng_paint_fragment_traversal.h"
+#include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.h"
+#include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_node_data.h"
+#include "third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.h"
 #include "third_party/blink/renderer/platform/wtf/text/character_names.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
@@ -47,20 +48,12 @@
    public:
     Result() = default;
 
-    void EmitBeginBlock();
     void EmitChar16(UChar code_point);
-    void EmitCollapsibleSpace();
-    void EmitEndBlock();
     void EmitNewline();
     void EmitRequiredLineBreak(int count);
     void EmitTab();
     void EmitText(const StringView& text);
     String Finish();
-    void FlushCollapsibleSpace();
-
-    void SetShouldCollapseWhitespace(bool value) {
-      should_collapse_white_space_ = value;
-    }
 
    private:
     void FlushRequiredLineBreak();
@@ -68,59 +61,36 @@
     StringBuilder builder_;
     int required_line_break_count_ = 0;
 
-    // |should_collapse_white_space_| is used for collapsing white spaces around
-    // block, e.g. leading white space at start of block and leading white
-    // spaces after inline-block.
-    bool should_collapse_white_space_ = false;
-    bool has_collapsible_space_ = false;
-
     DISALLOW_COPY_AND_ASSIGN(Result);
   };
 
-  // Minimal CSS text box representation for collecting character.
-  struct TextBox {
-    StringView text;
-    // An offset in |LayoutText::GetText()| or |NGInlineItemsData.text_content|.
-    unsigned start = 0;
-
-    TextBox(StringView passed_text, unsigned passed_start)
-        : text(passed_text), start(passed_start) {
-      DCHECK_GT(text.length(), 0u);
-    }
-  };
-
-  static bool EndsWithWhiteSpace(const InlineTextBox& text_box);
-  static bool EndsWithWhiteSpace(const LayoutText& layout_text);
-  static bool EndsWithWhiteSpace(const NGPhysicalTextFragment& fragment);
   static bool HasDisplayContentsStyle(const Node& node);
-  static bool IsAfterWhiteSpace(const InlineTextBox& text_box);
-  static bool IsAfterWhiteSpace(const LayoutText& layout_text);
-  static bool IsAfterWhiteSpace(const NGPhysicalTextFragment& fragment);
   static bool IsBeingRendered(const Node& node);
-  static bool IsCollapsibleSpace(UChar code_point);
   // Returns true if used value of "display" is block-level.
   static bool IsDisplayBlockLevel(const Node&);
   static LayoutObject* PreviousLeafOf(const LayoutObject& layout_object);
   static bool ShouldEmitNewlineForTableRow(const LayoutTableRow& table_row);
-  static bool StartsWithWhiteSpace(const LayoutText& layout_text);
 
+  const NGOffsetMapping* GetOffsetMapping(const LayoutText& layout_text);
   void ProcessChildren(const Node& node);
   void ProcessChildrenWithRequiredLineBreaks(const Node& node,
                                              int required_line_break_count);
-  void ProcessLayoutText(const LayoutText& layout_text);
+  void ProcessLayoutText(const LayoutText& layout_text, const Text& text_node);
   void ProcessLayoutTextEmpty(const LayoutText& layout_text);
-  void ProcessLayoutTextForNG(const NGPaintFragment::FragmentRange& fragments);
   void ProcessNode(const Node& node);
   void ProcessOptionElement(const HTMLOptionElement& element);
   void ProcessSelectElement(const HTMLSelectElement& element);
-  void ProcessText(StringView text, EWhiteSpace white_space);
-  void ProcessTextBoxes(const LayoutText& layout_text,
-                        const Vector<TextBox>& text_boxes);
   void ProcessTextNode(const Text& node);
 
   // Result character buffer.
   Result result_;
 
+  // Remember last |NGOffsetMapping| to avoid repeated offset mapping
+  // computation.
+  const LayoutBlockFlow* last_offset_mapping_block_flow_ = nullptr;
+  const NGOffsetMapping* last_offset_mapping_ = nullptr;
+  std::unique_ptr<NGOffsetMapping> offset_mapping_storage_;
+
   DISALLOW_COPY_AND_ASSIGN(ElementInnerTextCollector);
 };
 
@@ -153,34 +123,11 @@
   else if (IsHTMLOptionElement(element))
     ProcessOptionElement(ToHTMLOptionElement(element));
   else
-    ProcessChildrenWithRequiredLineBreaks(element, 0);
+    ProcessChildren(element);
   return result_.Finish();
 }
 
 // static
-bool ElementInnerTextCollector::EndsWithWhiteSpace(
-    const InlineTextBox& text_box) {
-  const unsigned length = text_box.Len();
-  if (length == 0)
-    return false;
-  const String text = text_box.GetLineLayoutItem().GetText();
-  return IsCollapsibleSpace(text[text_box.Start() + length - 1]);
-}
-
-// static
-bool ElementInnerTextCollector::EndsWithWhiteSpace(
-    const LayoutText& layout_text) {
-  const unsigned length = layout_text.TextLength();
-  return length > 0 && layout_text.ContainsOnlyWhitespace(length - 1, 1);
-}
-
-// static
-bool ElementInnerTextCollector::EndsWithWhiteSpace(
-    const NGPhysicalTextFragment& fragment) {
-  return IsCollapsibleSpace(fragment.Text()[fragment.Length() - 1]);
-}
-
-// static
 bool ElementInnerTextCollector::HasDisplayContentsStyle(const Node& node) {
   return node.IsElementNode() && ToElement(node).HasDisplayContentsStyle();
 }
@@ -197,67 +144,6 @@
 }
 
 // static
-bool ElementInnerTextCollector::IsAfterWhiteSpace(
-    const InlineTextBox& text_box) {
-  const unsigned start = text_box.Start();
-  if (start == 0)
-    return false;
-  const String text = text_box.GetLineLayoutItem().GetText();
-  return IsCollapsibleSpace(text[start - 1]);
-}
-
-// static
-bool ElementInnerTextCollector::IsAfterWhiteSpace(
-    const LayoutText& layout_text) {
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    const auto fragments = NGPaintFragment::InlineFragmentsFor(&layout_text);
-    if (!fragments.IsEmpty() &&
-        fragments.IsInLayoutNGInlineFormattingContext()) {
-      NGPaintFragmentTraversalContext previous =
-          NGPaintFragmentTraversal::PreviousInlineLeafOfIgnoringLineBreak(
-              NGPaintFragmentTraversalContext::Create(&fragments.front()));
-      if (previous.IsNull())
-        return false;
-      const NGPhysicalFragment& previous_fragment =
-          previous.GetFragment()->PhysicalFragment();
-      if (!previous_fragment.IsText())
-        return false;
-      return EndsWithWhiteSpace(ToNGPhysicalTextFragment(previous_fragment));
-    }
-  }
-  if (InlineTextBox* text_box = layout_text.FirstTextBox()) {
-    const InlineBox* previous = text_box->PrevLeafChild();
-    if (!previous || !previous->IsInlineTextBox())
-      return false;
-    return EndsWithWhiteSpace(ToInlineTextBox(*previous));
-  }
-  const LayoutObject* previous_leaf = PreviousLeafOf(layout_text);
-  if (!previous_leaf || !previous_leaf->IsText())
-    return false;
-  const LayoutText& previous_text = ToLayoutText(*previous_leaf);
-  const unsigned length = previous_text.TextLength();
-  if (length == 0)
-    return false;
-  return previous_text.ContainsOnlyWhitespace(length - 1, 1);
-}
-
-bool ElementInnerTextCollector::IsAfterWhiteSpace(
-    const NGPhysicalTextFragment& text_box) {
-  const unsigned start = text_box.StartOffset();
-  if (start == 0)
-    return false;
-  const String text = text_box.TextContent();
-  return IsCollapsibleSpace(text[start - 1]);
-}
-
-// See https://drafts.csswg.org/css-text-3/#white-space-phase-2
-bool ElementInnerTextCollector::IsCollapsibleSpace(UChar code_point) {
-  return code_point == kSpaceCharacter || code_point == kNewlineCharacter ||
-         code_point == kTabulationCharacter ||
-         code_point == kCarriageReturnCharacter;
-}
-
-// static
 bool ElementInnerTextCollector::IsDisplayBlockLevel(const Node& node) {
   const LayoutObject* const layout_object = node.GetLayoutObject();
   if (!layout_object)
@@ -326,11 +212,36 @@
   return false;
 }
 
-// static
-bool ElementInnerTextCollector::StartsWithWhiteSpace(
+// Note: LayoutFlowThread, used for multicol, can't provide offset mapping.
+bool CanUseOffsetMapping(const LayoutObject& object) {
+  return object.IsLayoutBlockFlow() && !object.IsLayoutFlowThread();
+}
+
+LayoutBlockFlow* ContainingBlockFlowFor(const LayoutText& object) {
+  for (LayoutObject* runner = object.Parent(); runner;
+       runner = runner->Parent()) {
+    if (!CanUseOffsetMapping(*runner))
+      continue;
+    return ToLayoutBlockFlow(runner);
+  }
+  return nullptr;
+}
+
+const NGOffsetMapping* ElementInnerTextCollector::GetOffsetMapping(
     const LayoutText& layout_text) {
-  const unsigned length = layout_text.TextLength();
-  return length > 0 && layout_text.ContainsOnlyWhitespace(0, 1);
+  // TODO(editing-dev): We should handle "text-transform" in "::first-line".
+  // In legacy layout, |InlineTextBox| holds original text and text box
+  // paint does text transform.
+  LayoutBlockFlow* const block_flow = ContainingBlockFlowFor(layout_text);
+  DCHECK(block_flow) << layout_text;
+  if (block_flow == last_offset_mapping_block_flow_)
+    return last_offset_mapping_;
+  const NGOffsetMapping* const mapping =
+      NGInlineNode::GetOffsetMapping(block_flow, &offset_mapping_storage_);
+  DCHECK(mapping) << layout_text;
+  last_offset_mapping_block_flow_ = block_flow;
+  last_offset_mapping_ = mapping;
+  return mapping;
 }
 
 void ElementInnerTextCollector::ProcessChildren(const Node& container) {
@@ -341,17 +252,15 @@
 void ElementInnerTextCollector::ProcessChildrenWithRequiredLineBreaks(
     const Node& node,
     int required_line_break_count) {
-  DCHECK_GE(required_line_break_count, 0);
+  DCHECK_GE(required_line_break_count, 1);
   DCHECK_LE(required_line_break_count, 2);
-  result_.EmitBeginBlock();
   result_.EmitRequiredLineBreak(required_line_break_count);
   ProcessChildren(node);
   result_.EmitRequiredLineBreak(required_line_break_count);
-  result_.EmitEndBlock();
 }
 
-void ElementInnerTextCollector::ProcessLayoutText(
-    const LayoutText& layout_text) {
+void ElementInnerTextCollector::ProcessLayoutText(const LayoutText& layout_text,
+                                                  const Text& text_node) {
   if (layout_text.TextLength() == 0)
     return;
   if (layout_text.Style()->Visibility() != EVisibility::kVisible) {
@@ -359,94 +268,14 @@
     // we should get rid of this if-statement. http://crbug.com/866744
     return;
   }
-  if (RuntimeEnabledFeatures::LayoutNGEnabled()) {
-    const auto fragments = NGPaintFragment::InlineFragmentsFor(&layout_text);
-    if (!fragments.IsEmpty() &&
-        fragments.IsInLayoutNGInlineFormattingContext()) {
-      ProcessLayoutTextForNG(fragments);
-      return;
-    }
-  }
 
-  if (!layout_text.FirstTextBox()) {
-    if (!layout_text.ContainsOnlyWhitespace(0, layout_text.TextLength()))
-      return;
-    if (IsAfterWhiteSpace(layout_text))
-      return;
-    // <div style="width:0">abc<span> <span>def</span></div> reaches here for
-    // a space between SPAN.
-    result_.EmitCollapsibleSpace();
-    return;
+  const NGOffsetMapping* const mapping = GetOffsetMapping(layout_text);
+  const NGMappingUnitRange range = mapping->GetMappingUnitsForNode(text_node);
+  for (const NGOffsetMappingUnit& unit : range) {
+    result_.EmitText(
+        StringView(mapping->GetText(), unit.TextContentStart(),
+                   unit.TextContentEnd() - unit.TextContentStart()));
   }
-
-  // TODO(editing-dev): We should handle "text-transform" in "::first-line".
-  // In legacy layout, |InlineTextBox| holds original text and text box
-  // paint does text transform.
-  const String text = layout_text.GetText();
-  const bool collapse_white_space = layout_text.Style()->CollapseWhiteSpace();
-  bool may_have_leading_space = collapse_white_space &&
-                                StartsWithWhiteSpace(layout_text) &&
-                                !IsAfterWhiteSpace(layout_text);
-  Vector<TextBox> text_boxes;
-  for (InlineTextBox* text_box : layout_text.TextBoxes()) {
-    const unsigned start =
-        may_have_leading_space && IsAfterWhiteSpace(*text_box)
-            ? text_box->Start() - 1
-            : text_box->Start();
-    const unsigned end = text_box->Start() + text_box->Len();
-    may_have_leading_space =
-        collapse_white_space && !IsCollapsibleSpace(text[end - 1]);
-    text_boxes.emplace_back(StringView(text, start, end - start), start);
-  }
-  ProcessTextBoxes(layout_text, text_boxes);
-  if (!collapse_white_space || !EndsWithWhiteSpace(layout_text))
-    return;
-  result_.EmitCollapsibleSpace();
-}
-
-void ElementInnerTextCollector::ProcessLayoutTextForNG(
-    const NGPaintFragment::FragmentRange& paint_fragments) {
-  DCHECK(!paint_fragments.IsEmpty());
-  const LayoutText& layout_text =
-      ToLayoutText(*paint_fragments.front().GetLayoutObject());
-  const bool collapse_white_space = layout_text.Style()->CollapseWhiteSpace();
-  bool may_have_leading_space = collapse_white_space &&
-                                StartsWithWhiteSpace(layout_text) &&
-                                !IsAfterWhiteSpace(layout_text);
-  // TODO(editing-dev): We should include overflow text to result of CSS
-  // "text-overflow". See http://crbug.com/873957
-  Vector<TextBox> text_boxes;
-  const StringImpl* last_text_content = nullptr;
-  for (const NGPaintFragment* paint_fragment : paint_fragments) {
-    const NGPhysicalTextFragment& text_fragment =
-        ToNGPhysicalTextFragment(paint_fragment->PhysicalFragment());
-    if (text_fragment.IsGeneratedText())
-      continue;
-    // Symbol marker should be appeared in pseudo-element only.
-    DCHECK_NE(text_fragment.TextType(), NGPhysicalTextFragment::kSymbolMarker);
-    if (last_text_content != text_fragment.TextContent().Impl()) {
-      if (!text_boxes.IsEmpty()) {
-        ProcessTextBoxes(layout_text, text_boxes);
-        text_boxes.clear();
-      }
-      last_text_content = text_fragment.TextContent().Impl();
-    }
-    const unsigned start =
-        may_have_leading_space && IsAfterWhiteSpace(text_fragment)
-            ? text_fragment.StartOffset() - 1
-            : text_fragment.StartOffset();
-    const unsigned end = text_fragment.EndOffset();
-    may_have_leading_space =
-        collapse_white_space &&
-        !IsCollapsibleSpace(text_fragment.TextContent()[end - 1]);
-    text_boxes.emplace_back(
-        StringView(text_fragment.TextContent(), start, end - start), start);
-  }
-  if (!text_boxes.IsEmpty())
-    ProcessTextBoxes(layout_text, text_boxes);
-  if (!collapse_white_space || !EndsWithWhiteSpace(layout_text))
-    return;
-  result_.EmitCollapsibleSpace();
 }
 
 // The "inner text collection steps".
@@ -494,7 +323,6 @@
   if (IsHTMLBRElement(node)) {
     ProcessChildren(node);
     result_.EmitNewline();
-    result_.SetShouldCollapseWhitespace(true);
     return;
   }
 
@@ -504,7 +332,7 @@
   // character to items.
   const LayoutObject& layout_object = *node.GetLayoutObject();
   if (style->Display() == EDisplay::kTableCell) {
-    ProcessChildrenWithRequiredLineBreaks(node, 0);
+    ProcessChildren(node);
     if (layout_object.IsTableCell() &&
         ToLayoutTableCell(layout_object).NextCell())
       result_.EmitTab();
@@ -516,7 +344,7 @@
   // append a string containing a single U+000A LINE FEED (LF) character to
   // items.
   if (style->Display() == EDisplay::kTableRow) {
-    ProcessChildrenWithRequiredLineBreaks(node, 0);
+    ProcessChildren(node);
     if (layout_object.IsTableRow() &&
         ShouldEmitNewlineForTableRow(ToLayoutTableRow(layout_object)))
       result_.EmitNewline();
@@ -538,17 +366,7 @@
   if (IsDisplayBlockLevel(node))
     return ProcessChildrenWithRequiredLineBreaks(node, 1);
 
-  if (!layout_object.IsAtomicInlineLevel())
-    return ProcessChildren(node);
-
-  // We should emit a space before atomic inline item:
-  // abc <img> def => "abc  def" See http://crbug.com/894701
-  result_.FlushCollapsibleSpace();
-  ProcessChildrenWithRequiredLineBreaks(node, 0);
-  // We should not collapse white space after inline-block:
-  // abc <span style="display:inline-block"></span> def => "abc  def".
-  // See http://crbug.com/890020
-  result_.SetShouldCollapseWhitespace(false);
+  ProcessChildren(node);
 }
 
 void ElementInnerTextCollector::ProcessOptionElement(
@@ -578,81 +396,31 @@
   }
 }
 
-void ElementInnerTextCollector::ProcessTextBoxes(
-    const LayoutText& layout_text,
-    const Vector<TextBox>& passed_text_boxes) {
-  DCHECK(!passed_text_boxes.IsEmpty());
-  Vector<TextBox> text_boxes = passed_text_boxes;
-  // TODO(editing-dev): We may want to check |ContainsReversedText()| in
-  // |LayoutText|. See http://crbug.com/873949
-  std::sort(text_boxes.begin(), text_boxes.end(),
-            [](const TextBox& text_box1, const TextBox& text_box2) {
-              return text_box1.start < text_box2.start;
-            });
-  const EWhiteSpace white_space = layout_text.Style()->WhiteSpace();
-  for (const TextBox& text_box : text_boxes)
-    ProcessText(text_box.text, white_space);
-}
-
-void ElementInnerTextCollector::ProcessText(StringView text,
-                                            EWhiteSpace white_space) {
-  if (!ComputedStyle::CollapseWhiteSpace(white_space))
-    return result_.EmitText(text);
-  for (unsigned index = 0; index < text.length(); ++index) {
-    if (white_space == EWhiteSpace::kPreLine &&
-        text[index] == kNewlineCharacter) {
-      result_.EmitNewline();
-      continue;
-    }
-    if (IsCollapsibleSpace(text[index])) {
-      result_.EmitCollapsibleSpace();
-      continue;
-    }
-    result_.EmitChar16(text[index]);
-  }
-}
-
 void ElementInnerTextCollector::ProcessTextNode(const Text& node) {
   if (!node.GetLayoutObject())
     return;
   const LayoutText& layout_text = *node.GetLayoutObject();
-  if (LayoutText* first_letter_part = layout_text.GetFirstLetterPart())
-    ProcessLayoutText(*first_letter_part);
-  ProcessLayoutText(layout_text);
+  if (LayoutText* first_letter_part = layout_text.GetFirstLetterPart()) {
+    if (layout_text.TextLength() == 0 ||
+        ContainingBlockFlowFor(layout_text) !=
+            ContainingBlockFlowFor(*first_letter_part)) {
+      // "::first-letter" with "float" reach here.
+      ProcessLayoutText(*first_letter_part, node);
+    }
+  }
+  ProcessLayoutText(layout_text, node);
 }
 
 // ----
 
-void ElementInnerTextCollector::Result::EmitBeginBlock() {
-  should_collapse_white_space_ = true;
-}
-
 void ElementInnerTextCollector::Result::EmitChar16(UChar code_point) {
-  if (required_line_break_count_ > 0)
-    FlushRequiredLineBreak();
-  else
-    FlushCollapsibleSpace();
-  DCHECK_EQ(required_line_break_count_, 0);
-  DCHECK(!has_collapsible_space_);
-  builder_.Append(code_point);
-  should_collapse_white_space_ = false;
-}
-
-void ElementInnerTextCollector::Result::EmitCollapsibleSpace() {
-  if (should_collapse_white_space_)
-    return;
   FlushRequiredLineBreak();
-  has_collapsible_space_ = true;
-}
-
-void ElementInnerTextCollector::Result::EmitEndBlock() {
-  // Discard tailing collapsible spaces from last child of the block.
-  has_collapsible_space_ = false;
+  DCHECK_EQ(required_line_break_count_, 0);
+  builder_.Append(code_point);
 }
 
 void ElementInnerTextCollector::Result::EmitNewline() {
   FlushRequiredLineBreak();
-  has_collapsible_space_ = false;
   builder_.Append(kNewlineCharacter);
 }
 
@@ -663,8 +431,6 @@
     return;
   // 4. Remove any runs of consecutive required line break count items at the
   // start or end of results.
-  should_collapse_white_space_ = true;
-  has_collapsible_space_ = false;
   if (builder_.IsEmpty()) {
     DCHECK_EQ(required_line_break_count_, 0);
     return;
@@ -676,45 +442,27 @@
 }
 
 void ElementInnerTextCollector::Result::EmitTab() {
-  if (required_line_break_count_ > 0)
-    FlushRequiredLineBreak();
-  has_collapsible_space_ = false;
-  should_collapse_white_space_ = false;
+  FlushRequiredLineBreak();
   builder_.Append(kTabulationCharacter);
 }
 
 void ElementInnerTextCollector::Result::EmitText(const StringView& text) {
   if (text.IsEmpty())
     return;
-  should_collapse_white_space_ = false;
-  if (required_line_break_count_ > 0)
-    FlushRequiredLineBreak();
-  else
-    FlushCollapsibleSpace();
+  FlushRequiredLineBreak();
   DCHECK_EQ(required_line_break_count_, 0);
-  DCHECK(!has_collapsible_space_);
   builder_.Append(text);
 }
 
 String ElementInnerTextCollector::Result::Finish() {
-  if (required_line_break_count_ == 0)
-    FlushCollapsibleSpace();
   return builder_.ToString();
 }
 
-void ElementInnerTextCollector::Result::FlushCollapsibleSpace() {
-  if (!has_collapsible_space_)
-    return;
-  has_collapsible_space_ = false;
-  builder_.Append(kSpaceCharacter);
-}
-
 void ElementInnerTextCollector::Result::FlushRequiredLineBreak() {
   DCHECK_GE(required_line_break_count_, 0);
   DCHECK_LE(required_line_break_count_, 2);
   builder_.Append("\n\n", required_line_break_count_);
   required_line_break_count_ = 0;
-  has_collapsible_space_ = false;
 }
 
 }  // anonymous namespace
diff --git a/third_party/blink/renderer/core/editing/element_inner_text_test.cc b/third_party/blink/renderer/core/editing/element_inner_text_test.cc
index 9a29659..b1b58a0 100644
--- a/third_party/blink/renderer/core/editing/element_inner_text_test.cc
+++ b/third_party/blink/renderer/core/editing/element_inner_text_test.cc
@@ -5,20 +5,35 @@
 #include "third_party/blink/renderer/core/dom/element.h"
 
 #include "third_party/blink/renderer/core/editing/testing/editing_test_base.h"
+#include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 
 namespace blink {
 
-class ElementInnerTest : public EditingTestBase {};
+class ElementInnerTest : public testing::WithParamInterface<bool>,
+                         private ScopedLayoutNGForTest,
+                         public EditingTestBase {
+ protected:
+  ElementInnerTest() : ScopedLayoutNGForTest(GetParam()) {}
+
+  bool LayoutNGEnabled() const { return GetParam(); }
+};
+
+INSTANTIATE_TEST_CASE_P(All, ElementInnerTest, testing::Bool());
 
 // http://crbug.com/877498
-TEST_F(ElementInnerTest, ListItemWithLeadingWhiteSpace) {
+TEST_P(ElementInnerTest, ListItemWithLeadingWhiteSpace) {
   SetBodyContent("<li id=target> abc</li>");
   Element& target = *GetDocument().getElementById("target");
+  if (!LayoutNGEnabled()) {
+    // TODO(crbug.com/908339) Actual result should be "abc", no leading space.
+    EXPECT_EQ(" abc", target.innerText());
+    return;
+  }
   EXPECT_EQ("abc", target.innerText());
 }
 
 // http://crbug.com/877470
-TEST_F(ElementInnerTest, SVGElementAsTableCell) {
+TEST_P(ElementInnerTest, SVGElementAsTableCell) {
   SetBodyContent(
       "<div id=target>abc"
       "<svg><rect style='display:table-cell'></rect></svg>"
@@ -28,7 +43,7 @@
 }
 
 // http://crbug.com/878725
-TEST_F(ElementInnerTest, SVGElementAsTableRow) {
+TEST_P(ElementInnerTest, SVGElementAsTableRow) {
   SetBodyContent(
       "<div id=target>abc"
       "<svg><rect style='display:table-row'></rect></svg>"
diff --git a/third_party/blink/renderer/core/editing/markers/suggestion_marker_list_impl.cc b/third_party/blink/renderer/core/editing/markers/suggestion_marker_list_impl.cc
index 3e02a14d..12300ae9 100644
--- a/third_party/blink/renderer/core/editing/markers/suggestion_marker_list_impl.cc
+++ b/third_party/blink/renderer/core/editing/markers/suggestion_marker_list_impl.cc
@@ -34,7 +34,7 @@
   // Text inserted/replaced immediately after the marker, remove marker if first
   // character is a (Unicode) letter or digit
   if (offset == marker_end && new_length > 0) {
-    if (WTF::Unicode::IsAlphanumeric(GetCodePointAt(node_text, offset)))
+    if (WTF::unicode::IsAlphanumeric(GetCodePointAt(node_text, offset)))
       return {};
     return marker.ComputeOffsetsAfterShift(offset, old_length, new_length);
   }
@@ -42,7 +42,7 @@
   // Text inserted/replaced immediately before the marker, remove marker if
   // first character is a (Unicode) letter or digit
   if (offset == marker_start && new_length > 0) {
-    if (WTF::Unicode::IsAlphanumeric(
+    if (WTF::unicode::IsAlphanumeric(
             GetCodePointAt(node_text, offset + new_length - 1)))
       return {};
     return marker.ComputeOffsetsAfterShift(offset, old_length, new_length);
diff --git a/third_party/blink/renderer/core/editing/spellcheck/spell_checker.cc b/third_party/blink/renderer/core/editing/spellcheck/spell_checker.cc
index c1e5afe..403873172 100644
--- a/third_party/blink/renderer/core/editing/spellcheck/spell_checker.cc
+++ b/third_party/blink/renderer/core/editing/spellcheck/spell_checker.cc
@@ -62,7 +62,7 @@
 namespace {
 
 static bool IsWhiteSpaceOrPunctuation(UChar c) {
-  return IsSpaceOrNewline(c) || WTF::Unicode::IsPunct(c);
+  return IsSpaceOrNewline(c) || WTF::unicode::IsPunct(c);
 }
 
 bool IsAmbiguousBoundaryCharacter(UChar character) {
diff --git a/third_party/blink/renderer/core/editing/state_machines/backward_grapheme_boundary_state_machine.cc b/third_party/blink/renderer/core/editing/state_machines/backward_grapheme_boundary_state_machine.cc
index 5be73a1c..694542f 100644
--- a/third_party/blink/renderer/core/editing/state_machines/backward_grapheme_boundary_state_machine.cc
+++ b/third_party/blink/renderer/core/editing/state_machines/backward_grapheme_boundary_state_machine.cc
@@ -14,7 +14,7 @@
 namespace blink {
 
 namespace {
-const UChar32 kInvalidCodePoint = WTF::Unicode::kMaxCodepoint + 1;
+const UChar32 kInvalidCodePoint = WTF::unicode::kMaxCodepoint + 1;
 }  // namespace
 
 #define FOR_EACH_BACKWARD_GRAPHEME_BOUNDARY_STATE(V)                         \
diff --git a/third_party/blink/renderer/core/editing/state_machines/backward_grapheme_boundary_state_machine_test.cc b/third_party/blink/renderer/core/editing/state_machines/backward_grapheme_boundary_state_machine_test.cc
index a6e1c6b1..ca89508 100644
--- a/third_party/blink/renderer/core/editing/state_machines/backward_grapheme_boundary_state_machine_test.cc
+++ b/third_party/blink/renderer/core/editing/state_machines/backward_grapheme_boundary_state_machine_test.cc
@@ -20,7 +20,7 @@
 
 // kWatch kVS16, kEye kVS16 are valid standardized variants.
 const UChar32 kWatch = 0x231A;
-const UChar32 kEye = WTF::Unicode::kEyeCharacter;
+const UChar32 kEye = WTF::unicode::kEyeCharacter;
 const UChar32 kVS16 = 0xFE0F;
 
 // kHanBMP KVS17, kHanSIP kVS17 are valie IVD sequences.
@@ -317,10 +317,10 @@
 }
 
 TEST_F(BackwardGraphemeBoundaryStatemachineTest, MuchLongerCase) {
-  const UChar32 kMan = WTF::Unicode::kManCharacter;
-  const UChar32 kZwj = WTF::Unicode::kZeroWidthJoinerCharacter;
-  const UChar32 kHeart = WTF::Unicode::kHeavyBlackHeartCharacter;
-  const UChar32 kKiss = WTF::Unicode::kKissMarkCharacter;
+  const UChar32 kMan = WTF::unicode::kManCharacter;
+  const UChar32 kZwj = WTF::unicode::kZeroWidthJoinerCharacter;
+  const UChar32 kHeart = WTF::unicode::kHeavyBlackHeartCharacter;
+  const UChar32 kKiss = WTF::unicode::kKissMarkCharacter;
 
   BackwardGraphemeBoundaryStateMachine machine;
 
diff --git a/third_party/blink/renderer/core/editing/state_machines/forward_grapheme_boundary_state_machine.cc b/third_party/blink/renderer/core/editing/state_machines/forward_grapheme_boundary_state_machine.cc
index 9293ebf..a02dd222 100644
--- a/third_party/blink/renderer/core/editing/state_machines/forward_grapheme_boundary_state_machine.cc
+++ b/third_party/blink/renderer/core/editing/state_machines/forward_grapheme_boundary_state_machine.cc
@@ -12,7 +12,7 @@
 
 namespace blink {
 namespace {
-const UChar32 kUnsetCodePoint = WTF::Unicode::kMaxCodepoint + 1;
+const UChar32 kUnsetCodePoint = WTF::unicode::kMaxCodepoint + 1;
 }  // namespace
 
 #define FOR_EACH_FORWARD_GRAPHEME_BOUNDARY_STATE(V)                    \
diff --git a/third_party/blink/renderer/core/editing/state_machines/forward_grapheme_boundary_state_machine_test.cc b/third_party/blink/renderer/core/editing/state_machines/forward_grapheme_boundary_state_machine_test.cc
index 4a4753b..f12b603f 100644
--- a/third_party/blink/renderer/core/editing/state_machines/forward_grapheme_boundary_state_machine_test.cc
+++ b/third_party/blink/renderer/core/editing/state_machines/forward_grapheme_boundary_state_machine_test.cc
@@ -23,7 +23,7 @@
 
 // kWatch kVS16, kEye kVS16 are valid standardized variants.
 const UChar32 kWatch = 0x231A;
-const UChar32 kEye = WTF::Unicode::kEyeCharacter;
+const UChar32 kEye = WTF::unicode::kEyeCharacter;
 const UChar32 kVS16 = 0xFE0F;
 
 // kHanBMP KVS17, kHanSIP kVS17 are valie IVD sequences.
@@ -465,10 +465,10 @@
 TEST_F(ForwardGraphemeBoundaryStatemachineTest, MuchLongerCase) {
   ForwardGraphemeBoundaryStateMachine machine;
 
-  const UChar32 kMan = WTF::Unicode::kManCharacter;
-  const UChar32 kZwj = WTF::Unicode::kZeroWidthJoinerCharacter;
-  const UChar32 kHeart = WTF::Unicode::kHeavyBlackHeartCharacter;
-  const UChar32 kKiss = WTF::Unicode::kKissMarkCharacter;
+  const UChar32 kMan = WTF::unicode::kManCharacter;
+  const UChar32 kZwj = WTF::unicode::kZeroWidthJoinerCharacter;
+  const UChar32 kHeart = WTF::unicode::kHeavyBlackHeartCharacter;
+  const UChar32 kKiss = WTF::unicode::kKissMarkCharacter;
 
   // U+1F468 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468 is a valid ZWJ
   // emoji sequence.
diff --git a/third_party/blink/renderer/core/editing/state_machines/state_machine_util_test.cc b/third_party/blink/renderer/core/editing/state_machines/state_machine_util_test.cc
index 047744e..3a1c5875 100644
--- a/third_party/blink/renderer/core/editing/state_machines/state_machine_util_test.cc
+++ b/third_party/blink/renderer/core/editing/state_machines/state_machine_util_test.cc
@@ -12,7 +12,7 @@
 
 TEST(StateMachineUtilTest, IsGraphmeBreak_LineBreak) {
   // U+000AD (SOFT HYPHEN) has Control grapheme property.
-  const UChar32 kControl = WTF::Unicode::kSoftHyphenCharacter;
+  const UChar32 kControl = WTF::unicode::kSoftHyphenCharacter;
 
   // Grapheme Cluster Boundary Rule GB3: CR x LF
   EXPECT_FALSE(IsGraphemeBreak('\r', '\n'));
@@ -82,14 +82,14 @@
   const UChar32 kExtend = 0x0300;
   // Grapheme Cluster Boundary Rule GB9: x (Extend | ZWJ)
   EXPECT_FALSE(IsGraphemeBreak('a', kExtend));
-  EXPECT_FALSE(IsGraphemeBreak('a', WTF::Unicode::kZeroWidthJoinerCharacter));
+  EXPECT_FALSE(IsGraphemeBreak('a', WTF::unicode::kZeroWidthJoinerCharacter));
   EXPECT_FALSE(IsGraphemeBreak(kExtend, kExtend));
-  EXPECT_FALSE(IsGraphemeBreak(WTF::Unicode::kZeroWidthJoinerCharacter,
-                               WTF::Unicode::kZeroWidthJoinerCharacter));
+  EXPECT_FALSE(IsGraphemeBreak(WTF::unicode::kZeroWidthJoinerCharacter,
+                               WTF::unicode::kZeroWidthJoinerCharacter));
   EXPECT_FALSE(
-      IsGraphemeBreak(kExtend, WTF::Unicode::kZeroWidthJoinerCharacter));
+      IsGraphemeBreak(kExtend, WTF::unicode::kZeroWidthJoinerCharacter));
   EXPECT_FALSE(
-      IsGraphemeBreak(WTF::Unicode::kZeroWidthJoinerCharacter, kExtend));
+      IsGraphemeBreak(WTF::unicode::kZeroWidthJoinerCharacter, kExtend));
 }
 
 TEST(StateMachineUtilTest, IsGraphmeBreak_SpacingMark) {
@@ -137,17 +137,17 @@
 
   // Grapheme Cluster Boundary Rule GB11: ZWJ x (Glue_After_Zwj | EBG)
   EXPECT_FALSE(
-      IsGraphemeBreak(WTF::Unicode::kZeroWidthJoinerCharacter, kGlueAfterZwj));
+      IsGraphemeBreak(WTF::unicode::kZeroWidthJoinerCharacter, kGlueAfterZwj));
   EXPECT_FALSE(
-      IsGraphemeBreak(WTF::Unicode::kZeroWidthJoinerCharacter, kEBaseGAZ));
+      IsGraphemeBreak(WTF::unicode::kZeroWidthJoinerCharacter, kEBaseGAZ));
   EXPECT_FALSE(
-      IsGraphemeBreak(WTF::Unicode::kZeroWidthJoinerCharacter, kEmoji));
+      IsGraphemeBreak(WTF::unicode::kZeroWidthJoinerCharacter, kEmoji));
 
   EXPECT_TRUE(IsGraphemeBreak(kGlueAfterZwj, kEBaseGAZ));
   EXPECT_TRUE(IsGraphemeBreak(kGlueAfterZwj, kGlueAfterZwj));
   EXPECT_TRUE(IsGraphemeBreak(kEBaseGAZ, kGlueAfterZwj));
 
-  EXPECT_TRUE(IsGraphemeBreak(WTF::Unicode::kZeroWidthJoinerCharacter, 'a'));
+  EXPECT_TRUE(IsGraphemeBreak(WTF::unicode::kZeroWidthJoinerCharacter, 'a'));
 }
 
 TEST(StateMachineUtilTest, IsGraphmeBreak_IndicSyllabicCategoryVirama) {
diff --git a/third_party/blink/renderer/core/editing/visible_units_word.cc b/third_party/blink/renderer/core/editing/visible_units_word.cc
index f2415f7..ae72f1b 100644
--- a/third_party/blink/renderer/core/editing/visible_units_word.cc
+++ b/third_party/blink/renderer/core/editing/visible_units_word.cc
@@ -100,7 +100,7 @@
         // We stop searching when the character preceding the break is
         // alphanumeric or underscore.
         if (static_cast<unsigned>(runner) < text.length() &&
-            (WTF::Unicode::IsAlphanumeric(text[runner - 1]) ||
+            (WTF::unicode::IsAlphanumeric(text[runner - 1]) ||
              text[runner - 1] == kLowLineCharacter))
           return Position::After(runner - 1);
       }
@@ -126,7 +126,7 @@
            runner = it->preceding(runner)) {
         // We stop searching when the character following the break is
         // alphanumeric or underscore.
-        if (runner && (WTF::Unicode::IsAlphanumeric(text[runner]) ||
+        if (runner && (WTF::unicode::IsAlphanumeric(text[runner]) ||
                        text[runner] == kLowLineCharacter))
           return Position::Before(runner);
       }
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc
index c4d83a2..27b36e576 100644
--- a/third_party/blink/renderer/core/execution_context/execution_context.cc
+++ b/third_party/blink/renderer/core/execution_context/execution_context.cc
@@ -51,7 +51,7 @@
       is_context_paused_(false),
       is_context_destroyed_(false),
       window_interaction_tokens_(0),
-      referrer_policy_(kReferrerPolicyDefault),
+      referrer_policy_(network::mojom::ReferrerPolicy::kDefault),
       invalidator_(std::make_unique<InterfaceInvalidator>()) {}
 
 ExecutionContext::~ExecutionContext() = default;
@@ -212,7 +212,7 @@
 
 void ExecutionContext::ParseAndSetReferrerPolicy(const String& policies,
                                                  bool support_legacy_keywords) {
-  ReferrerPolicy referrer_policy;
+  network::mojom::ReferrerPolicy referrer_policy;
 
   if (!SecurityPolicy::ReferrerPolicyFromHeaderValue(
           policies,
@@ -237,11 +237,12 @@
   SetReferrerPolicy(referrer_policy);
 }
 
-void ExecutionContext::SetReferrerPolicy(ReferrerPolicy referrer_policy) {
+void ExecutionContext::SetReferrerPolicy(
+    network::mojom::ReferrerPolicy referrer_policy) {
   // When a referrer policy has already been set, the latest value takes
   // precedence.
   UseCounter::Count(this, WebFeature::kSetReferrerPolicy);
-  if (referrer_policy_ != kReferrerPolicyDefault)
+  if (referrer_policy_ != network::mojom::ReferrerPolicy::kDefault)
     UseCounter::Count(this, WebFeature::kResetReferrerPolicy);
 
   referrer_policy_ = referrer_policy;
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h
index 3dc9cbf..25d0d377 100644
--- a/third_party/blink/renderer/core/execution_context/execution_context.h
+++ b/third_party/blink/renderer/core/execution_context/execution_context.h
@@ -33,6 +33,7 @@
 #include "base/location.h"
 #include "base/macros.h"
 #include "base/unguessable_token.h"
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/renderer/bindings/core/v8/sanitize_script_errors.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/context_lifecycle_notifier.h"
@@ -40,7 +41,6 @@
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/loader/fetch/https_state.h"
 #include "third_party/blink/renderer/platform/supplementable.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "v8/include/v8.h"
 
 namespace base {
@@ -238,8 +238,10 @@
   // parsed as valid policies.
   void ParseAndSetReferrerPolicy(const String& policies,
                                  bool support_legacy_keywords = false);
-  void SetReferrerPolicy(ReferrerPolicy);
-  virtual ReferrerPolicy GetReferrerPolicy() const { return referrer_policy_; }
+  void SetReferrerPolicy(network::mojom::ReferrerPolicy);
+  virtual network::mojom::ReferrerPolicy GetReferrerPolicy() const {
+    return referrer_policy_;
+  }
 
   virtual CoreProbeSink* GetProbeSink() { return nullptr; }
 
@@ -276,7 +278,7 @@
   // increment and decrement the counter.
   int window_interaction_tokens_;
 
-  ReferrerPolicy referrer_policy_;
+  network::mojom::ReferrerPolicy referrer_policy_;
 
   std::unique_ptr<InterfaceInvalidator> invalidator_;
 
diff --git a/third_party/blink/renderer/core/exported/web_document.cc b/third_party/blink/renderer/core/exported/web_document.cc
index c19761a..1c09baa 100644
--- a/third_party/blink/renderer/core/exported/web_document.cc
+++ b/third_party/blink/renderer/core/exported/web_document.cc
@@ -233,8 +233,7 @@
 }
 
 network::mojom::ReferrerPolicy WebDocument::GetReferrerPolicy() const {
-  return static_cast<network::mojom::ReferrerPolicy>(
-      ConstUnwrap<Document>()->GetReferrerPolicy());
+  return ConstUnwrap<Document>()->GetReferrerPolicy();
 }
 
 WebString WebDocument::OutgoingReferrer() {
diff --git a/third_party/blink/renderer/core/exported/web_history_item.cc b/third_party/blink/renderer/core/exported/web_history_item.cc
index 4610a9e..a67d23e 100644
--- a/third_party/blink/renderer/core/exported/web_history_item.cc
+++ b/third_party/blink/renderer/core/exported/web_history_item.cc
@@ -71,15 +71,13 @@
 }
 
 network::mojom::ReferrerPolicy WebHistoryItem::GetReferrerPolicy() const {
-  return static_cast<network::mojom::ReferrerPolicy>(
-      private_->GetReferrer().referrer_policy);
+  return private_->GetReferrer().referrer_policy;
 }
 
 void WebHistoryItem::SetReferrer(
     const WebString& referrer,
     network::mojom::ReferrerPolicy referrer_policy) {
-  private_->SetReferrer(
-      Referrer(referrer, static_cast<ReferrerPolicy>(referrer_policy)));
+  private_->SetReferrer(Referrer(referrer, referrer_policy));
 }
 
 const WebString& WebHistoryItem::Target() const {
diff --git a/third_party/blink/renderer/core/exported/web_security_policy.cc b/third_party/blink/renderer/core/exported/web_security_policy.cc
index 732fb8ec..88d753e 100644
--- a/third_party/blink/renderer/core/exported/web_security_policy.cc
+++ b/third_party/blink/renderer/core/exported/web_security_policy.cc
@@ -112,8 +112,7 @@
     network::mojom::ReferrerPolicy referrer_policy,
     const WebURL& url,
     const WebString& referrer) {
-  return SecurityPolicy::GenerateReferrer(
-             static_cast<ReferrerPolicy>(referrer_policy), url, referrer)
+  return SecurityPolicy::GenerateReferrer(referrer_policy, url, referrer)
       .referrer;
 }
 
diff --git a/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc b/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc
index 201d885..9de43de6 100644
--- a/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc
@@ -307,7 +307,8 @@
 
   ContentSecurityPolicy* content_security_policy =
       main_script_loader_->GetContentSecurityPolicy();
-  ReferrerPolicy referrer_policy = kReferrerPolicyDefault;
+  network::mojom::ReferrerPolicy referrer_policy =
+      network::mojom::ReferrerPolicy::kDefault;
   if (!main_script_loader_->GetReferrerPolicy().IsNull()) {
     SecurityPolicy::ReferrerPolicyFromHeaderValue(
         main_script_loader_->GetReferrerPolicy(),
diff --git a/third_party/blink/renderer/core/fetch/DEPS b/third_party/blink/renderer/core/fetch/DEPS
index 30dcb36..3c497b0 100644
--- a/third_party/blink/renderer/core/fetch/DEPS
+++ b/third_party/blink/renderer/core/fetch/DEPS
@@ -4,5 +4,4 @@
     "+mojo/public/cpp/bindings/binding_set.h",
     "+mojo/public/cpp/system/data_pipe.h",
     "+mojo/public/cpp/system/simple_watcher.h",
-    "+services/network/public/mojom",
 ]
diff --git a/third_party/blink/renderer/core/fetch/fetch_request_data.cc b/third_party/blink/renderer/core/fetch/fetch_request_data.cc
index 83ff752..28ef8e1 100644
--- a/third_party/blink/renderer/core/fetch/fetch_request_data.cc
+++ b/third_party/blink/renderer/core/fetch/fetch_request_data.cc
@@ -49,8 +49,7 @@
   }
   request->SetContext(web_request.GetRequestContext());
   request->SetReferrerString(web_request.ReferrerUrl().GetString());
-  request->SetReferrerPolicy(
-      static_cast<ReferrerPolicy>(web_request.GetReferrerPolicy()));
+  request->SetReferrerPolicy(web_request.GetReferrerPolicy());
   request->SetMode(web_request.Mode());
   request->SetCredentials(web_request.CredentialsMode());
   request->SetCacheMode(web_request.CacheMode());
@@ -90,8 +89,7 @@
   if (fetch_api_request.referrer) {
     if (!fetch_api_request.referrer->url.IsEmpty())
       request->SetReferrerString(AtomicString(fetch_api_request.referrer->url));
-    request->SetReferrerPolicy(
-        static_cast<ReferrerPolicy>(fetch_api_request.referrer->policy));
+    request->SetReferrerPolicy(fetch_api_request.referrer->policy);
   }
   request->SetMode(fetch_api_request.mode);
   request->SetCredentials(fetch_api_request.credentials_mode);
@@ -170,7 +168,7 @@
       context_(mojom::RequestContextType::UNSPECIFIED),
       same_origin_data_url_flag_(false),
       referrer_string_(Referrer::ClientReferrerString()),
-      referrer_policy_(kReferrerPolicyDefault),
+      referrer_policy_(network::mojom::ReferrerPolicy::kDefault),
       mode_(network::mojom::FetchRequestMode::kNoCors),
       credentials_(network::mojom::FetchCredentialsMode::kOmit),
       cache_mode_(mojom::FetchCacheMode::kDefault),
diff --git a/third_party/blink/renderer/core/fetch/fetch_request_data.h b/third_party/blink/renderer/core/fetch/fetch_request_data.h
index 485bed1..1db691f 100644
--- a/third_party/blink/renderer/core/fetch/fetch_request_data.h
+++ b/third_party/blink/renderer/core/fetch/fetch_request_data.h
@@ -9,6 +9,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/unguessable_token.h"
 #include "services/network/public/mojom/fetch_api.mojom-blink.h"
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "services/network/public/mojom/url_loader_factory.mojom-blink.h"
 #include "third_party/blink/public/platform/modules/fetch/fetch_api_request.mojom-blink.h"
 #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_request.h"
@@ -18,7 +19,6 @@
 #include "third_party/blink/renderer/platform/loader/fetch/resource_load_priority.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/blink/renderer/platform/weborigin/referrer.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
@@ -63,8 +63,12 @@
   }
   const AtomicString& ReferrerString() const { return referrer_string_; }
   void SetReferrerString(const AtomicString& s) { referrer_string_ = s; }
-  ReferrerPolicy GetReferrerPolicy() const { return referrer_policy_; }
-  void SetReferrerPolicy(ReferrerPolicy p) { referrer_policy_ = p; }
+  network::mojom::ReferrerPolicy GetReferrerPolicy() const {
+    return referrer_policy_;
+  }
+  void SetReferrerPolicy(network::mojom::ReferrerPolicy p) {
+    referrer_policy_ = p;
+  }
   void SetMode(network::mojom::FetchRequestMode mode) { mode_ = mode; }
   network::mojom::FetchRequestMode Mode() const { return mode_; }
   void SetCredentials(network::mojom::FetchCredentialsMode credentials) {
@@ -128,7 +132,7 @@
   // FIXME: Support m_forceOriginHeaderFlag;
   bool same_origin_data_url_flag_;
   AtomicString referrer_string_;
-  ReferrerPolicy referrer_policy_;
+  network::mojom::ReferrerPolicy referrer_policy_;
   // FIXME: Support m_authenticationFlag;
   // FIXME: Support m_synchronousFlag;
   network::mojom::FetchRequestMode mode_;
diff --git a/third_party/blink/renderer/core/fetch/request.cc b/third_party/blink/renderer/core/fetch/request.cc
index 392828d..fba853a 100644
--- a/third_party/blink/renderer/core/fetch/request.cc
+++ b/third_party/blink/renderer/core/fetch/request.cc
@@ -290,7 +290,7 @@
     request->SetReferrerString(AtomicString(Referrer::ClientReferrerString()));
 
     // "Set |request|’s referrer policy to the empty string."
-    request->SetReferrerPolicy(kReferrerPolicyDefault);
+    request->SetReferrerPolicy(network::mojom::ReferrerPolicy::kDefault);
   }
 
   // "If init’s referrer member is present, then:"
@@ -342,13 +342,13 @@
   if (init->hasReferrerPolicy()) {
     // In case referrerPolicy = "", the SecurityPolicy method below will not
     // actually set referrer_policy, so we'll default to
-    // kReferrerPolicyDefault.
-    ReferrerPolicy referrer_policy;
+    // network::mojom::ReferrerPolicy::kDefault.
+    network::mojom::ReferrerPolicy referrer_policy;
     if (!SecurityPolicy::ReferrerPolicyFromString(
             init->referrerPolicy(), kDoNotSupportReferrerPolicyLegacyKeywords,
             &referrer_policy)) {
       DCHECK(init->referrerPolicy().IsEmpty());
-      referrer_policy = kReferrerPolicyDefault;
+      referrer_policy = network::mojom::ReferrerPolicy::kDefault;
     }
 
     request->SetReferrerPolicy(referrer_policy);
@@ -749,23 +749,24 @@
 
 String Request::getReferrerPolicy() const {
   switch (request_->GetReferrerPolicy()) {
-    case kReferrerPolicyAlways:
+    case network::mojom::ReferrerPolicy::kAlways:
       return "unsafe-url";
-    case kReferrerPolicyDefault:
+    case network::mojom::ReferrerPolicy::kDefault:
       return "";
-    case kReferrerPolicyNoReferrerWhenDowngrade:
+    case network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade:
       return "no-referrer-when-downgrade";
-    case kReferrerPolicyNever:
+    case network::mojom::ReferrerPolicy::kNever:
       return "no-referrer";
-    case kReferrerPolicyOrigin:
+    case network::mojom::ReferrerPolicy::kOrigin:
       return "origin";
-    case kReferrerPolicyOriginWhenCrossOrigin:
+    case network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin:
       return "origin-when-cross-origin";
-    case kReferrerPolicySameOrigin:
+    case network::mojom::ReferrerPolicy::kSameOrigin:
       return "same-origin";
-    case kReferrerPolicyStrictOrigin:
+    case network::mojom::ReferrerPolicy::kStrictOrigin:
       return "strict-origin";
-    case kReferrerPolicyStrictOriginWhenCrossOrigin:
+    case network::mojom::ReferrerPolicy::
+        kNoReferrerWhenDowngradeOriginWhenCrossOrigin:
       return "strict-origin-when-cross-origin";
   }
   NOTREACHED();
@@ -929,8 +930,7 @@
   if (!request_->ReferrerString().IsEmpty()) {
     fetch_api_request->referrer =
         mojom::blink::Referrer::New(KURL(NullURL(), request_->ReferrerString()),
-                                    static_cast<network::mojom::ReferrerPolicy>(
-                                        request_->GetReferrerPolicy()));
+                                    request_->GetReferrerPolicy());
     DCHECK(fetch_api_request->referrer->url.IsValid());
   }
   // FIXME: How can we set isReload properly? What is the correct place to load
diff --git a/third_party/blink/renderer/core/html/BUILD.gn b/third_party/blink/renderer/core/html/BUILD.gn
index 24cd814..483f737a 100644
--- a/third_party/blink/renderer/core/html/BUILD.gn
+++ b/third_party/blink/renderer/core/html/BUILD.gn
@@ -56,6 +56,8 @@
     "custom/custom_element_descriptor_hash.h",
     "custom/custom_element_disconnected_callback_reaction.cc",
     "custom/custom_element_disconnected_callback_reaction.h",
+    "custom/custom_element_form_associated_callback_reaction.cc",
+    "custom/custom_element_form_associated_callback_reaction.h",
     "custom/custom_element_reaction.cc",
     "custom/custom_element_reaction.h",
     "custom/custom_element_reaction_queue.cc",
diff --git a/third_party/blink/renderer/core/html/custom/custom_element.cc b/third_party/blink/renderer/core/html/custom/custom_element.cc
index 1aedc71..372e3ec5 100644
--- a/third_party/blink/renderer/core/html/custom/custom_element.cc
+++ b/third_party/blink/renderer/core/html/custom/custom_element.cc
@@ -9,6 +9,7 @@
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/html/custom/ce_reactions_scope.h"
 #include "third_party/blink/renderer/core/html/custom/custom_element_definition.h"
+#include "third_party/blink/renderer/core/html/custom/custom_element_form_associated_callback_reaction.h"
 #include "third_party/blink/renderer/core/html/custom/custom_element_reaction_stack.h"
 #include "third_party/blink/renderer/core/html/custom/custom_element_registry.h"
 #include "third_party/blink/renderer/core/html/custom/v0_custom_element.h"
@@ -261,6 +262,17 @@
                                                 new_value);
 }
 
+void CustomElement::EnqueueFormAssociatedCallback(
+    Element& element,
+    HTMLFormElement* nullable_form) {
+  auto* definition = DefinitionForElementWithoutCheck(element);
+  if (definition->HasFormAssociatedCallback()) {
+    Enqueue(&element,
+            MakeGarbageCollected<CustomElementFormAssociatedCallbackReaction>(
+                definition, nullable_form));
+  }
+}
+
 void CustomElement::TryToUpgrade(Element* element,
                                  bool upgrade_invisible_elements) {
   // Try to upgrade an element
diff --git a/third_party/blink/renderer/core/html/custom/custom_element.h b/third_party/blink/renderer/core/html/custom/custom_element.h
index a0eb6747..a7ce7c32 100644
--- a/third_party/blink/renderer/core/html/custom/custom_element.h
+++ b/third_party/blink/renderer/core/html/custom/custom_element.h
@@ -18,6 +18,7 @@
 class Document;
 class Element;
 class HTMLElement;
+class HTMLFormElement;
 class QualifiedName;
 class CustomElementDefinition;
 class CustomElementReaction;
@@ -103,6 +104,8 @@
                                               const QualifiedName&,
                                               const AtomicString& old_value,
                                               const AtomicString& new_value);
+  static void EnqueueFormAssociatedCallback(Element& element,
+                                            HTMLFormElement* nullable_form);
 
   static void TryToUpgrade(Element*, bool upgrade_invisible_elements = false);
 
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_form_associated_callback_reaction.cc b/third_party/blink/renderer/core/html/custom/custom_element_form_associated_callback_reaction.cc
new file mode 100644
index 0000000..dc77d5c
--- /dev/null
+++ b/third_party/blink/renderer/core/html/custom/custom_element_form_associated_callback_reaction.cc
@@ -0,0 +1,30 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/core/html/custom/custom_element_form_associated_callback_reaction.h"
+
+#include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/core/html/custom/custom_element_definition.h"
+#include "third_party/blink/renderer/core/html/forms/html_form_element.h"
+
+namespace blink {
+
+CustomElementFormAssociatedCallbackReaction::
+    CustomElementFormAssociatedCallbackReaction(
+        CustomElementDefinition* definition,
+        HTMLFormElement* nullable_form)
+    : CustomElementReaction(definition), form_(nullable_form) {
+  DCHECK(definition->HasFormAssociatedCallback());
+}
+
+void CustomElementFormAssociatedCallbackReaction::Trace(Visitor* visitor) {
+  visitor->Trace(form_);
+  CustomElementReaction::Trace(visitor);
+}
+
+void CustomElementFormAssociatedCallbackReaction::Invoke(Element* element) {
+  definition_->RunFormAssociatedCallback(element, form_.Get());
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_form_associated_callback_reaction.h b/third_party/blink/renderer/core/html/custom/custom_element_form_associated_callback_reaction.h
new file mode 100644
index 0000000..01d1d1b
--- /dev/null
+++ b/third_party/blink/renderer/core/html/custom/custom_element_form_associated_callback_reaction.h
@@ -0,0 +1,32 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_HTML_CUSTOM_CUSTOM_ELEMENT_FORM_ASSOCIATED_CALLBACK_REACTION_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_CUSTOM_CUSTOM_ELEMENT_FORM_ASSOCIATED_CALLBACK_REACTION_H_
+
+#include "base/macros.h"
+#include "third_party/blink/renderer/core/html/custom/custom_element_reaction.h"
+
+namespace blink {
+
+class HTMLFormElement;
+
+class CustomElementFormAssociatedCallbackReaction final
+    : public CustomElementReaction {
+ public:
+  CustomElementFormAssociatedCallbackReaction(CustomElementDefinition*,
+                                              HTMLFormElement* nullable_form);
+  void Trace(Visitor*) override;
+
+ private:
+  void Invoke(Element*) override;
+
+  Member<HTMLFormElement> form_;
+
+  DISALLOW_COPY_AND_ASSIGN(CustomElementFormAssociatedCallbackReaction);
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_HTML_CUSTOM_CUSTOM_ELEMENT_FORM_ASSOCIATED_CALLBACK_REACTION_H_
diff --git a/third_party/blink/renderer/core/html/custom/element_internals.cc b/third_party/blink/renderer/core/html/custom/element_internals.cc
index 9bdbf4d..2ba13cd 100644
--- a/third_party/blink/renderer/core/html/custom/element_internals.cc
+++ b/third_party/blink/renderer/core/html/custom/element_internals.cc
@@ -6,6 +6,7 @@
 
 #include "third_party/blink/renderer/core/dom/node_lists_node_data.h"
 #include "third_party/blink/renderer/core/fileapi/file.h"
+#include "third_party/blink/renderer/core/html/custom/custom_element.h"
 #include "third_party/blink/renderer/core/html/forms/form_data.h"
 #include "third_party/blink/renderer/core/html/forms/html_form_element.h"
 #include "third_party/blink/renderer/core/html/html_element.h"
@@ -94,4 +95,9 @@
   }
 }
 
+void ElementInternals::DidChangeForm() {
+  ListedElement::DidChangeForm();
+  CustomElement::EnqueueFormAssociatedCallback(Target(), form());
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/custom/element_internals.h b/third_party/blink/renderer/core/html/custom/element_internals.h
index 1d1b7e7..b8ef3db 100644
--- a/third_party/blink/renderer/core/html/custom/element_internals.h
+++ b/third_party/blink/renderer/core/html/custom/element_internals.h
@@ -36,6 +36,7 @@
   bool IsElementInternals() const override;
   bool IsEnumeratable() const override;
   void AppendToFormData(FormData& form_data) override;
+  void DidChangeForm() override;
 
   Member<HTMLElement> target_;
 
diff --git a/third_party/blink/renderer/core/html/forms/date_time_edit_element.cc b/third_party/blink/renderer/core/html/forms/date_time_edit_element.cc
index ad829d07..3fc5fed2a 100644
--- a/third_party/blink/renderer/core/html/forms/date_time_edit_element.cc
+++ b/third_party/blink/renderer/core/html/forms/date_time_edit_element.cc
@@ -467,10 +467,10 @@
   HTMLDivElement* element = HTMLDivElement::Create(EditElement().GetDocument());
   element->SetShadowPseudoId(text_pseudo_id);
   if (parameters_.locale.IsRTL() && text.length()) {
-    WTF::Unicode::CharDirection dir = WTF::Unicode::Direction(text[0]);
-    if (dir == WTF::Unicode::kSegmentSeparator ||
-        dir == WTF::Unicode::kWhiteSpaceNeutral ||
-        dir == WTF::Unicode::kOtherNeutral)
+    WTF::unicode::CharDirection dir = WTF::unicode::Direction(text[0]);
+    if (dir == WTF::unicode::kSegmentSeparator ||
+        dir == WTF::unicode::kWhiteSpaceNeutral ||
+        dir == WTF::unicode::kOtherNeutral)
       element->AppendChild(Text::Create(EditElement().GetDocument(),
                                         String(&kRightToLeftMarkCharacter, 1)));
   }
diff --git a/third_party/blink/renderer/core/html/forms/date_time_numeric_field_element.cc b/third_party/blink/renderer/core/html/forms/date_time_numeric_field_element.cc
index d27d52b..7c75952 100644
--- a/third_party/blink/renderer/core/html/forms/date_time_numeric_field_element.cc
+++ b/third_party/blink/renderer/core/html/forms/date_time_numeric_field_element.cc
@@ -65,11 +65,11 @@
   // We show a direction-neutral string such as "--" as a placeholder. It
   // should follow the direction of numeric values.
   if (LocaleForOwner().IsRTL()) {
-    WTF::Unicode::CharDirection dir =
-        WTF::Unicode::Direction(FormatValue(Maximum())[0]);
-    if (dir == WTF::Unicode::kLeftToRight ||
-        dir == WTF::Unicode::kEuropeanNumber ||
-        dir == WTF::Unicode::kArabicNumber) {
+    WTF::unicode::CharDirection dir =
+        WTF::unicode::Direction(FormatValue(Maximum())[0]);
+    if (dir == WTF::unicode::kLeftToRight ||
+        dir == WTF::unicode::kEuropeanNumber ||
+        dir == WTF::unicode::kArabicNumber) {
       SetInlineStyleProperty(CSSPropertyUnicodeBidi, CSSValueBidiOverride);
       SetInlineStyleProperty(CSSPropertyDirection, CSSValueLtr);
     }
diff --git a/third_party/blink/renderer/core/html/forms/date_time_symbolic_field_element.cc b/third_party/blink/renderer/core/html/forms/date_time_symbolic_field_element.cc
index 53cdb010..3527679 100644
--- a/third_party/blink/renderer/core/html/forms/date_time_symbolic_field_element.cc
+++ b/third_party/blink/renderer/core/html/forms/date_time_symbolic_field_element.cc
@@ -78,7 +78,7 @@
   if (keyboard_event.type() != event_type_names::kKeypress)
     return;
 
-  const UChar char_code = WTF::Unicode::ToLower(keyboard_event.charCode());
+  const UChar char_code = WTF::unicode::ToLower(keyboard_event.charCode());
   if (char_code < ' ')
     return;
 
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element.cc b/third_party/blink/renderer/core/html/forms/html_select_element.cc
index 6708e04..040fee3 100644
--- a/third_party/blink/renderer/core/html/forms/html_select_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_select_element.cc
@@ -1730,7 +1730,7 @@
     auto& keyboard_event = ToKeyboardEvent(event);
     if (!keyboard_event.ctrlKey() && !keyboard_event.altKey() &&
         !keyboard_event.metaKey() &&
-        WTF::Unicode::IsPrintableChar(keyboard_event.charCode())) {
+        WTF::unicode::IsPrintableChar(keyboard_event.charCode())) {
       TypeAheadFind(keyboard_event);
       event.SetDefaultHandled();
       return;
diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third_party/blink/renderer/core/html/html_anchor_element.cc
index 6d1649f..c55a66f 100644
--- a/third_party/blink/renderer/core/html/html_anchor_element.cc
+++ b/third_party/blink/renderer/core/html/html_anchor_element.cc
@@ -387,7 +387,7 @@
 
   ResourceRequest request(completed_url);
 
-  ReferrerPolicy policy;
+  network::mojom::ReferrerPolicy policy;
   if (hasAttribute(kReferrerpolicyAttr) &&
       SecurityPolicy::ReferrerPolicyFromString(
           FastGetAttribute(kReferrerpolicyAttr),
diff --git a/third_party/blink/renderer/core/html/html_frame_owner_element.cc b/third_party/blink/renderer/core/html/html_frame_owner_element.cc
index 7e6fb1e..aa0aaf7 100644
--- a/third_party/blink/renderer/core/html/html_frame_owner_element.cc
+++ b/third_party/blink/renderer/core/html/html_frame_owner_element.cc
@@ -387,7 +387,7 @@
     return false;
 
   ResourceRequest request(url.IsNull() ? BlankURL() : url);
-  ReferrerPolicy policy = ReferrerPolicyAttribute();
+  network::mojom::ReferrerPolicy policy = ReferrerPolicyAttribute();
   request.SetReferrerPolicy(policy);
 
   WebFrameLoadType child_load_type = WebFrameLoadType::kReplaceCurrentItem;
diff --git a/third_party/blink/renderer/core/html/html_frame_owner_element.h b/third_party/blink/renderer/core/html/html_frame_owner_element.h
index 243836d..e4f22d0c 100644
--- a/third_party/blink/renderer/core/html/html_frame_owner_element.h
+++ b/third_party/blink/renderer/core/html/html_frame_owner_element.h
@@ -169,8 +169,8 @@
 
   bool IsFrameOwnerElement() const final { return true; }
 
-  virtual ReferrerPolicy ReferrerPolicyAttribute() {
-    return kReferrerPolicyDefault;
+  virtual network::mojom::ReferrerPolicy ReferrerPolicyAttribute() {
+    return network::mojom::ReferrerPolicy::kDefault;
   }
 
   Member<Frame> content_frame_;
diff --git a/third_party/blink/renderer/core/html/html_iframe_element.cc b/third_party/blink/renderer/core/html/html_iframe_element.cc
index cc14614..2301338 100644
--- a/third_party/blink/renderer/core/html/html_iframe_element.cc
+++ b/third_party/blink/renderer/core/html/html_iframe_element.cc
@@ -46,7 +46,7 @@
     : HTMLFrameElementBase(kIFrameTag, document),
       collapsed_by_client_(false),
       sandbox_(HTMLIFrameElementSandbox::Create(this)),
-      referrer_policy_(kReferrerPolicyDefault) {}
+      referrer_policy_(network::mojom::ReferrerPolicy::kDefault) {}
 
 DEFINE_NODE_FACTORY(HTMLIFrameElement)
 
@@ -151,7 +151,7 @@
     }
     UseCounter::Count(GetDocument(), WebFeature::kSandboxViaIFrame);
   } else if (name == kReferrerpolicyAttr) {
-    referrer_policy_ = kReferrerPolicyDefault;
+    referrer_policy_ = network::mojom::ReferrerPolicy::kDefault;
     if (!value.IsNull()) {
       SecurityPolicy::ReferrerPolicyFromString(
           value, kSupportReferrerPolicyLegacyKeywords, &referrer_policy_);
@@ -314,7 +314,7 @@
   return true;
 }
 
-ReferrerPolicy HTMLIFrameElement::ReferrerPolicyAttribute() {
+network::mojom::ReferrerPolicy HTMLIFrameElement::ReferrerPolicyAttribute() {
   return referrer_policy_;
 }
 
diff --git a/third_party/blink/renderer/core/html/html_iframe_element.h b/third_party/blink/renderer/core/html/html_iframe_element.h
index 632239f..ece6e8a 100644
--- a/third_party/blink/renderer/core/html/html_iframe_element.h
+++ b/third_party/blink/renderer/core/html/html_iframe_element.h
@@ -78,7 +78,7 @@
 
   bool IsInteractiveContent() const override;
 
-  ReferrerPolicy ReferrerPolicyAttribute() override;
+  network::mojom::ReferrerPolicy ReferrerPolicyAttribute() override;
 
   // FrameOwner overrides:
   bool AllowFullscreen() const override { return allow_fullscreen_; }
@@ -94,7 +94,7 @@
   Member<HTMLIFrameElementSandbox> sandbox_;
   Member<Policy> policy_;
 
-  ReferrerPolicy referrer_policy_;
+  network::mojom::ReferrerPolicy referrer_policy_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/html_image_element.cc b/third_party/blink/renderer/core/html/html_image_element.cc
index b2ab5e3..eb8a7357 100644
--- a/third_party/blink/renderer/core/html/html_image_element.cc
+++ b/third_party/blink/renderer/core/html/html_image_element.cc
@@ -104,7 +104,7 @@
       is_fallback_image_(false),
       should_invert_color_(false),
       sizes_set_width_(false),
-      referrer_policy_(kReferrerPolicyDefault) {
+      referrer_policy_(network::mojom::ReferrerPolicy::kDefault) {
   SetHasCustomStyleCallbacks();
   if (media_element_parser_helpers::IsMediaElement(this) &&
       !document.IsFeatureEnabled(mojom::FeaturePolicyFeature::kUnsizedMedia)) {
@@ -287,7 +287,7 @@
   } else if (name == kUsemapAttr) {
     SetIsLink(!params.new_value.IsNull());
   } else if (name == kReferrerpolicyAttr) {
-    referrer_policy_ = kReferrerPolicyDefault;
+    referrer_policy_ = network::mojom::ReferrerPolicy::kDefault;
     if (!params.new_value.IsNull()) {
       SecurityPolicy::ReferrerPolicyFromString(
           params.new_value, kSupportReferrerPolicyLegacyKeywords,
diff --git a/third_party/blink/renderer/core/html/html_image_element.h b/third_party/blink/renderer/core/html/html_image_element.h
index c814792..63817bf 100644
--- a/third_party/blink/renderer/core/html/html_image_element.h
+++ b/third_party/blink/renderer/core/html/html_image_element.h
@@ -240,7 +240,7 @@
   bool sizes_set_width_;
   bool is_default_overridden_intrinsic_size_;
 
-  ReferrerPolicy referrer_policy_;
+  network::mojom::ReferrerPolicy referrer_policy_;
 
   IntSize overridden_intrinsic_size_;
 
diff --git a/third_party/blink/renderer/core/html/html_link_element.cc b/third_party/blink/renderer/core/html/html_link_element.cc
index 8ecd684..8b8de076 100644
--- a/third_party/blink/renderer/core/html/html_link_element.cc
+++ b/third_party/blink/renderer/core/html/html_link_element.cc
@@ -53,7 +53,7 @@
                                         const CreateElementFlags flags)
     : HTMLElement(kLinkTag, document),
       link_loader_(LinkLoader::Create(this)),
-      referrer_policy_(kReferrerPolicyDefault),
+      referrer_policy_(network::mojom::ReferrerPolicy::kDefault),
       sizes_(DOMTokenList::Create(*this, html_names::kSizesAttr)),
       rel_list_(RelList::Create(this)),
       created_by_parser_(flags.IsCreatedByParser()) {}
diff --git a/third_party/blink/renderer/core/html/html_link_element.h b/third_party/blink/renderer/core/html/html_link_element.h
index 8bedac4..89f69258 100644
--- a/third_party/blink/renderer/core/html/html_link_element.h
+++ b/third_party/blink/renderer/core/html/html_link_element.h
@@ -67,7 +67,9 @@
   String AsValue() const { return as_; }
   String IntegrityValue() const { return integrity_; }
   String ImportanceValue() const { return importance_; }
-  ReferrerPolicy GetReferrerPolicy() const { return referrer_policy_; }
+  network::mojom::ReferrerPolicy GetReferrerPolicy() const {
+    return referrer_policy_;
+  }
   const LinkRelAttribute& RelAttribute() const { return rel_attribute_; }
   DOMTokenList& relList() const {
     return static_cast<DOMTokenList&>(*rel_list_);
@@ -165,7 +167,7 @@
   String media_;
   String integrity_;
   String importance_;
-  ReferrerPolicy referrer_policy_;
+  network::mojom::ReferrerPolicy referrer_policy_;
   Member<DOMTokenList> sizes_;
   Vector<IntSize> icon_sizes_;
   TraceWrapperMember<RelList> rel_list_;
diff --git a/third_party/blink/renderer/core/html/imports/link_import.cc b/third_party/blink/renderer/core/html/imports/link_import.cc
index 5920d39..47e5978 100644
--- a/third_party/blink/renderer/core/html/imports/link_import.cc
+++ b/third_party/blink/renderer/core/html/imports/link_import.cc
@@ -30,6 +30,7 @@
 
 #include "third_party/blink/renderer/core/html/imports/link_import.h"
 
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/html/html_link_element.h"
 #include "third_party/blink/renderer/core/html/imports/html_import_child.h"
@@ -41,7 +42,6 @@
 #include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_request.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/weborigin/security_policy.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
 
@@ -79,7 +79,7 @@
   }
 
   ResourceRequest resource_request(GetDocument().CompleteURL(url));
-  ReferrerPolicy referrer_policy = owner_->GetReferrerPolicy();
+  network::mojom::ReferrerPolicy referrer_policy = owner_->GetReferrerPolicy();
   resource_request.SetReferrerPolicy(referrer_policy);
 
   ResourceLoaderOptions options;
diff --git a/third_party/blink/renderer/core/html/link_style.cc b/third_party/blink/renderer/core/html/link_style.cc
index ebc6677..bccc8cbd 100644
--- a/third_party/blink/renderer/core/html/link_style.cc
+++ b/third_party/blink/renderer/core/html/link_style.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/html/link_style.h"
 
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/renderer/core/css/style_sheet_contents.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
@@ -21,7 +22,6 @@
 #include "third_party/blink/renderer/platform/network/mime/content_type.h"
 #include "third_party/blink/renderer/platform/network/mime/mime_type_registry.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/weborigin/security_policy.h"
 #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
 
diff --git a/third_party/blink/renderer/core/html/parser/css_preload_scanner.cc b/third_party/blink/renderer/core/html/parser/css_preload_scanner.cc
index 091b196..1dd6703 100644
--- a/third_party/blink/renderer/core/html/parser/css_preload_scanner.cc
+++ b/third_party/blink/renderer/core/html/parser/css_preload_scanner.cc
@@ -86,7 +86,8 @@
              predicted_base_element_url);
 }
 
-void CSSPreloadScanner::SetReferrerPolicy(const ReferrerPolicy policy) {
+void CSSPreloadScanner::SetReferrerPolicy(
+    network::mojom::ReferrerPolicy policy) {
   referrer_policy_ = policy;
 }
 
diff --git a/third_party/blink/renderer/core/html/parser/css_preload_scanner.h b/third_party/blink/renderer/core/html/parser/css_preload_scanner.h
index 43fb7394..8fdab879 100644
--- a/third_party/blink/renderer/core/html/parser/css_preload_scanner.h
+++ b/third_party/blink/renderer/core/html/parser/css_preload_scanner.h
@@ -54,7 +54,7 @@
             PreloadRequestStream&,
             const KURL&);
 
-  void SetReferrerPolicy(const ReferrerPolicy);
+  void SetReferrerPolicy(network::mojom::ReferrerPolicy);
 
  private:
   enum State {
@@ -84,7 +84,8 @@
   StringBuilder rule_;
   StringBuilder rule_value_;
 
-  ReferrerPolicy referrer_policy_ = kReferrerPolicyDefault;
+  network::mojom::ReferrerPolicy referrer_policy_ =
+      network::mojom::ReferrerPolicy::kDefault;
 
   // Below members only non-null during scan()
   PreloadRequestStream* requests_ = nullptr;
diff --git a/third_party/blink/renderer/core/html/parser/html_preload_scanner.cc b/third_party/blink/renderer/core/html/parser/html_preload_scanner.cc
index 4b74920..6e29a2c 100644
--- a/third_party/blink/renderer/core/html/parser/html_preload_scanner.cc
+++ b/third_party/blink/renderer/core/html/parser/html_preload_scanner.cc
@@ -151,7 +151,7 @@
         importance_mode_set_(false),
         media_values_(media_values),
         referrer_policy_set_(false),
-        referrer_policy_(kReferrerPolicyDefault),
+        referrer_policy_(network::mojom::ReferrerPolicy::kDefault),
         integrity_attr_set_(false),
         integrity_features_(features),
         lazyload_attr_set_to_off_(false),
@@ -267,8 +267,8 @@
 
     // The element's 'referrerpolicy' attribute (if present) takes precedence
     // over the document's referrer policy.
-    ReferrerPolicy referrer_policy =
-        (referrer_policy_ != kReferrerPolicyDefault)
+    network::mojom::ReferrerPolicy referrer_policy =
+        (referrer_policy_ != network::mojom::ReferrerPolicy::kDefault)
             ? referrer_policy_
             : document_parameters.referrer_policy;
     auto request = PreloadRequest::CreateIfNeeded(
@@ -665,7 +665,7 @@
   String nonce_;
   Member<MediaValuesCached> media_values_;
   bool referrer_policy_set_;
-  ReferrerPolicy referrer_policy_;
+  network::mojom::ReferrerPolicy referrer_policy_;
   bool integrity_attr_set_;
   IntegrityMetadataSet integrity_metadata_;
   SubresourceIntegrity::IntegrityFeatures integrity_features_;
@@ -762,7 +762,8 @@
 static void HandleMetaReferrer(const String& attribute_value,
                                CachedDocumentParameters* document_parameters,
                                CSSPreloadScanner* css_scanner) {
-  ReferrerPolicy meta_referrer_policy = kReferrerPolicyDefault;
+  network::mojom::ReferrerPolicy meta_referrer_policy =
+      network::mojom::ReferrerPolicy::kDefault;
   if (!attribute_value.IsEmpty() && !attribute_value.IsNull() &&
       SecurityPolicy::ReferrerPolicyFromString(
           attribute_value, kSupportReferrerPolicyLegacyKeywords,
diff --git a/third_party/blink/renderer/core/html/parser/html_preload_scanner.h b/third_party/blink/renderer/core/html/parser/html_preload_scanner.h
index 56bbeab..881c54b 100644
--- a/third_party/blink/renderer/core/html/parser/html_preload_scanner.h
+++ b/third_party/blink/renderer/core/html/parser/html_preload_scanner.h
@@ -72,7 +72,7 @@
   Length default_viewport_min_width;
   bool viewport_meta_zero_values_quirk;
   bool viewport_meta_enabled;
-  ReferrerPolicy referrer_policy;
+  network::mojom::ReferrerPolicy referrer_policy;
   SubresourceIntegrity::IntegrityFeatures integrity_features;
   bool lazyload_policy_enforced;
 
diff --git a/third_party/blink/renderer/core/html/parser/html_preload_scanner_test.cc b/third_party/blink/renderer/core/html/parser/html_preload_scanner_test.cc
index 8776c33..a794316 100644
--- a/third_party/blink/renderer/core/html/parser/html_preload_scanner_test.cc
+++ b/third_party/blink/renderer/core/html/parser/html_preload_scanner_test.cc
@@ -48,7 +48,7 @@
   const char* output_base_url;
   ResourceType type;
   int resource_width;
-  ReferrerPolicy referrer_policy;
+  network::mojom::ReferrerPolicy referrer_policy;
   // Expected referrer header of the preload request, or nullptr if the header
   // shouldn't be checked (and no network request should be created).
   const char* expected_referrer;
@@ -118,23 +118,25 @@
     }
   }
 
-  void PreloadRequestVerification(ResourceType type,
-                                  const char* url,
-                                  const char* base_url,
-                                  int width,
-                                  ReferrerPolicy referrer_policy) {
+  void PreloadRequestVerification(
+      ResourceType type,
+      const char* url,
+      const char* base_url,
+      int width,
+      network::mojom::ReferrerPolicy referrer_policy) {
     PreloadRequestVerification(type, url, base_url, width,
                                ClientHintsPreferences());
     EXPECT_EQ(referrer_policy, preload_request_->GetReferrerPolicy());
   }
 
-  void PreloadRequestVerification(ResourceType type,
-                                  const char* url,
-                                  const char* base_url,
-                                  int width,
-                                  ReferrerPolicy referrer_policy,
-                                  Document* document,
-                                  const char* expected_referrer) {
+  void PreloadRequestVerification(
+      ResourceType type,
+      const char* url,
+      const char* base_url,
+      int width,
+      network::mojom::ReferrerPolicy referrer_policy,
+      Document* document,
+      const char* expected_referrer) {
     PreloadRequestVerification(type, url, base_url, width, referrer_policy);
     Resource* resource = preload_request_->Start(document);
     ASSERT_TRUE(resource);
@@ -225,11 +227,11 @@
     return data;
   }
 
-  void RunSetUp(
-      ViewportState viewport_state,
-      PreloadState preload_state = kPreloadEnabled,
-      ReferrerPolicy document_referrer_policy = kReferrerPolicyDefault,
-      bool use_secure_document_url = false) {
+  void RunSetUp(ViewportState viewport_state,
+                PreloadState preload_state = kPreloadEnabled,
+                network::mojom::ReferrerPolicy document_referrer_policy =
+                    network::mojom::ReferrerPolicy::kDefault,
+                bool use_secure_document_url = false) {
     HTMLParserOptions options(&GetDocument());
     KURL document_url = KURL("http://whatever.test/");
     if (use_secure_document_url)
@@ -645,7 +647,8 @@
   };
 
   for (const auto& test_case : test_cases) {
-    RunSetUp(kViewportDisabled, kPreloadEnabled, kReferrerPolicyDefault,
+    RunSetUp(kViewportDisabled, kPreloadEnabled,
+             network::mojom::ReferrerPolicy::kDefault,
              true /* use_secure_document_url */);
     Test(test_case);
   }
@@ -679,12 +682,14 @@
       all};
 
   // For an insecure document, client hint should not be attached.
-  RunSetUp(kViewportDisabled, kPreloadEnabled, kReferrerPolicyDefault,
+  RunSetUp(kViewportDisabled, kPreloadEnabled,
+           network::mojom::ReferrerPolicy::kDefault,
            false /* use_secure_document_url */);
   Test(expect_no_client_hint);
 
   // For a secure document, client hint should be attached.
-  RunSetUp(kViewportDisabled, kPreloadEnabled, kReferrerPolicyDefault,
+  RunSetUp(kViewportDisabled, kPreloadEnabled,
+           network::mojom::ReferrerPolicy::kDefault,
            true /* use_secure_document_url */);
   Test(expect_client_hint);
 }
@@ -806,73 +811,76 @@
 TEST_F(HTMLPreloadScannerTest, testReferrerPolicy) {
   ReferrerPolicyTestCase test_cases[] = {
       {"http://example.test", "<img src='bla.gif'/>", "bla.gif",
-       "http://example.test/", ResourceType::kImage, 0, kReferrerPolicyDefault},
+       "http://example.test/", ResourceType::kImage, 0,
+       network::mojom::ReferrerPolicy::kDefault},
       {"http://example.test", "<img referrerpolicy='origin' src='bla.gif'/>",
        "bla.gif", "http://example.test/", ResourceType::kImage, 0,
-       kReferrerPolicyOrigin, nullptr},
+       network::mojom::ReferrerPolicy::kOrigin, nullptr},
       {"http://example.test",
        "<meta name='referrer' content='not-a-valid-policy'><img "
        "src='bla.gif'/>",
        "bla.gif", "http://example.test/", ResourceType::kImage, 0,
-       kReferrerPolicyDefault, nullptr},
+       network::mojom::ReferrerPolicy::kDefault, nullptr},
       {"http://example.test",
        "<img referrerpolicy='origin' referrerpolicy='origin-when-cross-origin' "
        "src='bla.gif'/>",
        "bla.gif", "http://example.test/", ResourceType::kImage, 0,
-       kReferrerPolicyOrigin, nullptr},
+       network::mojom::ReferrerPolicy::kOrigin, nullptr},
       {"http://example.test",
        "<img referrerpolicy='not-a-valid-policy' src='bla.gif'/>", "bla.gif",
-       "http://example.test/", ResourceType::kImage, 0, kReferrerPolicyDefault,
-       nullptr},
+       "http://example.test/", ResourceType::kImage, 0,
+       network::mojom::ReferrerPolicy::kDefault, nullptr},
       {"http://example.test",
        "<link rel=preload as=image referrerpolicy='origin-when-cross-origin' "
        "href='bla.gif'/>",
        "bla.gif", "http://example.test/", ResourceType::kImage, 0,
-       kReferrerPolicyOriginWhenCrossOrigin, nullptr},
+       network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin, nullptr},
       {"http://example.test",
        "<link rel=preload as=image referrerpolicy='same-origin' "
        "href='bla.gif'/>",
        "bla.gif", "http://example.test/", ResourceType::kImage, 0,
-       kReferrerPolicySameOrigin, nullptr},
+       network::mojom::ReferrerPolicy::kSameOrigin, nullptr},
       {"http://example.test",
        "<link rel=preload as=image referrerpolicy='strict-origin' "
        "href='bla.gif'/>",
        "bla.gif", "http://example.test/", ResourceType::kImage, 0,
-       kReferrerPolicyStrictOrigin, nullptr},
+       network::mojom::ReferrerPolicy::kStrictOrigin, nullptr},
       {"http://example.test",
        "<link rel=preload as=image "
        "referrerpolicy='strict-origin-when-cross-origin' "
        "href='bla.gif'/>",
        "bla.gif", "http://example.test/", ResourceType::kImage, 0,
-       kReferrerPolicyStrictOriginWhenCrossOrigin, nullptr},
+       network::mojom::ReferrerPolicy::
+           kNoReferrerWhenDowngradeOriginWhenCrossOrigin,
+       nullptr},
       {"http://example.test",
        "<link rel='stylesheet' href='sheet.css' type='text/css'>", "sheet.css",
        "http://example.test/", ResourceType::kCSSStyleSheet, 0,
-       kReferrerPolicyDefault, nullptr},
+       network::mojom::ReferrerPolicy::kDefault, nullptr},
       {"http://example.test",
        "<link rel=preload as=image referrerpolicy='origin' "
        "referrerpolicy='origin-when-cross-origin' href='bla.gif'/>",
        "bla.gif", "http://example.test/", ResourceType::kImage, 0,
-       kReferrerPolicyOrigin, nullptr},
+       network::mojom::ReferrerPolicy::kOrigin, nullptr},
       {"http://example.test",
        "<meta name='referrer' content='no-referrer'><img "
        "referrerpolicy='origin' src='bla.gif'/>",
        "bla.gif", "http://example.test/", ResourceType::kImage, 0,
-       kReferrerPolicyOrigin, nullptr},
+       network::mojom::ReferrerPolicy::kOrigin, nullptr},
       // The scanner's state is not reset between test cases, so all subsequent
       // test cases have a document referrer policy of no-referrer.
       {"http://example.test",
        "<link rel=preload as=image referrerpolicy='not-a-valid-policy' "
        "href='bla.gif'/>",
        "bla.gif", "http://example.test/", ResourceType::kImage, 0,
-       kReferrerPolicyNever, nullptr},
+       network::mojom::ReferrerPolicy::kNever, nullptr},
       {"http://example.test",
        "<img referrerpolicy='not-a-valid-policy' src='bla.gif'/>", "bla.gif",
-       "http://example.test/", ResourceType::kImage, 0, kReferrerPolicyNever,
-       nullptr},
+       "http://example.test/", ResourceType::kImage, 0,
+       network::mojom::ReferrerPolicy::kNever, nullptr},
       {"http://example.test", "<img src='bla.gif'/>", "bla.gif",
-       "http://example.test/", ResourceType::kImage, 0, kReferrerPolicyNever,
-       nullptr}};
+       "http://example.test/", ResourceType::kImage, 0,
+       network::mojom::ReferrerPolicy::kNever, nullptr}};
 
   for (const auto& test_case : test_cases)
     Test(test_case);
@@ -958,27 +966,28 @@
 // Tests that a document-level referrer policy (e.g. one set by HTTP header) is
 // applied for preload requests.
 TEST_F(HTMLPreloadScannerTest, testReferrerPolicyOnDocument) {
-  RunSetUp(kViewportEnabled, kPreloadEnabled, kReferrerPolicyOrigin);
+  RunSetUp(kViewportEnabled, kPreloadEnabled,
+           network::mojom::ReferrerPolicy::kOrigin);
   ReferrerPolicyTestCase test_cases[] = {
       {"http://example.test", "<img src='blah.gif'/>", "blah.gif",
-       "http://example.test/", ResourceType::kImage, 0, kReferrerPolicyOrigin,
-       nullptr},
+       "http://example.test/", ResourceType::kImage, 0,
+       network::mojom::ReferrerPolicy::kOrigin, nullptr},
       {"http://example.test", "<style>@import url('blah.css');</style>",
        "blah.css", "http://example.test/", ResourceType::kCSSStyleSheet, 0,
-       kReferrerPolicyOrigin, nullptr},
+       network::mojom::ReferrerPolicy::kOrigin, nullptr},
       // Tests that a meta-delivered referrer policy with an unrecognized policy
       // value does not override the document's referrer policy.
       {"http://example.test",
        "<meta name='referrer' content='not-a-valid-policy'><img "
        "src='bla.gif'/>",
        "bla.gif", "http://example.test/", ResourceType::kImage, 0,
-       kReferrerPolicyOrigin, nullptr},
+       network::mojom::ReferrerPolicy::kOrigin, nullptr},
       // Tests that a meta-delivered referrer policy with a valid policy value
       // does override the document's referrer policy.
       {"http://example.test",
        "<meta name='referrer' content='unsafe-url'><img src='bla.gif'/>",
        "bla.gif", "http://example.test/", ResourceType::kImage, 0,
-       kReferrerPolicyAlways, nullptr},
+       network::mojom::ReferrerPolicy::kAlways, nullptr},
   };
 
   for (const auto& test_case : test_cases)
@@ -1113,7 +1122,8 @@
 }
 
 TEST_F(HTMLPreloadScannerTest, ReferrerHeader) {
-  RunSetUp(kViewportEnabled, kPreloadEnabled, kReferrerPolicyAlways);
+  RunSetUp(kViewportEnabled, kPreloadEnabled,
+           network::mojom::ReferrerPolicy::kAlways);
 
   KURL preload_url("http://example.test/sheet.css");
   Platform::Current()->GetURLLoaderMockFactory()->RegisterURL(
@@ -1126,7 +1136,7 @@
       "http://example.test/",
       ResourceType::kCSSStyleSheet,
       0,
-      kReferrerPolicyAlways,
+      network::mojom::ReferrerPolicy::kAlways,
       "http://whatever.test/"};
   Test(test_case);
 }
diff --git a/third_party/blink/renderer/core/html/parser/html_resource_preloader_test.cc b/third_party/blink/renderer/core/html/parser/html_resource_preloader_test.cc
index 85a88d2..66cffeb 100644
--- a/third_party/blink/renderer/core/html/parser/html_resource_preloader_test.cc
+++ b/third_party/blink/renderer/core/html/parser/html_resource_preloader_test.cc
@@ -51,7 +51,7 @@
     PreloaderNetworkHintsMock network_hints;
     auto preload_request = PreloadRequest::CreateIfNeeded(
         String(), TextPosition(), test_case.url, KURL(test_case.base_url),
-        ResourceType::kImage, ReferrerPolicy(),
+        ResourceType::kImage, network::mojom::ReferrerPolicy(),
         PreloadRequest::kDocumentIsReferrer, ResourceFetcher::kImageNotImageSet,
         FetchParameters::ResourceWidth(), ClientHintsPreferences(),
         PreloadRequest::kRequestTypePreconnect);
diff --git a/third_party/blink/renderer/core/html/parser/preload_request.h b/third_party/blink/renderer/core/html/parser/preload_request.h
index 69759164..7e0acb6f 100644
--- a/third_party/blink/renderer/core/html/parser/preload_request.h
+++ b/third_party/blink/renderer/core/html/parser/preload_request.h
@@ -47,7 +47,7 @@
       const String& resource_url,
       const KURL& base_url,
       ResourceType resource_type,
-      const ReferrerPolicy referrer_policy,
+      const network::mojom::ReferrerPolicy referrer_policy,
       ReferrerSource referrer_source,
       ResourceFetcher::IsImageSet is_image_set,
       const FetchParameters::ResourceWidth& resource_width =
@@ -100,7 +100,9 @@
   const ClientHintsPreferences& Preferences() const {
     return client_hints_preferences_;
   }
-  ReferrerPolicy GetReferrerPolicy() const { return referrer_policy_; }
+  network::mojom::ReferrerPolicy GetReferrerPolicy() const {
+    return referrer_policy_;
+  }
 
   void SetScriptType(mojom::ScriptType script_type) {
     script_type_ = script_type;
@@ -137,7 +139,7 @@
                  const FetchParameters::ResourceWidth& resource_width,
                  const ClientHintsPreferences& client_hints_preferences,
                  RequestType request_type,
-                 const ReferrerPolicy referrer_policy,
+                 const network::mojom::ReferrerPolicy referrer_policy,
                  ReferrerSource referrer_source,
                  ResourceFetcher::IsImageSet is_image_set)
       : initiator_name_(initiator_name),
@@ -174,7 +176,7 @@
   FetchParameters::ResourceWidth resource_width_;
   ClientHintsPreferences client_hints_preferences_;
   RequestType request_type_;
-  ReferrerPolicy referrer_policy_;
+  network::mojom::ReferrerPolicy referrer_policy_;
   ReferrerSource referrer_source_;
   IntegrityMetadataSet integrity_metadata_;
   bool from_insertion_scanner_;
diff --git a/third_party/blink/renderer/core/html/track/vtt/vtt_cue.cc b/third_party/blink/renderer/core/html/track/vtt/vtt_cue.cc
index 4d63cc0e..df6990b 100644
--- a/third_party/blink/renderer/core/html/track/vtt/vtt_cue.cc
+++ b/third_party/blink/renderer/core/html/track/vtt/vtt_cue.cc
@@ -530,8 +530,8 @@
     // Within a cue, paragraph boundaries are only denoted by Type B characters,
     // such as U+000A LINE FEED (LF), U+0085 NEXT LINE (NEL),
     // and U+2029 PARAGRAPH SEPARATOR.
-    return WTF::Unicode::Category(Current()) &
-           WTF::Unicode::kSeparator_Paragraph;
+    return WTF::unicode::Category(Current()) &
+           WTF::unicode::kSeparator_Paragraph;
   }
 };
 
diff --git a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc
index 1e67a3c..e83f57d 100644
--- a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc
@@ -36,6 +36,7 @@
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
 #include "build/build_config.h"
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "services/network/public/mojom/request_context_frame_type.mojom-shared.h"
 #include "services/network/public/mojom/websocket.mojom-blink.h"
 #include "third_party/blink/public/platform/task_type.h"
@@ -77,7 +78,6 @@
 #include "third_party/blink/renderer/platform/network/network_state_notifier.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 #include "third_party/blink/renderer/platform/wtf/text/base64.h"
 #include "third_party/blink/renderer/platform/wtf/time.h"
@@ -375,11 +375,11 @@
   return kWebConnectionTypeUnknown;
 }
 
-String GetReferrerPolicy(ReferrerPolicy policy) {
+String GetReferrerPolicy(network::mojom::ReferrerPolicy policy) {
   switch (policy) {
-    case kReferrerPolicyAlways:
+    case network::mojom::ReferrerPolicy::kAlways:
       return protocol::Network::Request::ReferrerPolicyEnum::UnsafeUrl;
-    case kReferrerPolicyDefault:
+    case network::mojom::ReferrerPolicy::kDefault:
       if (RuntimeEnabledFeatures::ReducedReferrerGranularityEnabled()) {
         return protocol::Network::Request::ReferrerPolicyEnum::
             StrictOriginWhenCrossOrigin;
@@ -387,21 +387,22 @@
         return protocol::Network::Request::ReferrerPolicyEnum::
             NoReferrerWhenDowngrade;
       }
-    case kReferrerPolicyNoReferrerWhenDowngrade:
+    case network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade:
       return protocol::Network::Request::ReferrerPolicyEnum::
           NoReferrerWhenDowngrade;
-    case kReferrerPolicyNever:
+    case network::mojom::ReferrerPolicy::kNever:
       return protocol::Network::Request::ReferrerPolicyEnum::NoReferrer;
-    case kReferrerPolicyOrigin:
+    case network::mojom::ReferrerPolicy::kOrigin:
       return protocol::Network::Request::ReferrerPolicyEnum::Origin;
-    case kReferrerPolicyOriginWhenCrossOrigin:
+    case network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin:
       return protocol::Network::Request::ReferrerPolicyEnum::
           OriginWhenCrossOrigin;
-    case kReferrerPolicySameOrigin:
+    case network::mojom::ReferrerPolicy::kSameOrigin:
       return protocol::Network::Request::ReferrerPolicyEnum::SameOrigin;
-    case kReferrerPolicyStrictOrigin:
+    case network::mojom::ReferrerPolicy::kStrictOrigin:
       return protocol::Network::Request::ReferrerPolicyEnum::StrictOrigin;
-    case kReferrerPolicyStrictOriginWhenCrossOrigin:
+    case network::mojom::ReferrerPolicy::
+        kNoReferrerWhenDowngradeOriginWhenCrossOrigin:
       return protocol::Network::Request::ReferrerPolicyEnum::
           StrictOriginWhenCrossOrigin;
   }
@@ -836,10 +837,12 @@
       // use ResourceRequest::referrer_. See https://crbug.com/850813. This
       // seems to require storing the referrer info that is currently stored
       // inside state_'s kExtraRequestHeaders, somewhere else.
-      if (header_name.LowerASCII() == http_names::kReferer.LowerASCII())
-        request.SetHTTPReferrer(Referrer(value, kReferrerPolicyAlways));
-      else
+      if (header_name.LowerASCII() == http_names::kReferer.LowerASCII()) {
+        request.SetHTTPReferrer(
+            Referrer(value, network::mojom::ReferrerPolicy::kAlways));
+      } else {
         request.SetHTTPHeaderField(header_name, AtomicString(value));
+      }
     }
   }
 
diff --git a/third_party/blink/renderer/core/layout/bidi_run.h b/third_party/blink/renderer/core/layout/bidi_run.h
index 92658f3..4e22d2c 100644
--- a/third_party/blink/renderer/core/layout/bidi_run.h
+++ b/third_party/blink/renderer/core/layout/bidi_run.h
@@ -37,8 +37,8 @@
           int start,
           int stop,
           LineLayoutItem line_layout_item,
-          WTF::Unicode::CharDirection dir,
-          WTF::Unicode::CharDirection override_dir)
+          WTF::unicode::CharDirection dir,
+          WTF::unicode::CharDirection override_dir)
       : BidiCharacterRun(override, level, start, stop, dir, override_dir),
         line_layout_item_(line_layout_item),
         box_(nullptr) {
diff --git a/third_party/blink/renderer/core/layout/layout_text.cc b/third_party/blink/renderer/core/layout/layout_text.cc
index 71590fada..6c609ed 100644
--- a/third_party/blink/renderer/core/layout/layout_text.cc
+++ b/third_party/blink/renderer/core/layout/layout_text.cc
@@ -1262,7 +1262,7 @@
 
     if (run) {
       // Treat adjacent runs with the same resolved directionality
-      // (TextDirection as opposed to WTF::Unicode::Direction) as belonging
+      // (TextDirection as opposed to WTF::unicode::Direction) as belonging
       // to the same run to avoid breaking unnecessarily.
       while (i >= run->Stop() ||
              (run->Next() && run->Next()->Direction() == run->Direction()))
diff --git a/third_party/blink/renderer/core/layout/line/breaking_context_inline_headers.h b/third_party/blink/renderer/core/layout/line/breaking_context_inline_headers.h
index a6a1ce3..be12bbc 100644
--- a/third_party/blink/renderer/core/layout/line/breaking_context_inline_headers.h
+++ b/third_party/blink/renderer/core/layout/line/breaking_context_inline_headers.h
@@ -712,9 +712,9 @@
 }
 
 ALWAYS_INLINE TextDirection
-TextDirectionFromUnicode(WTF::Unicode::CharDirection direction) {
-  return direction == WTF::Unicode::kRightToLeft ||
-                 direction == WTF::Unicode::kRightToLeftArabic
+TextDirectionFromUnicode(WTF::unicode::CharDirection direction) {
+  return direction == WTF::unicode::kRightToLeft ||
+                 direction == WTF::unicode::kRightToLeftArabic
              ? TextDirection::kRtl
              : TextDirection::kLtr;
 }
diff --git a/third_party/blink/renderer/core/layout/line/inline_flow_box.h b/third_party/blink/renderer/core/layout/line/inline_flow_box.h
index 7891306c..6c14c1f 100644
--- a/third_party/blink/renderer/core/layout/line/inline_flow_box.h
+++ b/third_party/blink/renderer/core/layout/line/inline_flow_box.h
@@ -54,9 +54,9 @@
         baseline_type_(kAlphabeticBaseline),
         has_annotations_before_(false),
         has_annotations_after_(false),
-        line_break_bidi_status_eor_(WTF::Unicode::kLeftToRight),
-        line_break_bidi_status_last_strong_(WTF::Unicode::kLeftToRight),
-        line_break_bidi_status_last_(WTF::Unicode::kLeftToRight),
+        line_break_bidi_status_eor_(WTF::unicode::kLeftToRight),
+        line_break_bidi_status_last_strong_(WTF::unicode::kLeftToRight),
+        line_break_bidi_status_last_(WTF::unicode::kLeftToRight),
         is_first_after_page_break_(false)
 #if DCHECK_IS_ON()
         ,
@@ -471,9 +471,9 @@
   unsigned has_annotations_before_ : 1;
   unsigned has_annotations_after_ : 1;
 
-  unsigned line_break_bidi_status_eor_ : 5;          // WTF::Unicode::Direction
-  unsigned line_break_bidi_status_last_strong_ : 5;  // WTF::Unicode::Direction
-  unsigned line_break_bidi_status_last_ : 5;         // WTF::Unicode::Direction
+  unsigned line_break_bidi_status_eor_ : 5;          // WTF::unicode::Direction
+  unsigned line_break_bidi_status_last_strong_ : 5;  // WTF::unicode::Direction
+  unsigned line_break_bidi_status_last_ : 5;         // WTF::unicode::Direction
 
   unsigned is_first_after_page_break_ : 1;
 
diff --git a/third_party/blink/renderer/core/layout/line/inline_iterator.h b/third_party/blink/renderer/core/layout/line/inline_iterator.h
index 6ab6f19..95732c89 100644
--- a/third_party/blink/renderer/core/layout/line/inline_iterator.h
+++ b/third_party/blink/renderer/core/layout/line/inline_iterator.h
@@ -125,7 +125,7 @@
   UChar PreviousInSameNode() const;
   UChar32 CodepointAt(unsigned) const;
   UChar32 CurrentCodepoint() const;
-  ALWAYS_INLINE WTF::Unicode::CharDirection Direction() const;
+  ALWAYS_INLINE WTF::unicode::CharDirection Direction() const;
 
  private:
   LineLayoutItem root_;
@@ -145,15 +145,15 @@
          it1.GetLineLayoutItem() != it2.GetLineLayoutItem();
 }
 
-static inline WTF::Unicode::CharDirection EmbedCharFromDirection(
+static inline WTF::unicode::CharDirection EmbedCharFromDirection(
     TextDirection dir,
     UnicodeBidi unicode_bidi) {
   if (unicode_bidi == UnicodeBidi::kEmbed) {
-    return dir == TextDirection::kRtl ? WTF::Unicode::kRightToLeftEmbedding
-                                      : WTF::Unicode::kLeftToRightEmbedding;
+    return dir == TextDirection::kRtl ? WTF::unicode::kRightToLeftEmbedding
+                                      : WTF::unicode::kLeftToRightEmbedding;
   }
-  return dir == TextDirection::kRtl ? WTF::Unicode::kRightToLeftOverride
-                                    : WTF::Unicode::kLeftToRightOverride;
+  return dir == TextDirection::kRtl ? WTF::unicode::kRightToLeftOverride
+                                    : WTF::unicode::kLeftToRightOverride;
 }
 
 static inline bool TreatAsIsolated(const ComputedStyle& style) {
@@ -208,7 +208,7 @@
   // Otherwise we pop any embed/override character we added when we opened this
   // tag.
   if (!observer->InIsolate())
-    observer->Embed(WTF::Unicode::kPopDirectionalFormat, kFromStyleOrDOM);
+    observer->Embed(WTF::unicode::kPopDirectionalFormat, kFromStyleOrDOM);
 }
 
 static inline bool IsIteratorTarget(LineLayoutItem object) {
@@ -512,16 +512,17 @@
   return CodepointAt(pos_);
 }
 
-ALWAYS_INLINE WTF::Unicode::CharDirection InlineIterator::Direction() const {
+ALWAYS_INLINE WTF::unicode::CharDirection InlineIterator::Direction() const {
   if (UChar32 c = CurrentCodepoint())
-    return WTF::Unicode::Direction(c);
+    return WTF::unicode::Direction(c);
 
-  if (line_layout_item_ && line_layout_item_.IsListMarker())
+  if (line_layout_item_ && line_layout_item_.IsListMarker()) {
     return line_layout_item_.StyleRef().IsLeftToRightDirection()
-               ? WTF::Unicode::kLeftToRight
-               : WTF::Unicode::kRightToLeft;
+               ? WTF::unicode::kLeftToRight
+               : WTF::unicode::kRightToLeft;
+  }
 
-  return WTF::Unicode::kOtherNeutral;
+  return WTF::unicode::kOtherNeutral;
 }
 
 template <>
@@ -538,7 +539,7 @@
     current_.MoveTo(current_.GetLineLayoutItem(), end.Offset(),
                     current_.NextBreakablePosition());
     last_ = current_;
-    UpdateStatusLastFromCurrentDirection(WTF::Unicode::kOtherNeutral);
+    UpdateStatusLastFromCurrentDirection(WTF::unicode::kOtherNeutral);
   }
   return in_end_of_line;
 }
@@ -598,7 +599,7 @@
   DCHECK(context);
   BidiRun* new_trailing_run = new BidiRun(
       context->Override(), context->Level(), start, stop,
-      run->line_layout_item_, WTF::Unicode::kOtherNeutral, context->Dir());
+      run->line_layout_item_, WTF::unicode::kOtherNeutral, context->Dir());
   if (direction == TextDirection::kLtr)
     runs.AddRun(new_trailing_run);
   else
@@ -706,7 +707,7 @@
   bool InIsolate() const { return nested_isolate_count_; }
 
   // We don't care if we encounter bidi directional overrides.
-  void Embed(WTF::Unicode::CharDirection, BidiEmbeddingSource) {}
+  void Embed(WTF::unicode::CharDirection, BidiEmbeddingSource) {}
   void CommitExplicitEmbedding(BidiRunList<BidiRun>&) {}
   BidiRunList<BidiRun>& Runs() { return runs_; }
 
@@ -899,8 +900,8 @@
     sor_ = eor_;
   }
 
-  direction_ = WTF::Unicode::kOtherNeutral;
-  status_.eor = WTF::Unicode::kOtherNeutral;
+  direction_ = WTF::unicode::kOtherNeutral;
+  status_.eor = WTF::unicode::kOtherNeutral;
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/line/root_inline_box.cc b/third_party/blink/renderer/core/layout/line/root_inline_box.cc
index 29d0633a..b574a9b 100644
--- a/third_party/blink/renderer/core/layout/line/root_inline_box.cc
+++ b/third_party/blink/renderer/core/layout/line/root_inline_box.cc
@@ -478,10 +478,10 @@
 
 BidiStatus RootInlineBox::LineBreakBidiStatus() const {
   return BidiStatus(
-      static_cast<WTF::Unicode::CharDirection>(line_break_bidi_status_eor_),
-      static_cast<WTF::Unicode::CharDirection>(
+      static_cast<WTF::unicode::CharDirection>(line_break_bidi_status_eor_),
+      static_cast<WTF::unicode::CharDirection>(
           line_break_bidi_status_last_strong_),
-      static_cast<WTF::Unicode::CharDirection>(line_break_bidi_status_last_),
+      static_cast<WTF::unicode::CharDirection>(line_break_bidi_status_last_),
       line_break_context_);
 }
 
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.cc
index 183cf785..de77686 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.cc
@@ -269,6 +269,16 @@
   return {result_begin, result_end};
 }
 
+NGMappingUnitRange NGOffsetMapping::GetMappingUnitsForNode(
+    const Node& node) const {
+  const auto it = ranges_.find(&node);
+  if (it == ranges_.end()) {
+    NOTREACHED() << node;
+    return NGMappingUnitRange();
+  }
+  return {units_.begin() + it->value.first, units_.begin() + it->value.second};
+}
+
 NGMappingUnitRange NGOffsetMapping::GetMappingUnitsForTextContentOffsetRange(
     unsigned start,
     unsigned end) const {
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.h b/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.h
index e260ae1..fcea9c0 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.h
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.h
@@ -143,6 +143,10 @@
   // only accepts ranges whose start and end have the same anchor node.
   NGMappingUnitRange GetMappingUnitsForDOMRange(const EphemeralRange&) const;
 
+  // Returns all NGOffsetMappingUnits associated to |node|. Note: |node| should
+  // have associated mapping.
+  NGMappingUnitRange GetMappingUnitsForNode(const Node& node) const;
+
   // Returns the text content offset corresponding to the given position.
   // Returns nullopt when the position is not laid out in this context.
   base::Optional<unsigned> GetTextContentOffset(const Position&) const;
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.cc
index 54a703c..c008a95 100644
--- a/third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.cc
+++ b/third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.cc
@@ -351,15 +351,15 @@
   bool bidi_override = IsOverride(StyleRef().GetUnicodeBidi());
   BidiStatus status(TextDirection::kLtr, bidi_override);
   if (run.Is8Bit() || bidi_override) {
-    WTF::Unicode::CharDirection direction = WTF::Unicode::kLeftToRight;
+    WTF::unicode::CharDirection direction = WTF::unicode::kLeftToRight;
     // If BiDi override is in effect, use the specified direction.
     if (bidi_override && !StyleRef().IsLeftToRightDirection())
-      direction = WTF::Unicode::kRightToLeft;
+      direction = WTF::unicode::kRightToLeft;
     bidi_runs.AddRun(new BidiCharacterRun(
         status.context->Override(), status.context->Level(), 0,
         run.CharactersLength(), direction, status.context->Dir()));
   } else {
-    status.last = status.last_strong = WTF::Unicode::kOtherNeutral;
+    status.last = status.last_strong = WTF::unicode::kOtherNeutral;
     bidi_resolver.SetStatus(status);
     bidi_resolver.SetPositionIgnoringNestedIsolates(TextRunIterator(&run, 0));
     const bool kHardLineBreak = false;
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_shape.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_shape.cc
index 41eede2..891762d 100644
--- a/third_party/blink/renderer/core/layout/svg/layout_svg_shape.cc
+++ b/third_party/blink/renderer/core/layout/svg/layout_svg_shape.cc
@@ -352,6 +352,12 @@
   // We only draw in the foreground phase, so we only hit-test then.
   if (hit_test_action != kHitTestForeground)
     return false;
+  const ComputedStyle& style = StyleRef();
+  const PointerEventsHitRules hit_rules(
+      PointerEventsHitRules::SVG_GEOMETRY_HITTESTING,
+      result.GetHitTestRequest(), style.PointerEvents());
+  if (hit_rules.require_visible && style.Visibility() != EVisibility::kVisible)
+    return false;
 
   TransformedHitTestLocation local_location(location_in_parent,
                                             LocalToSVGParentTransform());
@@ -360,11 +366,7 @@
   if (!SVGLayoutSupport::IntersectsClipPath(*this, *local_location))
     return false;
 
-  PointerEventsHitRules hit_rules(
-      PointerEventsHitRules::SVG_GEOMETRY_HITTESTING,
-      result.GetHitTestRequest(), StyleRef().PointerEvents());
-  if (NodeAtPointInternal(result.GetHitTestRequest(), *local_location,
-                          hit_rules)) {
+  if (HitTestShape(result.GetHitTestRequest(), *local_location, hit_rules)) {
     const LayoutPoint local_layout_point(local_location->TransformedPoint());
     UpdateHitTestResult(result, local_layout_point);
     if (result.AddNodeToListBasedTestResult(GetElement(), *local_location) ==
@@ -375,18 +377,15 @@
   return false;
 }
 
-bool LayoutSVGShape::NodeAtPointInternal(const HitTestRequest& request,
-                                         const HitTestLocation& local_location,
-                                         PointerEventsHitRules hit_rules) {
-  const ComputedStyle& style = StyleRef();
-  if (hit_rules.require_visible && style.Visibility() != EVisibility::kVisible)
-    return false;
+bool LayoutSVGShape::HitTestShape(const HitTestRequest& request,
+                                  const HitTestLocation& local_location,
+                                  PointerEventsHitRules hit_rules) {
   if (hit_rules.can_hit_bounding_box &&
       local_location.Intersects(ObjectBoundingBox()))
     return true;
 
   // TODO(chrishtr): support rect-based intersections in the cases below.
-  const SVGComputedStyle& svg_style = style.SvgStyle();
+  const SVGComputedStyle& svg_style = StyleRef().SvgStyle();
   if (hit_rules.can_hit_stroke &&
       (svg_style.HasStroke() || !hit_rules.require_stroke) &&
       StrokeContains(local_location, hit_rules.require_stroke))
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_shape.h b/third_party/blink/renderer/core/layout/svg/layout_svg_shape.h
index 6aa1bf1..dc37505 100644
--- a/third_party/blink/renderer/core/layout/svg/layout_svg_shape.h
+++ b/third_party/blink/renderer/core/layout/svg/layout_svg_shape.h
@@ -63,10 +63,6 @@
   void SetNeedsBoundariesUpdate() final { needs_boundaries_update_ = true; }
   void SetNeedsTransformUpdate() final { needs_transform_update_ = true; }
 
-  bool NodeAtPointInternal(const HitTestRequest&,
-                           const HitTestLocation&,
-                           PointerEventsHitRules);
-
   Path& GetPath() const {
     DCHECK(path_);
     return *path_;
@@ -167,6 +163,9 @@
                    const HitTestLocation& location_in_parent,
                    const LayoutPoint& accumulated_offset,
                    HitTestAction) final;
+  bool HitTestShape(const HitTestRequest&,
+                    const HitTestLocation&,
+                    PointerEventsHitRules);
 
   FloatRect StrokeBoundingBox() const final { return stroke_bounding_box_; }
 
diff --git a/third_party/blink/renderer/core/loader/base_fetch_context.cc b/third_party/blink/renderer/core/loader/base_fetch_context.cc
index 74217716..ceac85e 100644
--- a/third_party/blink/renderer/core/loader/base_fetch_context.cc
+++ b/third_party/blink/renderer/core/loader/base_fetch_context.cc
@@ -118,12 +118,13 @@
     // no matter what now.
     if (!request.DidSetHTTPReferrer()) {
       String referrer_to_use = request.ReferrerString();
-      ReferrerPolicy referrer_policy_to_use = request.GetReferrerPolicy();
+      network::mojom::ReferrerPolicy referrer_policy_to_use =
+          request.GetReferrerPolicy();
 
       if (referrer_to_use == Referrer::ClientReferrerString())
         referrer_to_use = GetFetchClientSettingsObject()->GetOutgoingReferrer();
 
-      if (referrer_policy_to_use == kReferrerPolicyDefault) {
+      if (referrer_policy_to_use == network::mojom::ReferrerPolicy::kDefault) {
         referrer_policy_to_use =
             GetFetchClientSettingsObject()->GetReferrerPolicy();
       }
diff --git a/third_party/blink/renderer/core/loader/base_fetch_context.h b/third_party/blink/renderer/core/loader/base_fetch_context.h
index ca1bb63..59b0488 100644
--- a/third_party/blink/renderer/core/loader/base_fetch_context.h
+++ b/third_party/blink/renderer/core/loader/base_fetch_context.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_BASE_FETCH_CONTEXT_H_
 
 #include "base/optional.h"
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/public/mojom/net/ip_address_space.mojom-blink.h"
 #include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/renderer/core/core_export.h"
@@ -15,7 +16,6 @@
 #include "third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h"
 #include "third_party/blink/renderer/platform/loader/fetch/fetch_context.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_request.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
index a3386bd..ff0ea49 100644
--- a/third_party/blink/renderer/core/loader/frame_fetch_context.cc
+++ b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
@@ -1462,8 +1462,8 @@
         IsMainFrame(), IsSVGImageChromeClient());
     fetch_client_settings_object_ =
         MakeGarbageCollected<FetchClientSettingsObjectSnapshot>(
-            NullURL(), nullptr, kReferrerPolicyDefault, String(),
-            HttpsState::kNone);
+            NullURL(), nullptr, network::mojom::ReferrerPolicy::kDefault,
+            String(), HttpsState::kNone);
   }
 
   // This is needed to break a reference cycle in which off-heap
diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context_test.cc b/third_party/blink/renderer/core/loader/frame_fetch_context_test.cc
index 6de0eff..3703b8e444 100644
--- a/third_party/blink/renderer/core/loader/frame_fetch_context_test.cc
+++ b/third_party/blink/renderer/core/loader/frame_fetch_context_test.cc
@@ -1189,7 +1189,7 @@
   GetNetworkStateNotifier().SetSaveDataEnabledOverride(true);
   document->SetSecurityOrigin(SecurityOrigin::Create(KURL(origin)));
   document->SetURL(document_url);
-  document->SetReferrerPolicy(kReferrerPolicyOrigin);
+  document->SetReferrerPolicy(network::mojom::ReferrerPolicy::kOrigin);
   document->SetAddressSpace(mojom::IPAddressSpace::kPublic);
 
   dummy_page_holder = nullptr;
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc
index 04428e9b..3618581 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.cc
+++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -628,15 +628,16 @@
     return;
 
   // Always use the initiating document to generate the referrer. We need to
-  // generateReferrer(), because we haven't enforced ReferrerPolicy or
-  // https->http referrer suppression yet.
+  // generateReferrer(), because we haven't enforced
+  // network::mojom::ReferrerPolicy or https->http referrer suppression yet.
   String referrer_to_use = request.ReferrerString();
-  ReferrerPolicy referrer_policy_to_use = request.GetReferrerPolicy();
+  network::mojom::ReferrerPolicy referrer_policy_to_use =
+      request.GetReferrerPolicy();
 
   if (referrer_to_use == Referrer::ClientReferrerString())
     referrer_to_use = origin_document->OutgoingReferrer();
 
-  if (referrer_policy_to_use == kReferrerPolicyDefault)
+  if (referrer_policy_to_use == network::mojom::ReferrerPolicy::kDefault)
     referrer_policy_to_use = origin_document->GetReferrerPolicy();
 
   Referrer referrer = SecurityPolicy::GenerateReferrer(
diff --git a/third_party/blink/renderer/core/loader/image_loader.cc b/third_party/blink/renderer/core/loader/image_loader.cc
index c9176bf..01aa120 100644
--- a/third_party/blink/renderer/core/loader/image_loader.cc
+++ b/third_party/blink/renderer/core/loader/image_loader.cc
@@ -120,10 +120,11 @@
 
 class ImageLoader::Task {
  public:
-  static std::unique_ptr<Task> Create(ImageLoader* loader,
-                                      const KURL& request_url,
-                                      UpdateFromElementBehavior update_behavior,
-                                      ReferrerPolicy referrer_policy) {
+  static std::unique_ptr<Task> Create(
+      ImageLoader* loader,
+      const KURL& request_url,
+      UpdateFromElementBehavior update_behavior,
+      network::mojom::ReferrerPolicy referrer_policy) {
     return std::make_unique<Task>(loader, request_url, update_behavior,
                                   referrer_policy);
   }
@@ -131,7 +132,7 @@
   Task(ImageLoader* loader,
        const KURL& request_url,
        UpdateFromElementBehavior update_behavior,
-       ReferrerPolicy referrer_policy)
+       network::mojom::ReferrerPolicy referrer_policy)
       : loader_(loader),
         should_bypass_main_world_csp_(ShouldBypassMainWorldCSP(loader)),
         update_behavior_(update_behavior),
@@ -183,7 +184,7 @@
   BypassMainWorldBehavior should_bypass_main_world_csp_;
   UpdateFromElementBehavior update_behavior_;
   WeakPersistent<ScriptState> script_state_;
-  ReferrerPolicy referrer_policy_;
+  network::mojom::ReferrerPolicy referrer_policy_;
   KURL request_url_;
   base::WeakPtrFactory<Task> weak_factory_;
 };
@@ -412,7 +413,7 @@
 inline void ImageLoader::EnqueueImageLoadingMicroTask(
     const KURL& request_url,
     UpdateFromElementBehavior update_behavior,
-    ReferrerPolicy referrer_policy) {
+    network::mojom::ReferrerPolicy referrer_policy) {
   std::unique_ptr<Task> task =
       Task::Create(this, request_url, update_behavior, referrer_policy);
   pending_task_ = task->GetWeakPtr();
@@ -439,11 +440,12 @@
   delay_until_image_notify_finished_ = nullptr;
 }
 
-void ImageLoader::DoUpdateFromElement(BypassMainWorldBehavior bypass_behavior,
-                                      UpdateFromElementBehavior update_behavior,
-                                      const KURL& url,
-                                      ReferrerPolicy referrer_policy,
-                                      UpdateType update_type) {
+void ImageLoader::DoUpdateFromElement(
+    BypassMainWorldBehavior bypass_behavior,
+    UpdateFromElementBehavior update_behavior,
+    const KURL& url,
+    network::mojom::ReferrerPolicy referrer_policy,
+    UpdateType update_type) {
   // FIXME: According to
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content.html#the-img-element:the-img-element-55
   // When "update image" is called due to environment changes and the load
@@ -578,8 +580,9 @@
     image_resource->ResetAnimation();
 }
 
-void ImageLoader::UpdateFromElement(UpdateFromElementBehavior update_behavior,
-                                    ReferrerPolicy referrer_policy) {
+void ImageLoader::UpdateFromElement(
+    UpdateFromElementBehavior update_behavior,
+    network::mojom::ReferrerPolicy referrer_policy) {
   AtomicString image_source_url = element_->ImageSourceURL();
   suppress_error_events_ = (update_behavior == kUpdateSizeChanged);
   last_base_element_url_ =
@@ -897,7 +900,8 @@
   return request->promise();
 }
 
-void ImageLoader::LoadDeferredImage(ReferrerPolicy referrer_policy) {
+void ImageLoader::LoadDeferredImage(
+    network::mojom::ReferrerPolicy referrer_policy) {
   if (lazy_image_load_state_ != LazyImageLoadState::kDeferred)
     return;
   DCHECK(!image_complete_);
diff --git a/third_party/blink/renderer/core/loader/image_loader.h b/third_party/blink/renderer/core/loader/image_loader.h
index 21b5943..1cde362 100644
--- a/third_party/blink/renderer/core/loader/image_loader.h
+++ b/third_party/blink/renderer/core/loader/image_loader.h
@@ -78,7 +78,8 @@
   };
 
   void UpdateFromElement(UpdateFromElementBehavior = kUpdateNormal,
-                         ReferrerPolicy = kReferrerPolicyDefault);
+                         network::mojom::ReferrerPolicy =
+                             network::mojom::ReferrerPolicy::kDefault);
 
   void ElementDidMoveToNewDocument();
 
@@ -125,7 +126,7 @@
 
   ScriptPromise Decode(ScriptState*, ExceptionState&);
 
-  void LoadDeferredImage(ReferrerPolicy);
+  void LoadDeferredImage(network::mojom::ReferrerPolicy);
 
  protected:
   void ImageChanged(ImageResourceContent*, CanDeferInvalidation) override;
@@ -152,11 +153,12 @@
   };
 
   // Called from the task or from updateFromElement to initiate the load.
-  void DoUpdateFromElement(BypassMainWorldBehavior,
-                           UpdateFromElementBehavior,
-                           const KURL&,
-                           ReferrerPolicy = kReferrerPolicyDefault,
-                           UpdateType = UpdateType::kAsync);
+  void DoUpdateFromElement(
+      BypassMainWorldBehavior,
+      UpdateFromElementBehavior,
+      const KURL&,
+      network::mojom::ReferrerPolicy = network::mojom::ReferrerPolicy::kDefault,
+      UpdateType = UpdateType::kAsync);
 
   virtual void DispatchLoadEvent() = 0;
   virtual void NoImageResourceToLoad() {}
@@ -181,7 +183,7 @@
   void CrossSiteOrCSPViolationOccurred(AtomicString);
   void EnqueueImageLoadingMicroTask(const KURL&,
                                     UpdateFromElementBehavior,
-                                    ReferrerPolicy);
+                                    network::mojom::ReferrerPolicy);
 
   KURL ImageSourceToKURL(AtomicString) const;
 
diff --git a/third_party/blink/renderer/core/loader/link_loader.cc b/third_party/blink/renderer/core/loader/link_loader.cc
index 202776f5..6aee31d 100644
--- a/third_party/blink/renderer/core/loader/link_loader.cc
+++ b/third_party/blink/renderer/core/loader/link_loader.cc
@@ -99,7 +99,7 @@
       media(header.Media()),
       nonce(header.Nonce()),
       integrity(header.Integrity()),
-      referrer_policy(kReferrerPolicyDefault),
+      referrer_policy(network::mojom::ReferrerPolicy::kDefault),
       href(KURL(base_url, header.Url())),
       image_srcset(header.ImageSrcset()),
       image_sizes(header.ImageSizes()) {}
diff --git a/third_party/blink/renderer/core/loader/link_loader.h b/third_party/blink/renderer/core/loader/link_loader.h
index 18d5732..75674849 100644
--- a/third_party/blink/renderer/core/loader/link_loader.h
+++ b/third_party/blink/renderer/core/loader/link_loader.h
@@ -63,7 +63,7 @@
                      const String& nonce,
                      const String& integrity,
                      const String& importance,
-                     const ReferrerPolicy& referrer_policy,
+                     network::mojom::ReferrerPolicy referrer_policy,
                      const KURL& href,
                      const String& image_srcset,
                      const String& image_sizes)
@@ -89,7 +89,7 @@
   String nonce;
   String integrity;
   String importance;
-  ReferrerPolicy referrer_policy;
+  network::mojom::ReferrerPolicy referrer_policy;
   KURL href;
   String image_srcset;
   String image_sizes;
diff --git a/third_party/blink/renderer/core/loader/link_loader_test.cc b/third_party/blink/renderer/core/loader/link_loader_test.cc
index 7073425..6d777dd 100644
--- a/third_party/blink/renderer/core/loader/link_loader_test.cc
+++ b/third_party/blink/renderer/core/loader/link_loader_test.cc
@@ -97,7 +97,7 @@
     mojom::RequestContextType context;
     bool link_loader_should_load_value;
     KURL load_url;
-    ReferrerPolicy referrer_policy;
+    network::mojom::ReferrerPolicy referrer_policy;
   };
 
   LinkLoaderPreloadTestBase() {
@@ -132,7 +132,8 @@
       EXPECT_EQ(expected.priority, resource->GetResourceRequest().Priority());
       EXPECT_EQ(expected.context,
                 resource->GetResourceRequest().GetRequestContext());
-      if (expected.referrer_policy != kReferrerPolicyDefault) {
+      if (expected.referrer_policy !=
+          network::mojom::ReferrerPolicy::kDefault) {
         EXPECT_EQ(expected.referrer_policy,
                   resource->GetResourceRequest().GetReferrerPolicy());
       }
@@ -188,12 +189,12 @@
   LinkLoadParameters params(
       LinkRelAttribute("preload"), kCrossOriginAttributeNotSet, String(),
       test_case.as, String(), String(), String(), String(),
-      kReferrerPolicyDefault, KURL(NullURL(), test_case.href), String(),
-      String());
+      network::mojom::ReferrerPolicy::kDefault, KURL(NullURL(), test_case.href),
+      String(), String());
   Expectations expectations = {
       test_case.priority, test_case.context, test_case.expecting_load,
       test_case.expecting_load ? params.href : NullURL(),
-      kReferrerPolicyDefault};
+      network::mojom::ReferrerPolicy::kDefault};
   TestPreload(params, expectations);
 }
 
@@ -263,12 +264,12 @@
   LinkLoadParameters params(
       LinkRelAttribute("preload"), kCrossOriginAttributeNotSet, test_case.type,
       test_case.as, String(), String(), String(), String(),
-      kReferrerPolicyDefault, KURL(NullURL(), test_case.href), String(),
-      String());
+      network::mojom::ReferrerPolicy::kDefault, KURL(NullURL(), test_case.href),
+      String(), String());
   Expectations expectations = {
       test_case.priority, test_case.context, test_case.expecting_load,
       test_case.expecting_load ? params.href : NullURL(),
-      kReferrerPolicyDefault};
+      network::mojom::ReferrerPolicy::kDefault};
   TestPreload(params, expectations);
 }
 
@@ -297,13 +298,13 @@
   LinkLoadParameters params(
       LinkRelAttribute("preload"), kCrossOriginAttributeNotSet, "image/gif",
       "image", test_case.media, String(), String(), String(),
-      kReferrerPolicyDefault, KURL(NullURL(), "http://example.test/cat.gif"),
-      String(), String());
+      network::mojom::ReferrerPolicy::kDefault,
+      KURL(NullURL(), "http://example.test/cat.gif"), String(), String());
   Expectations expectations = {
       test_case.priority, mojom::RequestContextType::IMAGE,
       test_case.link_loader_should_load_value,
       test_case.expecting_load ? params.href : NullURL(),
-      kReferrerPolicyDefault};
+      network::mojom::ReferrerPolicy::kDefault};
   TestPreload(params, expectations);
 }
 
@@ -311,20 +312,21 @@
                         LinkLoaderPreloadMediaTest,
                         testing::ValuesIn(kPreloadMediaTestParams));
 
-constexpr ReferrerPolicy kPreloadReferrerPolicyTestParams[] = {
-    kReferrerPolicyOrigin,
-    kReferrerPolicyOriginWhenCrossOrigin,
-    kReferrerPolicySameOrigin,
-    kReferrerPolicyStrictOrigin,
-    kReferrerPolicyStrictOriginWhenCrossOrigin,
-    kReferrerPolicyNever};
+constexpr network::mojom::ReferrerPolicy kPreloadReferrerPolicyTestParams[] = {
+    network::mojom::ReferrerPolicy::kOrigin,
+    network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin,
+    network::mojom::ReferrerPolicy::kSameOrigin,
+    network::mojom::ReferrerPolicy::kStrictOrigin,
+    network::mojom::ReferrerPolicy::
+        kNoReferrerWhenDowngradeOriginWhenCrossOrigin,
+    network::mojom::ReferrerPolicy::kNever};
 
 class LinkLoaderPreloadReferrerPolicyTest
     : public LinkLoaderPreloadTestBase,
-      public testing::WithParamInterface<ReferrerPolicy> {};
+      public testing::WithParamInterface<network::mojom::ReferrerPolicy> {};
 
 TEST_P(LinkLoaderPreloadReferrerPolicyTest, Preload) {
-  const ReferrerPolicy referrer_policy = GetParam();
+  const network::mojom::ReferrerPolicy referrer_policy = GetParam();
   LinkLoadParameters params(
       LinkRelAttribute("preload"), kCrossOriginAttributeNotSet, "image/gif",
       "image", String(), String(), String(), String(), referrer_policy,
@@ -365,13 +367,13 @@
   LinkLoadParameters params(
       LinkRelAttribute("preload"), kCrossOriginAttributeNotSet, String(),
       "script", String(), test_case.nonce, String(), String(),
-      kReferrerPolicyDefault, KURL(NullURL(), "http://example.test/cat.js"),
-      String(), String());
+      network::mojom::ReferrerPolicy::kDefault,
+      KURL(NullURL(), "http://example.test/cat.js"), String(), String());
   Expectations expectations = {
       ResourceLoadPriority::kHigh, mojom::RequestContextType::SCRIPT,
       test_case.expecting_load,
       test_case.expecting_load ? params.href : NullURL(),
-      kReferrerPolicyDefault};
+      network::mojom::ReferrerPolicy::kDefault};
   TestPreload(params, expectations);
 }
 
@@ -417,12 +419,13 @@
       test_case.scale_factor);
   LinkLoadParameters params(
       LinkRelAttribute("preload"), kCrossOriginAttributeNotSet, "image/gif",
-      "image", String(), String(), String(), String(), kReferrerPolicyDefault,
-      KURL(NullURL(), test_case.href), test_case.image_srcset,
-      test_case.image_sizes);
-  Expectations expectations = {
-      ResourceLoadPriority::kLow, mojom::RequestContextType::IMAGE, true,
-      KURL(NullURL(), test_case.expected_url), kReferrerPolicyDefault};
+      "image", String(), String(), String(), String(),
+      network::mojom::ReferrerPolicy::kDefault, KURL(NullURL(), test_case.href),
+      test_case.image_srcset, test_case.image_sizes);
+  Expectations expectations = {ResourceLoadPriority::kLow,
+                               mojom::RequestContextType::IMAGE, true,
+                               KURL(NullURL(), test_case.expected_url),
+                               network::mojom::ReferrerPolicy::kDefault};
   TestPreload(params, expectations);
 }
 
@@ -435,26 +438,27 @@
   const char* nonce;
   const char* integrity;
   CrossOriginAttributeValue cross_origin;
-  ReferrerPolicy referrer_policy;
+  network::mojom::ReferrerPolicy referrer_policy;
   bool expecting_load;
   network::mojom::FetchCredentialsMode expected_credentials_mode;
 };
 
 constexpr ModulePreloadTestParams kModulePreloadTestParams[] = {
-    {"", nullptr, nullptr, kCrossOriginAttributeNotSet, kReferrerPolicyDefault,
-     false, network::mojom::FetchCredentialsMode::kSameOrigin},
-    {"http://example.test/cat.js", nullptr, nullptr,
-     kCrossOriginAttributeNotSet, kReferrerPolicyDefault, true,
+    {"", nullptr, nullptr, kCrossOriginAttributeNotSet,
+     network::mojom::ReferrerPolicy::kDefault, false,
      network::mojom::FetchCredentialsMode::kSameOrigin},
     {"http://example.test/cat.js", nullptr, nullptr,
-     kCrossOriginAttributeAnonymous, kReferrerPolicyDefault, true,
-     network::mojom::FetchCredentialsMode::kSameOrigin},
+     kCrossOriginAttributeNotSet, network::mojom::ReferrerPolicy::kDefault,
+     true, network::mojom::FetchCredentialsMode::kSameOrigin},
+    {"http://example.test/cat.js", nullptr, nullptr,
+     kCrossOriginAttributeAnonymous, network::mojom::ReferrerPolicy::kDefault,
+     true, network::mojom::FetchCredentialsMode::kSameOrigin},
     {"http://example.test/cat.js", "nonce", nullptr,
-     kCrossOriginAttributeNotSet, kReferrerPolicyNever, true,
+     kCrossOriginAttributeNotSet, network::mojom::ReferrerPolicy::kNever, true,
      network::mojom::FetchCredentialsMode::kSameOrigin},
     {"http://example.test/cat.js", nullptr, "sha384-abc",
-     kCrossOriginAttributeNotSet, kReferrerPolicyDefault, true,
-     network::mojom::FetchCredentialsMode::kSameOrigin}};
+     kCrossOriginAttributeNotSet, network::mojom::ReferrerPolicy::kDefault,
+     true, network::mojom::FetchCredentialsMode::kSameOrigin}};
 
 class LinkLoaderModulePreloadTest
     : public testing::TestWithParam<ModulePreloadTestParams> {};
@@ -524,19 +528,21 @@
     // TODO(yoav): Add support for type and media crbug.com/662687
     const char* type;
     const char* media;
-    const ReferrerPolicy referrer_policy;
+    const network::mojom::ReferrerPolicy referrer_policy;
     const bool link_loader_should_load_value;
     const bool expecting_load;
-    const ReferrerPolicy expected_referrer_policy;
+    const network::mojom::ReferrerPolicy expected_referrer_policy;
   } cases[] = {
       // Referrer Policy
-      {"http://example.test/cat.jpg", "image/jpg", "", kReferrerPolicyOrigin,
-       true, true, kReferrerPolicyOrigin},
       {"http://example.test/cat.jpg", "image/jpg", "",
-       kReferrerPolicyOriginWhenCrossOrigin, true, true,
-       kReferrerPolicyOriginWhenCrossOrigin},
-      {"http://example.test/cat.jpg", "image/jpg", "", kReferrerPolicyNever,
-       true, true, kReferrerPolicyNever},
+       network::mojom::ReferrerPolicy::kOrigin, true, true,
+       network::mojom::ReferrerPolicy::kOrigin},
+      {"http://example.test/cat.jpg", "image/jpg", "",
+       network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin, true, true,
+       network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin},
+      {"http://example.test/cat.jpg", "image/jpg", "",
+       network::mojom::ReferrerPolicy::kNever, true, true,
+       network::mojom::ReferrerPolicy::kNever},
   };
 
   // Test the cases with a single header
@@ -564,7 +570,8 @@
       EXPECT_FALSE(resource);
     }
     if (resource) {
-      if (test_case.expected_referrer_policy != kReferrerPolicyDefault) {
+      if (test_case.expected_referrer_policy !=
+          network::mojom::ReferrerPolicy::kDefault) {
         EXPECT_EQ(test_case.expected_referrer_policy,
                   resource->GetResourceRequest().GetReferrerPolicy());
       }
@@ -600,8 +607,8 @@
     LinkLoadParameters params(
         LinkRelAttribute("dns-prefetch"), kCrossOriginAttributeNotSet, String(),
         String(), String(), String(), String(), String(),
-        kReferrerPolicyDefault, href_url, String() /* image_srcset */,
-        String() /* image_sizes */);
+        network::mojom::ReferrerPolicy::kDefault, href_url,
+        String() /* image_srcset */, String() /* image_sizes */);
     loader->LoadLink(params, dummy_page_holder->GetDocument(), network_hints);
     EXPECT_FALSE(network_hints.DidPreconnect());
     EXPECT_EQ(test_case.should_load, network_hints.DidDnsPrefetch());
@@ -636,8 +643,8 @@
     LinkLoadParameters params(
         LinkRelAttribute("preconnect"), test_case.cross_origin, String(),
         String(), String(), String(), String(), String(),
-        kReferrerPolicyDefault, href_url, String() /* image_srcset */,
-        String() /* image_sizes */);
+        network::mojom::ReferrerPolicy::kDefault, href_url,
+        String() /* image_srcset */, String() /* image_sizes */);
     loader->LoadLink(params, dummy_page_holder->GetDocument(), network_hints);
     EXPECT_EQ(test_case.should_load, network_hints.DidPreconnect());
     EXPECT_EQ(test_case.is_https, network_hints.IsHTTPS());
@@ -659,8 +666,8 @@
   LinkLoadParameters params(
       LinkRelAttribute("preload prefetch"), kCrossOriginAttributeNotSet,
       "application/javascript", "script", "", "", "", String(),
-      kReferrerPolicyDefault, href_url, String() /* image_srcset */,
-      String() /* image_sizes */);
+      network::mojom::ReferrerPolicy::kDefault, href_url,
+      String() /* image_srcset */, String() /* image_sizes */);
   loader->LoadLink(params, dummy_page_holder->GetDocument(),
                    NetworkHintsMock());
   ASSERT_EQ(1, fetcher->CountPreloads());
diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc b/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc
index a675980..ef74f6b 100644
--- a/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc
+++ b/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc
@@ -154,8 +154,9 @@
 
   // [SMSR] "... its referrer policy to options's referrer policy." [spec text]
   // Note: For now this is done below with SetHTTPReferrer()
-  ReferrerPolicy referrer_policy = module_request.Options().GetReferrerPolicy();
-  if (referrer_policy == kReferrerPolicyDefault)
+  network::mojom::ReferrerPolicy referrer_policy =
+      module_request.Options().GetReferrerPolicy();
+  if (referrer_policy == network::mojom::ReferrerPolicy::kDefault)
     referrer_policy = fetch_client_settings_object->GetReferrerPolicy();
 
   // Step 5. "... mode is "cors", ..."
diff --git a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc
index 807d9b3..3e702d8 100644
--- a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc
+++ b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc
@@ -4,11 +4,11 @@
 
 #include "third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.h"
 
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/renderer/core/inspector/console_message.h"
 #include "third_party/blink/renderer/core/workers/worker_global_scope.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
 #include "third_party/blink/renderer/platform/network/http_names.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/weborigin/security_policy.h"
 
 namespace blink {
@@ -85,7 +85,8 @@
     const String referrer_policy_header =
         resource->GetResponse().HttpHeaderField(http_names::kReferrerPolicy);
     if (!referrer_policy_header.IsNull()) {
-      ReferrerPolicy referrer_policy = kReferrerPolicyDefault;
+      network::mojom::ReferrerPolicy referrer_policy =
+          network::mojom::ReferrerPolicy::kDefault;
       SecurityPolicy::ReferrerPolicyFromHeaderValue(
           referrer_policy_header, kDoNotSupportReferrerPolicyLegacyKeywords,
           &referrer_policy);
diff --git a/third_party/blink/renderer/core/loader/ping_loader.cc b/third_party/blink/renderer/core/loader/ping_loader.cc
index 2eb41312..fa66a5b 100644
--- a/third_party/blink/renderer/core/loader/ping_loader.cc
+++ b/third_party/blink/renderer/core/loader/ping_loader.cc
@@ -234,7 +234,7 @@
   // TODO(domfarolino): Add WPTs ensuring that pings do not have a referrer
   // header.
   request.SetReferrerString(Referrer::NoReferrer());
-  request.SetReferrerPolicy(kReferrerPolicyNever);
+  request.SetReferrerPolicy(network::mojom::ReferrerPolicy::kNever);
   request.SetRequestContext(mojom::RequestContextType::PING);
   FetchParameters params(request);
   params.MutableOptions().initiator_info.name =
diff --git a/third_party/blink/renderer/core/loader/private/prerender_handle.cc b/third_party/blink/renderer/core/loader/private/prerender_handle.cc
index ce87f91a..7fe7f67 100644
--- a/third_party/blink/renderer/core/loader/private/prerender_handle.cc
+++ b/third_party/blink/renderer/core/loader/private/prerender_handle.cc
@@ -30,12 +30,12 @@
 
 #include "third_party/blink/renderer/core/loader/private/prerender_handle.h"
 
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/loader/frame_loader.h"
 #include "third_party/blink/renderer/core/loader/prerenderer_client.h"
 #include "third_party/blink/renderer/platform/prerender.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/weborigin/security_policy.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.cc b/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.cc
index 6ab3d4a..95ce0384 100644
--- a/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.cc
+++ b/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.cc
@@ -93,8 +93,10 @@
   TextResource::Trace(visitor);
 }
 
-ReferrerPolicy CSSStyleSheetResource::GetReferrerPolicy() const {
-  ReferrerPolicy referrer_policy = kReferrerPolicyDefault;
+network::mojom::ReferrerPolicy CSSStyleSheetResource::GetReferrerPolicy()
+    const {
+  network::mojom::ReferrerPolicy referrer_policy =
+      network::mojom::ReferrerPolicy::kDefault;
   String referrer_policy_header =
       GetResponse().HttpHeaderField(http_names::kReferrerPolicy);
   if (!referrer_policy_header.IsNull()) {
diff --git a/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.h b/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.h
index e16ace2..c1495866 100644
--- a/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.h
+++ b/third_party/blink/renderer/core/loader/resource/css_style_sheet_resource.h
@@ -60,7 +60,7 @@
                          MIMETypeCheck = MIMETypeCheck::kStrict) const;
   StyleSheetContents* CreateParsedStyleSheetFromCache(const CSSParserContext*);
   void SaveParsedStyleSheet(StyleSheetContents*);
-  ReferrerPolicy GetReferrerPolicy() const;
+  network::mojom::ReferrerPolicy GetReferrerPolicy() const;
 
  private:
   class CSSStyleSheetResourceFactory : public ResourceFactory {
diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/third_party/blink/renderer/core/page/context_menu_controller.cc
index b74a1b12..62b59a9 100644
--- a/third_party/blink/renderer/core/page/context_menu_controller.cc
+++ b/third_party/blink/renderer/core/page/context_menu_controller.cc
@@ -432,8 +432,7 @@
         WebContextMenuData::kCheckableMenuItemChecked;
   }
 
-  data.referrer_policy = static_cast<network::mojom::ReferrerPolicy>(
-      selected_frame->GetDocument()->GetReferrerPolicy());
+  data.referrer_policy = selected_frame->GetDocument()->GetReferrerPolicy();
 
   if (menu_provider_) {
     // Filter out custom menu elements and add them into the data.
diff --git a/third_party/blink/renderer/core/page/create_window.cc b/third_party/blink/renderer/core/page/create_window.cc
index 299b300..cfc96f5 100644
--- a/third_party/blink/renderer/core/page/create_window.cc
+++ b/third_party/blink/renderer/core/page/create_window.cc
@@ -487,7 +487,8 @@
   if (!new_frame)
     return;
   if (request.GetShouldSendReferrer() == kMaybeSendReferrer) {
-    // TODO(japhet): Does ReferrerPolicy need to be proagated for RemoteFrames?
+    // TODO(japhet): Does network::mojom::ReferrerPolicy need to be proagated
+    // for RemoteFrames?
     if (new_frame->IsLocalFrame())
       ToLocalFrame(new_frame)->GetDocument()->SetReferrerPolicy(
           opener_frame.GetDocument()->GetReferrerPolicy());
diff --git a/third_party/blink/renderer/core/paint/list_marker_painter.cc b/third_party/blink/renderer/core/paint/list_marker_painter.cc
index a856765..4653f90 100644
--- a/third_party/blink/renderer/core/paint/list_marker_painter.cc
+++ b/third_party/blink/renderer/core/paint/list_marker_painter.cc
@@ -144,8 +144,8 @@
   // Text is not arbitrary. We can judge whether it's RTL from the first
   // character, and we only need to handle the direction RightToLeft for now.
   bool text_needs_reversing =
-      WTF::Unicode::Direction(layout_list_marker_.GetText()[0]) ==
-      WTF::Unicode::kRightToLeft;
+      WTF::unicode::Direction(layout_list_marker_.GetText()[0]) ==
+      WTF::unicode::kRightToLeft;
   StringBuilder reversed_text;
   if (text_needs_reversing) {
     unsigned length = layout_list_marker_.GetText().length();
diff --git a/third_party/blink/renderer/core/script/fetch_client_settings_object_impl.cc b/third_party/blink/renderer/core/script/fetch_client_settings_object_impl.cc
index a5912202..15af66c 100644
--- a/third_party/blink/renderer/core/script/fetch_client_settings_object_impl.cc
+++ b/third_party/blink/renderer/core/script/fetch_client_settings_object_impl.cc
@@ -24,7 +24,8 @@
   return execution_context_->GetSecurityOrigin();
 }
 
-ReferrerPolicy FetchClientSettingsObjectImpl::GetReferrerPolicy() const {
+network::mojom::ReferrerPolicy
+FetchClientSettingsObjectImpl::GetReferrerPolicy() const {
   DCHECK(execution_context_->IsContextThread());
   return execution_context_->GetReferrerPolicy();
 }
diff --git a/third_party/blink/renderer/core/script/fetch_client_settings_object_impl.h b/third_party/blink/renderer/core/script/fetch_client_settings_object_impl.h
index d430456..8ea794e2 100644
--- a/third_party/blink/renderer/core/script/fetch_client_settings_object_impl.h
+++ b/third_party/blink/renderer/core/script/fetch_client_settings_object_impl.h
@@ -5,13 +5,13 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_FETCH_CLIENT_SETTINGS_OBJECT_IMPL_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_FETCH_CLIENT_SETTINGS_OBJECT_IMPL_H_
 
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/cross_thread_copier.h"
 #include "third_party/blink/renderer/platform/heap/member.h"
 #include "third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h"
 #include "third_party/blink/renderer/platform/loader/fetch/https_state.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 
 namespace blink {
@@ -33,7 +33,7 @@
 
   const KURL& BaseURL() const override;
   const SecurityOrigin* GetSecurityOrigin() const override;
-  ReferrerPolicy GetReferrerPolicy() const override;
+  network::mojom::ReferrerPolicy GetReferrerPolicy() const override;
   const String GetOutgoingReferrer() const override;
 
   HttpsState GetHttpsState() const override;
diff --git a/third_party/blink/renderer/core/script/modulator.h b/third_party/blink/renderer/core/script/modulator.h
index c22fa4a..5bfa557f 100644
--- a/third_party/blink/renderer/core/script/modulator.h
+++ b/third_party/blink/renderer/core/script/modulator.h
@@ -6,6 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_MODULATOR_H_
 
 #include "base/single_thread_task_runner.h"
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/renderer/bindings/core/v8/sanitize_script_errors.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_module.h"
@@ -17,7 +18,6 @@
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/loader/fetch/script_fetch_options.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/wtf/text/text_position.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
diff --git a/third_party/blink/renderer/core/script/script_loader.cc b/third_party/blink/renderer/core/script/script_loader.cc
index f0ca30f..c058625 100644
--- a/third_party/blink/renderer/core/script/script_loader.cc
+++ b/third_party/blink/renderer/core/script/script_loader.cc
@@ -374,7 +374,8 @@
   // <spec step="20">Let referrer policy be the current state of the element's
   // referrerpolicy content attribute.</spec>
   String referrerpolicy_attr = element_->ReferrerPolicyAttributeValue();
-  ReferrerPolicy referrer_policy = kReferrerPolicyDefault;
+  network::mojom::ReferrerPolicy referrer_policy =
+      network::mojom::ReferrerPolicy::kDefault;
   if (!referrerpolicy_attr.IsEmpty()) {
     SecurityPolicy::ReferrerPolicyFromString(
         referrerpolicy_attr, kDoNotSupportReferrerPolicyLegacyKeywords,
diff --git a/third_party/blink/renderer/core/streams/CommonStrings.js b/third_party/blink/renderer/core/streams/CommonStrings.js
index 5caea9a..72395d7 100644
--- a/third_party/blink/renderer/core/streams/CommonStrings.js
+++ b/third_party/blink/renderer/core/streams/CommonStrings.js
@@ -9,6 +9,8 @@
   'use strict';
 
   binding.streamErrors = {
+    cannotTransferLockedStream: 'Cannot transfer a locked stream',
+    cannotTransferContext: 'Cannot transfer from this context',
     illegalInvocation: 'Illegal invocation',
     illegalConstructor: 'Illegal constructor',
     invalidType: 'Invalid type is specified',
diff --git a/third_party/blink/renderer/core/streams/ReadableStream.js b/third_party/blink/renderer/core/streams/ReadableStream.js
index 5f78235..d28d8c0 100644
--- a/third_party/blink/renderer/core/streams/ReadableStream.js
+++ b/third_party/blink/renderer/core/streams/ReadableStream.js
@@ -117,9 +117,6 @@
         'to monitor the stream\'s state';
 
   const errDestinationStreamClosed = 'Destination stream closed';
-  const errCannotTransferLockedStream = 'Cannot transfer a locked stream';
-  const errCannotTransferUnsupportedContext =
-        'Cannot transfer from this context';
 
   let useCounted = false;
 
@@ -1048,11 +1045,11 @@
     // assert(IsReadableStream(readable),
     //        `! IsReadableStream(_readable_) is true`);
     if (IsReadableStreamLocked(readable)) {
-      throw new TypeError(errCannotTransferLockedStream);
+      throw new TypeError(streamErrors.cannotTransferLockedStream);
     }
 
     if (!binding.MessagePort_postMessage) {
-      throw new TypeError(errCannotTransferUnsupportedContext);
+      throw new TypeError(streamErrors.cannotTransferContext);
     }
 
     const writable = CreateCrossRealmTransformWritable(port);
diff --git a/third_party/blink/renderer/core/streams/WritableStream.js b/third_party/blink/renderer/core/streams/WritableStream.js
index 0554efe..8c3a751 100644
--- a/third_party/blink/renderer/core/streams/WritableStream.js
+++ b/third_party/blink/renderer/core/streams/WritableStream.js
@@ -93,6 +93,8 @@
     PeekQueueValue,
     ResetQueue,
     ValidateAndNormalizeHighWaterMark,
+    CreateCrossRealmTransformReadable,
+    CreateCrossRealmTransformWritable,
     CallOrNoop1,
   } = binding.streamOperations;
 
@@ -466,6 +468,34 @@
     }
   }
 
+  //
+  // Functions for transferable streams.
+  //
+
+  // The |port| which is passed to this function must be a MessagePort which is
+  // attached by a MessageChannel to the |port| that will be passed to
+  // WritableStreamDeserialize.
+  function WritableStreamSerialize(writable, port) {
+    // assert(IsWritableStream(writable),
+    //        `! IsWritableStream(_writable_) is true`);
+    if (IsWritableStreamLocked(writable)) {
+      throw new TypeError(streamErrors.cannotTransferLockedStream);
+    }
+
+    if (!binding.MessagePort_postMessage) {
+      throw new TypeError(streamErrors.cannotTransferContext);
+    }
+
+    const readable = CreateCrossRealmTransformReadable(port);
+    const promise =
+          binding.ReadableStreamPipeTo(readable, writable, false, false, false);
+    markPromiseAsHandled(promise);
+  }
+
+  function WritableStreamDeserialize(port) {
+    return CreateCrossRealmTransformWritable(port);
+  }
+
   // Functions to expose internals for ReadableStream.pipeTo. These are not
   // part of the standard.
   function isWritableStreamErrored(stream) {
@@ -1044,6 +1074,8 @@
     // Exports for blink
     createWritableStream,
     internalWritableStreamSymbol,
+    WritableStreamSerialize,
+    WritableStreamDeserialize,
 
     // Additional exports for TransformStream
     CreateWritableStream,
diff --git a/third_party/blink/renderer/core/streams/writable_stream.cc b/third_party/blink/renderer/core/streams/writable_stream.cc
index 8be8646..c62c9bd 100644
--- a/third_party/blink/renderer/core/streams/writable_stream.cc
+++ b/third_party/blink/renderer/core/streams/writable_stream.cc
@@ -6,9 +6,11 @@
 
 #include "third_party/blink/renderer/bindings/core/v8/v8_script_runner.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_writable_stream.h"
+#include "third_party/blink/renderer/core/messaging/message_port.h"
 #include "third_party/blink/renderer/core/streams/retain_wrapper_during_construction.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/bindings/v8_binding.h"
+#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 
 namespace blink {
 
@@ -209,6 +211,47 @@
   return result;
 }
 
+void WritableStream::Serialize(ScriptState* script_state,
+                               MessagePort* port,
+                               ExceptionState& exception_state) {
+  DCHECK(port);
+  DCHECK(RuntimeEnabledFeatures::TransferableStreamsEnabled());
+  v8::TryCatch block(script_state->GetIsolate());
+  v8::Local<v8::Value> port_v8_value = ToV8(port, script_state);
+  DCHECK(!port_v8_value.IsEmpty());
+  v8::Local<v8::Value> args[] = {ToV8(this, script_state), port_v8_value};
+  V8ScriptRunner::CallExtra(script_state, "WritableStreamSerialize", args);
+  if (block.HasCaught()) {
+    exception_state.RethrowV8Exception(block.Exception());
+  }
+}
+
+// static
+WritableStream* WritableStream::Deserialize(ScriptState* script_state,
+                                            MessagePort* port,
+                                            ExceptionState& exception_state) {
+  // We need to execute V8 Extras JavaScript to create the new WritableStream.
+  // We will not run author code.
+  auto* isolate = script_state->GetIsolate();
+  v8::Isolate::AllowJavascriptExecutionScope allow_js(isolate);
+  DCHECK(port);
+  DCHECK(RuntimeEnabledFeatures::TransferableStreamsEnabled());
+  v8::TryCatch block(isolate);
+  v8::Local<v8::Value> port_v8 = ToV8(port, script_state);
+  DCHECK(!port_v8.IsEmpty());
+  v8::Local<v8::Value> args[] = {port_v8};
+  ScriptValue internal_stream(
+      script_state, V8ScriptRunner::CallExtra(
+                        script_state, "WritableStreamDeserialize", args));
+  if (block.HasCaught()) {
+    exception_state.RethrowV8Exception(block.Exception());
+    return nullptr;
+  }
+  DCHECK(!internal_stream.IsEmpty());
+  return CreateFromInternalStream(script_state, internal_stream,
+                                  exception_state);
+}
+
 ScriptValue WritableStream::GetInternalStream(ScriptState* script_state) const {
   return ScriptValue(script_state,
                      internal_stream_.NewLocal(script_state->GetIsolate()));
diff --git a/third_party/blink/renderer/core/streams/writable_stream.h b/third_party/blink/renderer/core/streams/writable_stream.h
index 2839186..c2326c7 100644
--- a/third_party/blink/renderer/core/streams/writable_stream.h
+++ b/third_party/blink/renderer/core/streams/writable_stream.h
@@ -14,6 +14,8 @@
 
 namespace blink {
 
+class MessagePort;
+
 // This is an implementation of the corresponding IDL interface.
 // Use TraceWrapperMember to hold a reference to an instance of this class.
 class CORE_EXPORT WritableStream : public ScriptWrappable {
@@ -65,6 +67,17 @@
 
   base::Optional<bool> IsLocked(ScriptState*, ExceptionState&) const;
 
+  // Serialize this stream to |port|. The stream will be locked by this
+  // operation.
+  void Serialize(ScriptState*, MessagePort* port, ExceptionState&);
+
+  // Given a |port| which is entangled with a MessagePort that was previously
+  // passed to Serialize(), returns a new WritableStream which behaves like it
+  // was the original.
+  static WritableStream* Deserialize(ScriptState*,
+                                     MessagePort* port,
+                                     ExceptionState&);
+
   ScriptValue GetInternalStream(ScriptState*) const;
 
  private:
diff --git a/third_party/blink/renderer/core/streams/writable_stream_test.cc b/third_party/blink/renderer/core/streams/writable_stream_test.cc
index 5082c92..024a6d8 100644
--- a/third_party/blink/renderer/core/streams/writable_stream_test.cc
+++ b/third_party/blink/renderer/core/streams/writable_stream_test.cc
@@ -7,10 +7,14 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_value.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
+#include "third_party/blink/renderer/bindings/core/v8/v8_extras_test_utils.h"
 #include "third_party/blink/renderer/core/messaging/message_channel.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/bindings/v8_binding.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
+#include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
+#include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
 #include "v8/include/v8.h"
 
 namespace blink {
@@ -51,6 +55,57 @@
             base::make_optional(true));
 }
 
+TEST_F(WritableStreamTest, Serialize) {
+  ScopedTransferableStreamsForTest enable_transferable_streams(true);
+
+  V8TestingScope scope;
+  auto* script_state = scope.GetScriptState();
+
+  const char underlying_sink_script[] =
+      R"JS(
+const underlying_sink = {
+  write(chunk) {
+    result = chunk;
+  }
+};
+underlying_sink)JS";
+  ScriptValue underlying_sink =
+      EvalWithPrintingError(&scope, underlying_sink_script);
+  ASSERT_FALSE(underlying_sink.IsEmpty());
+  auto* stream = WritableStream::Create(script_state, underlying_sink,
+                                        ASSERT_NO_EXCEPTION);
+  ASSERT_TRUE(stream);
+
+  MessageChannel* channel = MessageChannel::Create(scope.GetExecutionContext());
+
+  stream->Serialize(script_state, channel->port1(), ASSERT_NO_EXCEPTION);
+  EXPECT_TRUE(stream->locked(script_state, ASSERT_NO_EXCEPTION));
+
+  auto* transferred = WritableStream::Deserialize(
+      script_state, channel->port2(), ASSERT_NO_EXCEPTION);
+  ASSERT_TRUE(transferred);
+
+  ScriptValue writer =
+      transferred->getWriter(script_state, ASSERT_NO_EXCEPTION);
+  v8::Local<v8::Context> context = script_state->GetContext();
+  v8::Isolate* isolate = script_state->GetIsolate();
+  v8::Local<v8::Object> global = context->Global();
+  ASSERT_TRUE(
+      global->Set(context, V8String(isolate, "writer"), writer.V8Value())
+          .FromMaybe(false));
+  EvalWithPrintingError(&scope, "writer.write('a')");
+  // Run the message loop to allow messages to be delivered.
+  test::RunPendingTasks();
+  // Allow Promises to resolve.
+  v8::MicrotasksScope::PerformCheckpoint(isolate);
+
+  v8::Local<v8::Value> result;
+  ASSERT_TRUE(
+      global->Get(context, V8String(isolate, "result")).ToLocal(&result));
+  ASSERT_TRUE(result->IsString());
+  EXPECT_EQ(ToCoreString(result.As<v8::String>()), "a");
+}
+
 }  // namespace
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc
index 91ef9334..9a26e64 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -21,6 +21,7 @@
 #include "third_party/blink/renderer/core/frame/local_frame_client.h"
 #include "third_party/blink/renderer/core/frame/use_counter.h"
 #include "third_party/blink/renderer/core/inspector/main_thread_debugger.h"
+#include "third_party/blink/renderer/core/loader/worker_fetch_context.h"
 #include "third_party/blink/renderer/core/messaging/post_message_options.h"
 #include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h"
 #include "third_party/blink/renderer/core/page/page.h"
@@ -34,6 +35,7 @@
 #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/loader/fetch/fetch_client_settings_object_snapshot.h"
+#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
 #include "third_party/blink/renderer/platform/weborigin/security_policy.h"
 
 namespace blink {
@@ -172,8 +174,9 @@
     auto* outside_settings_object =
         GetExecutionContext()->CreateFetchClientSettingsObjectSnapshot();
     context_proxy_->StartWorkerGlobalScope(
-        CreateGlobalScopeCreationParams(script_request_url_), options_,
-        script_request_url_, outside_settings_object, stack_id,
+        CreateGlobalScopeCreationParams(
+            script_request_url_, network::mojom::ReferrerPolicy::kDefault),
+        options_, script_request_url_, outside_settings_object, stack_id,
         String() /* source_code */);
     return;
   }
@@ -181,15 +184,12 @@
     // Legacy code path (to be deprecated, see https://crbug.com/835717):
     // A worker thread will start after scripts are fetched on the current
     // thread.
-    network::mojom::FetchRequestMode fetch_request_mode =
-        network::mojom::FetchRequestMode::kSameOrigin;
-    network::mojom::FetchCredentialsMode fetch_credentials_mode =
-        network::mojom::FetchCredentialsMode::kSameOrigin;
     classic_script_loader_ = MakeGarbageCollected<WorkerClassicScriptLoader>();
     classic_script_loader_->LoadTopLevelScriptAsynchronously(
         *GetExecutionContext(), script_request_url_,
-        mojom::RequestContextType::WORKER, fetch_request_mode,
-        fetch_credentials_mode,
+        mojom::RequestContextType::WORKER,
+        network::mojom::FetchRequestMode::kSameOrigin,
+        network::mojom::FetchCredentialsMode::kSameOrigin,
         GetExecutionContext()->GetSecurityContext().AddressSpace(),
         GetExecutionContext()->IsWorkerGlobalScope(),
         WTF::Bind(&DedicatedWorker::OnResponse, WrapPersistent(this)),
@@ -282,7 +282,8 @@
   } else if (classic_script_loader_->Failed()) {
     DispatchEvent(*Event::CreateCancelable(event_type_names::kError));
   } else {
-    ReferrerPolicy referrer_policy = kReferrerPolicyDefault;
+    network::mojom::ReferrerPolicy referrer_policy =
+        network::mojom::ReferrerPolicy::kDefault;
     if (!classic_script_loader_->GetReferrerPolicy().IsNull()) {
       SecurityPolicy::ReferrerPolicyFromHeaderValue(
           classic_script_loader_->GetReferrerPolicy(),
@@ -292,14 +293,11 @@
     DCHECK(script_request_url_ == script_response_url ||
            SecurityOrigin::AreSameSchemeHostPort(script_request_url_,
                                                  script_response_url));
-    std::unique_ptr<GlobalScopeCreationParams> creation_params =
-        CreateGlobalScopeCreationParams(script_response_url);
-    creation_params->referrer_policy = referrer_policy;
     auto* outside_settings_object =
         GetExecutionContext()->CreateFetchClientSettingsObjectSnapshot();
     context_proxy_->StartWorkerGlobalScope(
-        std::move(creation_params), options_, script_response_url,
-        outside_settings_object, stack_id,
+        CreateGlobalScopeCreationParams(script_response_url, referrer_policy),
+        options_, script_response_url, outside_settings_object, stack_id,
         classic_script_loader_->SourceText());
     probe::scriptImported(GetExecutionContext(),
                           classic_script_loader_->Identifier(),
@@ -309,7 +307,9 @@
 }
 
 std::unique_ptr<GlobalScopeCreationParams>
-DedicatedWorker::CreateGlobalScopeCreationParams(const KURL& script_url) {
+DedicatedWorker::CreateGlobalScopeCreationParams(
+    const KURL& script_url,
+    network::mojom::ReferrerPolicy referrer_policy) {
   base::UnguessableToken parent_devtools_token;
   std::unique_ptr<WorkerSettings> settings;
   if (auto* document = DynamicTo<Document>(GetExecutionContext())) {
@@ -328,13 +328,26 @@
                                       ? mojom::ScriptType::kClassic
                                       : mojom::ScriptType::kModule;
 
-  // WebWorkerFetchContext is provided later in
-  // ThreadedMessagingProxyBase::InitializeWorkerThread().
+  scoped_refptr<WebWorkerFetchContext> web_worker_fetch_context;
+  if (auto* document = DynamicTo<Document>(GetExecutionContext())) {
+    LocalFrame* frame = document->GetFrame();
+    web_worker_fetch_context = frame->Client()->CreateWorkerFetchContext();
+    web_worker_fetch_context->SetApplicationCacheHostID(
+        GetExecutionContext()->Fetcher()->Context().ApplicationCacheHostID());
+    web_worker_fetch_context->SetIsOnSubframe(!frame->IsMainFrame());
+  } else if (auto* scope =
+                 DynamicTo<WorkerGlobalScope>(GetExecutionContext())) {
+    web_worker_fetch_context =
+        static_cast<WorkerFetchContext&>(scope->Fetcher()->Context())
+            .GetWebWorkerFetchContext()
+            ->CloneForNestedWorker();
+  }
+
   return std::make_unique<GlobalScopeCreationParams>(
       script_url, script_type, GetExecutionContext()->UserAgent(),
-      nullptr /* web_worker_fetch_context */,
+      std::move(web_worker_fetch_context),
       GetExecutionContext()->GetContentSecurityPolicy()->Headers(),
-      kReferrerPolicyDefault, GetExecutionContext()->GetSecurityOrigin(),
+      referrer_policy, GetExecutionContext()->GetSecurityOrigin(),
       GetExecutionContext()->IsSecureContext(),
       GetExecutionContext()->GetHttpsState(), CreateWorkerClients(),
       GetExecutionContext()->GetSecurityContext().AddressSpace(),
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.h b/third_party/blink/renderer/core/workers/dedicated_worker.h
index 0a34cea4..294f9bf 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.h
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.h
@@ -88,7 +88,8 @@
   void Start();
 
   std::unique_ptr<GlobalScopeCreationParams> CreateGlobalScopeCreationParams(
-      const KURL& script_url);
+      const KURL& script_url,
+      network::mojom::ReferrerPolicy);
 
   WorkerClients* CreateWorkerClients();
 
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_messaging_proxy.h b/third_party/blink/renderer/core/workers/dedicated_worker_messaging_proxy.h
index 7bf022b..4c162794 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker_messaging_proxy.h
+++ b/third_party/blink/renderer/core/workers/dedicated_worker_messaging_proxy.h
@@ -9,6 +9,7 @@
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/optional.h"
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/public/mojom/messaging/transferable_message.mojom-blink.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/messaging/message_port.h"
@@ -16,7 +17,6 @@
 #include "third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.h"
 #include "third_party/blink/renderer/core/workers/worker_backing_thread_startup_data.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_test.cc b/third_party/blink/renderer/core/workers/dedicated_worker_test.cc
index 1c11ac7..ab02737e 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker_test.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker_test.cc
@@ -136,7 +136,7 @@
         std::make_unique<GlobalScopeCreationParams>(
             script_url, mojom::ScriptType::kClassic, "fake user agent",
             nullptr /* web_worker_fetch_context */, headers,
-            kReferrerPolicyDefault, security_origin_.get(),
+            network::mojom::ReferrerPolicy::kDefault, security_origin_.get(),
             false /* starter_secure_context */,
             CalculateHttpsState(security_origin_.get()),
             nullptr /* worker_clients */, mojom::IPAddressSpace::kLocal,
diff --git a/third_party/blink/renderer/core/workers/experimental/thread_pool.cc b/third_party/blink/renderer/core/workers/experimental/thread_pool.cc
index d7a5f64..bf4e433 100644
--- a/third_party/blink/renderer/core/workers/experimental/thread_pool.cc
+++ b/third_party/blink/renderer/core/workers/experimental/thread_pool.cc
@@ -113,10 +113,10 @@
   proxy->StartWorker(std::make_unique<GlobalScopeCreationParams>(
       context->Url(), mojom::ScriptType::kClassic, context->UserAgent(),
       nullptr /* web_worker_fetch_context */,
-      context->GetContentSecurityPolicy()->Headers(), kReferrerPolicyDefault,
-      context->GetSecurityOrigin(), context->IsSecureContext(),
-      context->GetHttpsState(), WorkerClients::Create(),
-      context->GetSecurityContext().AddressSpace(),
+      context->GetContentSecurityPolicy()->Headers(),
+      network::mojom::ReferrerPolicy::kDefault, context->GetSecurityOrigin(),
+      context->IsSecureContext(), context->GetHttpsState(),
+      WorkerClients::Create(), context->GetSecurityContext().AddressSpace(),
       OriginTrialContext::GetTokens(context).get(), devtools_worker_token,
       std::move(settings), kV8CacheOptionsDefault,
       nullptr /* worklet_module_responses_map */,
diff --git a/third_party/blink/renderer/core/workers/global_scope_creation_params.cc b/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
index 47a9900..51b2c32b 100644
--- a/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
+++ b/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
@@ -15,7 +15,7 @@
     const String& user_agent,
     scoped_refptr<WebWorkerFetchContext> web_worker_fetch_context,
     const Vector<CSPHeaderAndType>& content_security_policy_parsed_headers,
-    ReferrerPolicy referrer_policy,
+    network::mojom::ReferrerPolicy referrer_policy,
     const SecurityOrigin* starter_origin,
     bool starter_secure_context,
     HttpsState starter_https_state,
diff --git a/third_party/blink/renderer/core/workers/global_scope_creation_params.h b/third_party/blink/renderer/core/workers/global_scope_creation_params.h
index 94d6560..113e5d0 100644
--- a/third_party/blink/renderer/core/workers/global_scope_creation_params.h
+++ b/third_party/blink/renderer/core/workers/global_scope_creation_params.h
@@ -9,6 +9,7 @@
 #include "base/macros.h"
 #include "base/optional.h"
 #include "base/unguessable_token.h"
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "services/service_manager/public/mojom/interface_provider.mojom-blink.h"
 #include "third_party/blink/public/common/feature_policy/feature_policy.h"
 #include "third_party/blink/public/mojom/net/ip_address_space.mojom-blink.h"
@@ -26,7 +27,6 @@
 #include "third_party/blink/renderer/platform/network/content_security_policy_parsers.h"
 #include "third_party/blink/renderer/platform/network/content_security_policy_response_headers.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/wtf/forward.h"
 
 namespace blink {
@@ -45,7 +45,7 @@
       const String& user_agent,
       scoped_refptr<WebWorkerFetchContext>,
       const Vector<CSPHeaderAndType>& content_security_policy_parsed_headers,
-      ReferrerPolicy referrer_policy,
+      network::mojom::ReferrerPolicy referrer_policy,
       const SecurityOrigin*,
       bool starter_secure_context,
       HttpsState starter_https_state,
@@ -90,7 +90,7 @@
   base::Optional<ContentSecurityPolicyResponseHeaders>
       content_security_policy_raw_headers;
 
-  ReferrerPolicy referrer_policy;
+  network::mojom::ReferrerPolicy referrer_policy;
   std::unique_ptr<Vector<String>> origin_trial_tokens;
 
   // The SecurityOrigin of the Document creating a Worker/Worklet.
diff --git a/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.cc b/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.cc
index 6cc6802..124ee1e 100644
--- a/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.cc
+++ b/third_party/blink/renderer/core/workers/threaded_messaging_proxy_base.cc
@@ -10,13 +10,10 @@
 #include "third_party/blink/renderer/bindings/core/v8/source_location.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/frame/deprecation.h"
-#include "third_party/blink/renderer/core/frame/local_frame.h"
-#include "third_party/blink/renderer/core/frame/local_frame_client.h"
 #include "third_party/blink/renderer/core/inspector/console_message.h"
 #include "third_party/blink/renderer/core/inspector/devtools_agent.h"
 #include "third_party/blink/renderer/core/inspector/worker_devtools_params.h"
 #include "third_party/blink/renderer/core/loader/document_loader.h"
-#include "third_party/blink/renderer/core/loader/worker_fetch_context.h"
 #include "third_party/blink/renderer/core/workers/global_scope_creation_params.h"
 #include "third_party/blink/renderer/core/workers/worker_global_scope.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
@@ -63,33 +60,9 @@
 
   KURL script_url = global_scope_creation_params->script_url.Copy();
 
-  scoped_refptr<WebWorkerFetchContext> web_worker_fetch_context;
-  if (auto* document = DynamicTo<Document>(execution_context_.Get())) {
-    LocalFrame* frame = document->GetFrame();
-    web_worker_fetch_context = frame->Client()->CreateWorkerFetchContext();
-    // |web_worker_fetch_context| is null in some unit tests.
-    if (web_worker_fetch_context) {
-      web_worker_fetch_context->SetApplicationCacheHostID(
-          GetExecutionContext()->Fetcher()->Context().ApplicationCacheHostID());
-      web_worker_fetch_context->SetIsOnSubframe(!frame->IsMainFrame());
-    }
-  } else if (auto* scope = DynamicTo<WorkerGlobalScope>(*execution_context_)) {
-    web_worker_fetch_context =
-        static_cast<WorkerFetchContext&>(scope->Fetcher()->Context())
-            .GetWebWorkerFetchContext()
-            ->CloneForNestedWorker();
-  }
-
-  if (web_worker_fetch_context) {
-    web_worker_fetch_context->SetTerminateSyncLoadEvent(
-        &terminate_sync_load_event_);
-
-    // In some cases |web_worker_fetch_context| has already been provided and is
-    // overwritten here, and in other cases |web_worker_fetch_context| has been
-    // nullptr and is set here.
-    // TODO(hiroshige): Clean up this.
-    global_scope_creation_params->web_worker_fetch_context =
-        std::move(web_worker_fetch_context);
+  if (global_scope_creation_params->web_worker_fetch_context) {
+    global_scope_creation_params->web_worker_fetch_context
+        ->SetTerminateSyncLoadEvent(&terminate_sync_load_event_);
   }
 
   worker_thread_ = CreateWorkerThread();
diff --git a/third_party/blink/renderer/core/workers/worker_global_scope.cc b/third_party/blink/renderer/core/workers/worker_global_scope.cc
index 644c6ceb..ac09ce56 100644
--- a/third_party/blink/renderer/core/workers/worker_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/worker_global_scope.cc
@@ -414,7 +414,8 @@
 
   // Step 12.5. "Set worker global scope's referrer policy to the result of
   // parsing the `Referrer-Policy` header of response."
-  ReferrerPolicy referrer_policy = kReferrerPolicyDefault;
+  network::mojom::ReferrerPolicy referrer_policy =
+      network::mojom::ReferrerPolicy::kDefault;
   if (!classic_script_loader->GetReferrerPolicy().IsNull()) {
     SecurityPolicy::ReferrerPolicyFromHeaderValue(
         classic_script_loader->GetReferrerPolicy(),
diff --git a/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc b/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
index 7a179131..0abad63 100644
--- a/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
@@ -232,7 +232,7 @@
   // string."
   ScriptFetchOptions options(nonce, IntegrityMetadataSet(), integrity_attribute,
                              parser_state, credentials_mode,
-                             kReferrerPolicyDefault);
+                             network::mojom::ReferrerPolicy::kDefault);
 
   Modulator* modulator = Modulator::From(ScriptController()->GetScriptState());
   // Step 3. "Perform the internal module script graph fetching procedure ..."
diff --git a/third_party/blink/renderer/core/workers/worker_thread_test.cc b/third_party/blink/renderer/core/workers/worker_thread_test.cc
index ddd1ae8c..05edaaf 100644
--- a/third_party/blink/renderer/core/workers/worker_thread_test.cc
+++ b/third_party/blink/renderer/core/workers/worker_thread_test.cc
@@ -391,7 +391,7 @@
       std::make_unique<GlobalScopeCreationParams>(
           KURL("http://fake.url/"), mojom::ScriptType::kClassic,
           "fake user agent", nullptr /* web_worker_fetch_context */, headers,
-          kReferrerPolicyDefault, security_origin_.get(),
+          network::mojom::ReferrerPolicy::kDefault, security_origin_.get(),
           false /* starter_secure_context */,
           CalculateHttpsState(security_origin_.get()), WorkerClients::Create(),
           mojom::IPAddressSpace::kLocal, nullptr /* originTrialToken */,
diff --git a/third_party/blink/renderer/core/workers/worker_thread_test_helper.h b/third_party/blink/renderer/core/workers/worker_thread_test_helper.h
index 3fca021e..590fb87 100644
--- a/third_party/blink/renderer/core/workers/worker_thread_test_helper.h
+++ b/third_party/blink/renderer/core/workers/worker_thread_test_helper.h
@@ -92,8 +92,9 @@
         {"contentSecurityPolicy", kContentSecurityPolicyHeaderTypeReport}};
     auto creation_params = std::make_unique<GlobalScopeCreationParams>(
         script_url, mojom::ScriptType::kClassic, "fake user agent",
-        nullptr /* web_worker_fetch_context */, headers, kReferrerPolicyDefault,
-        security_origin, false /* starter_secure_context */,
+        nullptr /* web_worker_fetch_context */, headers,
+        network::mojom::ReferrerPolicy::kDefault, security_origin,
+        false /* starter_secure_context */,
         CalculateHttpsState(security_origin), worker_clients,
         mojom::IPAddressSpace::kLocal, nullptr,
         base::UnguessableToken::Create(),
diff --git a/third_party/blink/renderer/core/xml/parser/xml_document_parser.cc b/third_party/blink/renderer/core/xml/parser/xml_document_parser.cc
index 688db06..914c7d76 100644
--- a/third_party/blink/renderer/core/xml/parser/xml_document_parser.cc
+++ b/third_party/blink/renderer/core/xml/parser/xml_document_parser.cc
@@ -1349,11 +1349,11 @@
                                        char* target,
                                        size_t target_size) {
   const char* original_target = target;
-  WTF::Unicode::ConversionResult conversion_result =
-      WTF::Unicode::ConvertUTF16ToUTF8(&utf16_entity,
+  WTF::unicode::ConversionResult conversion_result =
+      WTF::unicode::ConvertUTF16ToUTF8(&utf16_entity,
                                        utf16_entity + number_of_code_units,
                                        &target, target + target_size);
-  if (conversion_result != WTF::Unicode::kConversionOK)
+  if (conversion_result != WTF::unicode::kConversionOK)
     return 0;
 
   DCHECK_GT(target, original_target);
diff --git a/third_party/blink/renderer/core/xml/xpath_parser.cc b/third_party/blink/renderer/core/xml/xpath_parser.cc
index 2d19a692..f443f68 100644
--- a/third_party/blink/renderer/core/xml/xpath_parser.cc
+++ b/third_party/blink/renderer/core/xml/xpath_parser.cc
@@ -54,16 +54,16 @@
 
   if (a_char == '.' || a_char == '-')
     return kNameCont;
-  WTF::Unicode::CharCategory category = WTF::Unicode::Category(a_char);
+  WTF::unicode::CharCategory category = WTF::unicode::Category(a_char);
   if (category &
-      (WTF::Unicode::kLetter_Uppercase | WTF::Unicode::kLetter_Lowercase |
-       WTF::Unicode::kLetter_Other | WTF::Unicode::kLetter_Titlecase |
-       WTF::Unicode::kNumber_Letter))
+      (WTF::unicode::kLetter_Uppercase | WTF::unicode::kLetter_Lowercase |
+       WTF::unicode::kLetter_Other | WTF::unicode::kLetter_Titlecase |
+       WTF::unicode::kNumber_Letter))
     return kNameStart;
   if (category &
-      (WTF::Unicode::kMark_NonSpacing | WTF::Unicode::kMark_SpacingCombining |
-       WTF::Unicode::kMark_Enclosing | WTF::Unicode::kLetter_Modifier |
-       WTF::Unicode::kNumber_DecimalDigit))
+      (WTF::unicode::kMark_NonSpacing | WTF::unicode::kMark_SpacingCombining |
+       WTF::unicode::kMark_Enclosing | WTF::unicode::kLetter_Modifier |
+       WTF::unicode::kNumber_DecimalDigit))
     return kNameCont;
   return kNotPartOfName;
 }
diff --git a/third_party/blink/renderer/core/xml/xslt_processor_libxslt.cc b/third_party/blink/renderer/core/xml/xslt_processor_libxslt.cc
index 86bab60..47e5f3c 100644
--- a/third_party/blink/renderer/core/xml/xslt_processor_libxslt.cc
+++ b/third_party/blink/renderer/core/xml/xslt_processor_libxslt.cc
@@ -182,10 +182,10 @@
   UChar* buffer_u_char_end = buffer_u_char + len;
 
   const char* string_current = buffer;
-  WTF::Unicode::ConversionResult result = WTF::Unicode::ConvertUTF8ToUTF16(
+  WTF::unicode::ConversionResult result = WTF::unicode::ConvertUTF8ToUTF16(
       &string_current, buffer + len, &buffer_u_char, buffer_u_char_end);
-  if (result != WTF::Unicode::kConversionOK &&
-      result != WTF::Unicode::kSourceExhausted) {
+  if (result != WTF::unicode::kConversionOK &&
+      result != WTF::unicode::kSourceExhausted) {
     NOTREACHED();
     return -1;
   }
diff --git a/third_party/blink/renderer/modules/cache_storage/DEPS b/third_party/blink/renderer/modules/cache_storage/DEPS
index ba54022..c4508ff 100644
--- a/third_party/blink/renderer/modules/cache_storage/DEPS
+++ b/third_party/blink/renderer/modules/cache_storage/DEPS
@@ -1,6 +1,5 @@
 include_rules = [
     "+mojo/public/cpp/bindings",
-    "+services/network/public/mojom",
     "-third_party/blink/renderer/modules",
     "+third_party/blink/renderer/modules/cache_storage",
     "+third_party/blink/renderer/modules/event_modules.h",
diff --git a/third_party/blink/renderer/modules/cookie_store/DEPS b/third_party/blink/renderer/modules/cookie_store/DEPS
index 9ab1bbf8..74bc32f0 100644
--- a/third_party/blink/renderer/modules/cookie_store/DEPS
+++ b/third_party/blink/renderer/modules/cookie_store/DEPS
@@ -1,4 +1,3 @@
 include_rules = [
     "+mojo/public/cpp/bindings/binding.h",
-    "+services/network/public/mojom/restricted_cookie_manager.mojom-blink.h",
 ]
diff --git a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
index 37b83ed..5bcb80c 100644
--- a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
+++ b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
@@ -32,6 +32,7 @@
 
 #include <memory>
 #include "services/network/public/cpp/shared_url_loader_factory.h"
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/public/mojom/service_worker/service_worker_installed_scripts_manager.mojom-blink.h"
 #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h"
 #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_provider.h"
@@ -67,7 +68,6 @@
 #include "third_party/blink/renderer/platform/network/network_utils.h"
 #include "third_party/blink/renderer/platform/shared_buffer.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 #include "third_party/blink/renderer/platform/weborigin/security_policy.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
@@ -396,7 +396,8 @@
   if (main_script_loader_) {
     ContentSecurityPolicy* content_security_policy =
         main_script_loader_->GetContentSecurityPolicy();
-    ReferrerPolicy referrer_policy = kReferrerPolicyDefault;
+    network::mojom::ReferrerPolicy referrer_policy =
+        network::mojom::ReferrerPolicy::kDefault;
     if (!main_script_loader_->GetReferrerPolicy().IsNull()) {
       SecurityPolicy::ReferrerPolicyFromHeaderValue(
           main_script_loader_->GetReferrerPolicy(),
@@ -424,10 +425,11 @@
     global_scope_creation_params = std::make_unique<GlobalScopeCreationParams>(
         worker_start_data_.script_url, worker_start_data_.script_type,
         worker_start_data_.user_agent, std::move(web_worker_fetch_context),
-        Vector<CSPHeaderAndType>(), kReferrerPolicyDefault, starter_origin,
-        starter_secure_context, starter_https_state, worker_clients,
-        worker_start_data_.address_space, nullptr /* OriginTrialTokens */,
-        devtools_worker_token_, std::move(worker_settings),
+        Vector<CSPHeaderAndType>(), network::mojom::ReferrerPolicy::kDefault,
+        starter_origin, starter_secure_context, starter_https_state,
+        worker_clients, worker_start_data_.address_space,
+        nullptr /* OriginTrialTokens */, devtools_worker_token_,
+        std::move(worker_settings),
         static_cast<V8CacheOptions>(worker_start_data_.v8_cache_options),
         nullptr /* worklet_module_respones_map */,
         std::move(interface_provider_info_));
diff --git a/third_party/blink/renderer/modules/exported/web_idb_key.cc b/third_party/blink/renderer/modules/exported/web_idb_key.cc
index 4b26410..2d0dbfd 100644
--- a/third_party/blink/renderer/modules/exported/web_idb_key.cc
+++ b/third_party/blink/renderer/modules/exported/web_idb_key.cc
@@ -122,6 +122,10 @@
 
 WebIDBKey::~WebIDBKey() noexcept = default;
 
+std::unique_ptr<IDBKey> WebIDBKey::ReleaseIdbKey() noexcept {
+  return std::move(private_);
+}
+
 WebIDBKey::WebIDBKey(std::unique_ptr<IDBKey> idb_key) noexcept
     : private_(std::move(idb_key)) {}
 WebIDBKey& WebIDBKey::operator=(std::unique_ptr<IDBKey> idb_key) noexcept {
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_key_path.cc b/third_party/blink/renderer/modules/indexeddb/idb_key_path.cc
index af493f27..ca3f5c67 100644
--- a/third_party/blink/renderer/modules/indexeddb/idb_key_path.cc
+++ b/third_party/blink/renderer/modules/indexeddb/idb_key_path.cc
@@ -38,22 +38,22 @@
 
 // The following correspond to grammar in ECMA-262.
 const uint32_t kUnicodeLetter =
-    WTF::Unicode::kLetter_Uppercase | WTF::Unicode::kLetter_Lowercase |
-    WTF::Unicode::kLetter_Titlecase | WTF::Unicode::kLetter_Modifier |
-    WTF::Unicode::kLetter_Other | WTF::Unicode::kNumber_Letter;
+    WTF::unicode::kLetter_Uppercase | WTF::unicode::kLetter_Lowercase |
+    WTF::unicode::kLetter_Titlecase | WTF::unicode::kLetter_Modifier |
+    WTF::unicode::kLetter_Other | WTF::unicode::kNumber_Letter;
 const uint32_t kUnicodeCombiningMark =
-    WTF::Unicode::kMark_NonSpacing | WTF::Unicode::kMark_SpacingCombining;
-const uint32_t kUnicodeDigit = WTF::Unicode::kNumber_DecimalDigit;
+    WTF::unicode::kMark_NonSpacing | WTF::unicode::kMark_SpacingCombining;
+const uint32_t kUnicodeDigit = WTF::unicode::kNumber_DecimalDigit;
 const uint32_t kUnicodeConnectorPunctuation =
-    WTF::Unicode::kPunctuation_Connector;
+    WTF::unicode::kPunctuation_Connector;
 
 static inline bool IsIdentifierStartCharacter(UChar c) {
-  return (WTF::Unicode::Category(c) & kUnicodeLetter) || (c == '$') ||
+  return (WTF::unicode::Category(c) & kUnicodeLetter) || (c == '$') ||
          (c == '_');
 }
 
 static inline bool IsIdentifierCharacter(UChar c) {
-  return (WTF::Unicode::Category(c) &
+  return (WTF::unicode::Category(c) &
           (kUnicodeLetter | kUnicodeCombiningMark | kUnicodeDigit |
            kUnicodeConnectorPunctuation)) ||
          (c == '$') || (c == '_') || (c == kZeroWidthNonJoinerCharacter) ||
diff --git a/third_party/blink/renderer/modules/peerconnection/call_setup_state_tracker.cc b/third_party/blink/renderer/modules/peerconnection/call_setup_state_tracker.cc
index 1a26852..260301a 100644
--- a/third_party/blink/renderer/modules/peerconnection/call_setup_state_tracker.cc
+++ b/third_party/blink/renderer/modules/peerconnection/call_setup_state_tracker.cc
@@ -92,7 +92,7 @@
   return answerer_state_;
 }
 
-CallSetupState CallSetupStateTracker::CallSetupState() const {
+CallSetupState CallSetupStateTracker::GetCallSetupState() const {
   if (offerer_state_ == OffererState::kNotStarted &&
       answerer_state_ == AnswererState::kNotStarted) {
     return CallSetupState::kNotStarted;
diff --git a/third_party/blink/renderer/modules/peerconnection/call_setup_state_tracker.h b/third_party/blink/renderer/modules/peerconnection/call_setup_state_tracker.h
index 4202740..eb02252 100644
--- a/third_party/blink/renderer/modules/peerconnection/call_setup_state_tracker.h
+++ b/third_party/blink/renderer/modules/peerconnection/call_setup_state_tracker.h
@@ -99,7 +99,7 @@
 
   OffererState offerer_state() const;
   AnswererState answerer_state() const;
-  CallSetupState CallSetupState() const;
+  CallSetupState GetCallSetupState() const;
 
   bool NoteOffererStateEvent(OffererState event);
   bool NoteAnswererStateEvent(AnswererState event);
diff --git a/third_party/blink/renderer/modules/peerconnection/call_setup_state_tracker_unittest.cc b/third_party/blink/renderer/modules/peerconnection/call_setup_state_tracker_unittest.cc
index ad8b434..27e82fb 100644
--- a/third_party/blink/renderer/modules/peerconnection/call_setup_state_tracker_unittest.cc
+++ b/third_party/blink/renderer/modules/peerconnection/call_setup_state_tracker_unittest.cc
@@ -127,7 +127,7 @@
 TEST_F(CallSetupStateTrackerTest, InitialState) {
   EXPECT_EQ(OffererState::kNotStarted, tracker_.offerer_state());
   EXPECT_EQ(AnswererState::kNotStarted, tracker_.answerer_state());
-  EXPECT_EQ(CallSetupState::kNotStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kNotStarted, tracker_.GetCallSetupState());
 }
 
 TEST_F(CallSetupStateTrackerTest, OffererSuccessfulNegotiation) {
@@ -136,7 +136,7 @@
   EXPECT_TRUE(
       tracker_.NoteOffererStateEvent(OffererState::kCreateOfferPending));
   EXPECT_EQ(OffererState::kCreateOfferPending, tracker_.offerer_state());
-  EXPECT_EQ(CallSetupState::kStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_.GetCallSetupState());
   EXPECT_TRUE(VerifyOnlyReachableStates<OffererState>(
       {OffererState::kCreateOfferResolved,
        OffererState::kCreateOfferRejected}));
@@ -162,22 +162,22 @@
   EXPECT_TRUE(VerifyOnlyReachableStates<OffererState>(
       {OffererState::kSetRemoteAnswerResolved,
        OffererState::kSetRemoteAnswerRejected}));
-  EXPECT_EQ(CallSetupState::kStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteOffererStateEvent(OffererState::kSetRemoteAnswerResolved));
   EXPECT_EQ(OffererState::kSetRemoteAnswerResolved, tracker_.offerer_state());
-  EXPECT_EQ(CallSetupState::kSucceeded, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kSucceeded, tracker_.GetCallSetupState());
   EXPECT_TRUE(VerifyOnlyReachableStates<OffererState>({}));
 }
 
 TEST_F(CallSetupStateTrackerTest, OffererCreateOfferRejected) {
   EXPECT_TRUE(
       tracker_.NoteOffererStateEvent(OffererState::kCreateOfferPending));
-  EXPECT_EQ(CallSetupState::kStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteOffererStateEvent(OffererState::kCreateOfferRejected));
   EXPECT_EQ(OffererState::kCreateOfferRejected, tracker_.offerer_state());
-  EXPECT_EQ(CallSetupState::kFailed, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_.GetCallSetupState());
   EXPECT_TRUE(VerifyOnlyReachableStates<OffererState>(
       {OffererState::kCreateOfferResolved}));
 }
@@ -189,11 +189,11 @@
       tracker_.NoteOffererStateEvent(OffererState::kCreateOfferResolved));
   EXPECT_TRUE(
       tracker_.NoteOffererStateEvent(OffererState::kSetLocalOfferPending));
-  EXPECT_EQ(CallSetupState::kStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteOffererStateEvent(OffererState::kSetLocalOfferRejected));
   EXPECT_EQ(OffererState::kSetLocalOfferRejected, tracker_.offerer_state());
-  EXPECT_EQ(CallSetupState::kFailed, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_.GetCallSetupState());
   EXPECT_TRUE(VerifyOnlyReachableStates<OffererState>(
       {OffererState::kSetLocalOfferResolved}));
 }
@@ -209,11 +209,11 @@
       tracker_.NoteOffererStateEvent(OffererState::kSetLocalOfferResolved));
   EXPECT_TRUE(
       tracker_.NoteOffererStateEvent(OffererState::kSetRemoteAnswerPending));
-  EXPECT_EQ(CallSetupState::kStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteOffererStateEvent(OffererState::kSetRemoteAnswerRejected));
   EXPECT_EQ(OffererState::kSetRemoteAnswerRejected, tracker_.offerer_state());
-  EXPECT_EQ(CallSetupState::kFailed, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_.GetCallSetupState());
   EXPECT_TRUE(VerifyOnlyReachableStates<OffererState>(
       {OffererState::kSetRemoteAnswerResolved}));
 }
@@ -229,18 +229,18 @@
       tracker_.NoteOffererStateEvent(OffererState::kSetLocalOfferResolved));
   EXPECT_TRUE(
       tracker_.NoteOffererStateEvent(OffererState::kSetRemoteAnswerPending));
-  EXPECT_EQ(CallSetupState::kStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteOffererStateEvent(OffererState::kSetRemoteAnswerRejected));
-  EXPECT_EQ(CallSetupState::kFailed, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_.GetCallSetupState());
   // Pending another operation should not revert the states to "pending" or
   // "started".
   EXPECT_FALSE(
       tracker_.NoteOffererStateEvent(OffererState::kSetRemoteAnswerPending));
-  EXPECT_EQ(CallSetupState::kFailed, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteOffererStateEvent(OffererState::kSetRemoteAnswerResolved));
-  EXPECT_EQ(CallSetupState::kSucceeded, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kSucceeded, tracker_.GetCallSetupState());
 }
 
 TEST_F(CallSetupStateTrackerTest, AnswererSuccessfulNegotiation) {
@@ -249,7 +249,7 @@
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kSetRemoteOfferPending));
   EXPECT_EQ(AnswererState::kSetRemoteOfferPending, tracker_.answerer_state());
-  EXPECT_EQ(CallSetupState::kStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_.GetCallSetupState());
   EXPECT_TRUE(VerifyOnlyReachableStates<AnswererState>(
       {AnswererState::kSetRemoteOfferResolved,
        AnswererState::kSetRemoteOfferRejected}));
@@ -275,22 +275,22 @@
   EXPECT_TRUE(VerifyOnlyReachableStates<AnswererState>(
       {AnswererState::kSetLocalAnswerResolved,
        AnswererState::kSetLocalAnswerRejected}));
-  EXPECT_EQ(CallSetupState::kStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kSetLocalAnswerResolved));
   EXPECT_EQ(AnswererState::kSetLocalAnswerResolved, tracker_.answerer_state());
-  EXPECT_EQ(CallSetupState::kSucceeded, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kSucceeded, tracker_.GetCallSetupState());
   EXPECT_TRUE(VerifyOnlyReachableStates<AnswererState>({}));
 }
 
 TEST_F(CallSetupStateTrackerTest, AnswererSetRemoteOfferRejected) {
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kSetRemoteOfferPending));
-  EXPECT_EQ(CallSetupState::kStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kSetRemoteOfferRejected));
   EXPECT_EQ(AnswererState::kSetRemoteOfferRejected, tracker_.answerer_state());
-  EXPECT_EQ(CallSetupState::kFailed, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_.GetCallSetupState());
   EXPECT_TRUE(VerifyOnlyReachableStates<AnswererState>(
       {AnswererState::kSetRemoteOfferResolved}));
 }
@@ -302,11 +302,11 @@
       tracker_.NoteAnswererStateEvent(AnswererState::kSetRemoteOfferResolved));
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kCreateAnswerPending));
-  EXPECT_EQ(CallSetupState::kStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kCreateAnswerRejected));
   EXPECT_EQ(AnswererState::kCreateAnswerRejected, tracker_.answerer_state());
-  EXPECT_EQ(CallSetupState::kFailed, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_.GetCallSetupState());
   EXPECT_TRUE(VerifyOnlyReachableStates<AnswererState>(
       {AnswererState::kCreateAnswerResolved}));
 }
@@ -322,11 +322,11 @@
       tracker_.NoteAnswererStateEvent(AnswererState::kCreateAnswerResolved));
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kSetLocalAnswerPending));
-  EXPECT_EQ(CallSetupState::kStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kSetLocalAnswerRejected));
   EXPECT_EQ(AnswererState::kSetLocalAnswerRejected, tracker_.answerer_state());
-  EXPECT_EQ(CallSetupState::kFailed, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_.GetCallSetupState());
   EXPECT_TRUE(VerifyOnlyReachableStates<AnswererState>(
       {AnswererState::kSetLocalAnswerResolved}));
 }
@@ -342,18 +342,18 @@
       tracker_.NoteAnswererStateEvent(AnswererState::kCreateAnswerResolved));
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kSetLocalAnswerPending));
-  EXPECT_EQ(CallSetupState::kStarted, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kSetLocalAnswerRejected));
-  EXPECT_EQ(CallSetupState::kFailed, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_.GetCallSetupState());
   // Pending another operation should not revert the states to "pending" or
   // "started".
   EXPECT_FALSE(
       tracker_.NoteAnswererStateEvent(AnswererState::kSetLocalAnswerPending));
-  EXPECT_EQ(CallSetupState::kFailed, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kSetLocalAnswerResolved));
-  EXPECT_EQ(CallSetupState::kSucceeded, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kSucceeded, tracker_.GetCallSetupState());
 }
 
 // Succeeding in one role and subsequently failing in another should not revert
@@ -372,13 +372,13 @@
       tracker_.NoteOffererStateEvent(OffererState::kSetRemoteAnswerPending));
   EXPECT_TRUE(
       tracker_.NoteOffererStateEvent(OffererState::kSetRemoteAnswerResolved));
-  EXPECT_EQ(CallSetupState::kSucceeded, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kSucceeded, tracker_.GetCallSetupState());
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kSetRemoteOfferPending));
   EXPECT_TRUE(
       tracker_.NoteAnswererStateEvent(AnswererState::kSetRemoteOfferRejected));
   // Still succeeded.
-  EXPECT_EQ(CallSetupState::kSucceeded, tracker_.CallSetupState());
+  EXPECT_EQ(CallSetupState::kSucceeded, tracker_.GetCallSetupState());
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_test.cc
index b74e7e0..7a81618 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_test.cc
@@ -839,7 +839,7 @@
   Initialize(scope);
   EXPECT_EQ(OffererState::kNotStarted, tracker_->offerer_state());
   EXPECT_EQ(AnswererState::kNotStarted, tracker_->answerer_state());
-  EXPECT_EQ(CallSetupState::kNotStarted, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kNotStarted, tracker_->GetCallSetupState());
 }
 
 TEST_F(RTCPeerConnectionCallSetupStateTest, OffererSucceeded) {
@@ -848,7 +848,7 @@
   // createOffer()
   pc->createOffer(scope.GetScriptState(), RTCOfferOptions::Create());
   EXPECT_EQ(OffererState::kCreateOfferPending, tracker_->offerer_state());
-  EXPECT_EQ(CallSetupState::kStarted, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_->GetCallSetupState());
   platform_->RunUntilIdle();
   EXPECT_EQ(OffererState::kCreateOfferResolved, tracker_->offerer_state());
   // setLocalDescription(offer)
@@ -859,10 +859,10 @@
   // setRemoteDescription(answer)
   pc->setRemoteDescription(scope.GetScriptState(), EmptyAnswer());
   EXPECT_EQ(OffererState::kSetRemoteAnswerPending, tracker_->offerer_state());
-  EXPECT_EQ(CallSetupState::kStarted, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_->GetCallSetupState());
   platform_->RunUntilIdle();
   EXPECT_EQ(OffererState::kSetRemoteAnswerResolved, tracker_->offerer_state());
-  EXPECT_EQ(CallSetupState::kSucceeded, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kSucceeded, tracker_->GetCallSetupState());
 }
 
 TEST_F(RTCPeerConnectionCallSetupStateTest, OffererFailedAtCreateOffer) {
@@ -873,7 +873,7 @@
   pc->createOffer(scope.GetScriptState(), RTCOfferOptions::Create());
   platform_->RunUntilIdle();
   EXPECT_EQ(OffererState::kCreateOfferRejected, tracker_->offerer_state());
-  EXPECT_EQ(CallSetupState::kFailed, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_->GetCallSetupState());
 }
 
 TEST_F(RTCPeerConnectionCallSetupStateTest,
@@ -888,7 +888,7 @@
   pc->setLocalDescription(scope.GetScriptState(), EmptyOffer());
   platform_->RunUntilIdle();
   EXPECT_EQ(OffererState::kSetLocalOfferRejected, tracker_->offerer_state());
-  EXPECT_EQ(CallSetupState::kFailed, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_->GetCallSetupState());
 }
 
 TEST_F(RTCPeerConnectionCallSetupStateTest,
@@ -906,7 +906,7 @@
   pc->setRemoteDescription(scope.GetScriptState(), EmptyAnswer());
   platform_->RunUntilIdle();
   EXPECT_EQ(OffererState::kSetRemoteAnswerRejected, tracker_->offerer_state());
-  EXPECT_EQ(CallSetupState::kFailed, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_->GetCallSetupState());
 }
 
 TEST_F(RTCPeerConnectionCallSetupStateTest, OffererLegacyApiPath) {
@@ -919,7 +919,7 @@
                   ToDictionary(scope, RTCOfferOptions::Create()),
                   scope.GetExceptionState());
   EXPECT_EQ(OffererState::kCreateOfferPending, tracker_->offerer_state());
-  EXPECT_EQ(CallSetupState::kStarted, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_->GetCallSetupState());
   platform_->RunUntilIdle();
   EXPECT_EQ(OffererState::kCreateOfferResolved, tracker_->offerer_state());
   // Legacy setLocalDescription(offer) with callbacks
@@ -936,10 +936,10 @@
       CreateEmptyCallback<V8VoidFunction>(scope),
       CreateEmptyCallback<V8RTCPeerConnectionErrorCallback>(scope));
   EXPECT_EQ(OffererState::kSetRemoteAnswerPending, tracker_->offerer_state());
-  EXPECT_EQ(CallSetupState::kStarted, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_->GetCallSetupState());
   platform_->RunUntilIdle();
   EXPECT_EQ(OffererState::kSetRemoteAnswerResolved, tracker_->offerer_state());
-  EXPECT_EQ(CallSetupState::kSucceeded, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kSucceeded, tracker_->GetCallSetupState());
 }
 
 TEST_F(RTCPeerConnectionCallSetupStateTest, AnswererSucceeded) {
@@ -948,7 +948,7 @@
   // setRemoteDescription(offer)
   pc->setRemoteDescription(scope.GetScriptState(), EmptyOffer());
   EXPECT_EQ(AnswererState::kSetRemoteOfferPending, tracker_->answerer_state());
-  EXPECT_EQ(CallSetupState::kStarted, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_->GetCallSetupState());
   platform_->RunUntilIdle();
   EXPECT_EQ(AnswererState::kSetRemoteOfferResolved, tracker_->answerer_state());
   // createAnswer()
@@ -959,10 +959,10 @@
   // setLocalDescription(answer)
   pc->setLocalDescription(scope.GetScriptState(), EmptyAnswer());
   EXPECT_EQ(AnswererState::kSetLocalAnswerPending, tracker_->answerer_state());
-  EXPECT_EQ(CallSetupState::kStarted, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_->GetCallSetupState());
   platform_->RunUntilIdle();
   EXPECT_EQ(AnswererState::kSetLocalAnswerResolved, tracker_->answerer_state());
-  EXPECT_EQ(CallSetupState::kSucceeded, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kSucceeded, tracker_->GetCallSetupState());
 }
 
 TEST_F(RTCPeerConnectionCallSetupStateTest,
@@ -974,7 +974,7 @@
   pc->setRemoteDescription(scope.GetScriptState(), EmptyOffer());
   platform_->RunUntilIdle();
   EXPECT_EQ(AnswererState::kSetRemoteOfferRejected, tracker_->answerer_state());
-  EXPECT_EQ(CallSetupState::kFailed, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_->GetCallSetupState());
 }
 
 TEST_F(RTCPeerConnectionCallSetupStateTest, AnswererFailedAtCreateAnswer) {
@@ -988,7 +988,7 @@
   pc->createAnswer(scope.GetScriptState(), RTCAnswerOptions::Create());
   platform_->RunUntilIdle();
   EXPECT_EQ(AnswererState::kCreateAnswerRejected, tracker_->answerer_state());
-  EXPECT_EQ(CallSetupState::kFailed, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_->GetCallSetupState());
 }
 
 TEST_F(RTCPeerConnectionCallSetupStateTest,
@@ -1006,7 +1006,7 @@
   pc->setLocalDescription(scope.GetScriptState(), EmptyAnswer());
   platform_->RunUntilIdle();
   EXPECT_EQ(AnswererState::kSetLocalAnswerRejected, tracker_->answerer_state());
-  EXPECT_EQ(CallSetupState::kFailed, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kFailed, tracker_->GetCallSetupState());
 }
 
 TEST_F(RTCPeerConnectionCallSetupStateTest, AnswererLegacyApiPath) {
@@ -1018,7 +1018,7 @@
       CreateEmptyCallback<V8VoidFunction>(scope),
       CreateEmptyCallback<V8RTCPeerConnectionErrorCallback>(scope));
   EXPECT_EQ(AnswererState::kSetRemoteOfferPending, tracker_->answerer_state());
-  EXPECT_EQ(CallSetupState::kStarted, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_->GetCallSetupState());
   platform_->RunUntilIdle();
   EXPECT_EQ(AnswererState::kSetRemoteOfferResolved, tracker_->answerer_state());
   // Legacy createAnswer() with callbacks
@@ -1035,10 +1035,10 @@
       CreateEmptyCallback<V8VoidFunction>(scope),
       CreateEmptyCallback<V8RTCPeerConnectionErrorCallback>(scope));
   EXPECT_EQ(AnswererState::kSetLocalAnswerPending, tracker_->answerer_state());
-  EXPECT_EQ(CallSetupState::kStarted, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kStarted, tracker_->GetCallSetupState());
   platform_->RunUntilIdle();
   EXPECT_EQ(AnswererState::kSetLocalAnswerResolved, tracker_->answerer_state());
-  EXPECT_EQ(CallSetupState::kSucceeded, tracker_->CallSetupState());
+  EXPECT_EQ(CallSetupState::kSucceeded, tracker_->GetCallSetupState());
 }
 
 // Test that simple Plan B is considered safe regardless of configurations.
diff --git a/third_party/blink/renderer/modules/service_worker/DEPS b/third_party/blink/renderer/modules/service_worker/DEPS
index a6301af..831dcbc 100644
--- a/third_party/blink/renderer/modules/service_worker/DEPS
+++ b/third_party/blink/renderer/modules/service_worker/DEPS
@@ -3,7 +3,6 @@
     "+base/threading/thread_checker.h",
     "+mojo/public/cpp/bindings/strong_binding.h",
     "+mojo/public/cpp/system/data_pipe.h",
-    "+services/network/public/mojom",
     "-third_party/blink/renderer/modules",
     "+third_party/blink/renderer/modules/event_modules.h",
     "+third_party/blink/renderer/modules/event_target_modules.h",
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
index ea726c6..b8e6237 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
@@ -103,7 +103,8 @@
     // CSP headers, referrer policy, and origin trial tokens will be provided by
     // the InstalledScriptsManager in EvaluateClassicScript().
     DCHECK(creation_params->content_security_policy_parsed_headers.IsEmpty());
-    DCHECK_EQ(kReferrerPolicyDefault, creation_params->referrer_policy);
+    DCHECK_EQ(network::mojom::ReferrerPolicy::kDefault,
+              creation_params->referrer_policy);
     DCHECK(creation_params->origin_trial_tokens->IsEmpty());
   }
   return MakeGarbageCollected<ServiceWorkerGlobalScope>(
diff --git a/third_party/blink/renderer/modules/storage/cached_storage_area.cc b/third_party/blink/renderer/modules/storage/cached_storage_area.cc
index f2fb489..a69d416 100644
--- a/third_party/blink/renderer/modules/storage/cached_storage_area.cc
+++ b/third_party/blink/renderer/modules/storage/cached_storage_area.cc
@@ -600,13 +600,13 @@
         uint8_t* buffer = buffer_vector.data();
         const LChar* characters = input.Characters8();
 
-        WTF::Unicode::ConversionResult result =
-            WTF::Unicode::ConvertLatin1ToUTF8(
+        WTF::unicode::ConversionResult result =
+            WTF::unicode::ConvertLatin1ToUTF8(
                 &characters, characters + length,
                 reinterpret_cast<char**>(&buffer),
                 reinterpret_cast<char*>(buffer + buffer_vector.size()));
         // (length * 3) should be sufficient for any conversion
-        DCHECK_NE(result, WTF::Unicode::kTargetExhausted);
+        DCHECK_NE(result, WTF::unicode::kTargetExhausted);
         buffer_vector.Shrink(
             static_cast<wtf_size_t>(buffer - buffer_vector.data()));
         return buffer_vector;
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
index bb363f3..6484c83 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
+++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -866,7 +866,8 @@
     GL_SRGB8_ALPHA8, GL_R8I,      GL_R8UI,     GL_R16I,       GL_R16UI,
     GL_R32I,         GL_R32UI,    GL_RG8I,     GL_RG8UI,      GL_RG16I,
     GL_RG16UI,       GL_RG32I,    GL_RG32UI,   GL_RGBA8I,     GL_RGBA8UI,
-    GL_RGBA16I,      GL_RGBA16UI, GL_RGBA32I,  GL_RGBA32UI,
+    GL_RGBA16I,      GL_RGBA16UI, GL_RGBA32I,  GL_RGBA32UI,   GL_RGB32I,
+    GL_RGB32UI,      GL_RGB8I,    GL_RGB8UI,   GL_RGB16I,     GL_RGB16UI,
 };
 
 // ES3 enums only supported by TexImage
@@ -882,12 +883,6 @@
     GL_RGB9_E5,
     GL_RGB16F,
     GL_RGB32F,
-    GL_RGB8UI,
-    GL_RGB8I,
-    GL_RGB16UI,
-    GL_RGB16I,
-    GL_RGB32UI,
-    GL_RGB32I,
     GL_RGBA8_SNORM,
     GL_RGBA16F,
     GL_RGBA32F,
diff --git a/third_party/blink/renderer/modules/websockets/DEPS b/third_party/blink/renderer/modules/websockets/DEPS
index 601a4f2..885d108 100644
--- a/third_party/blink/renderer/modules/websockets/DEPS
+++ b/third_party/blink/renderer/modules/websockets/DEPS
@@ -1,6 +1,5 @@
 include_rules = [
     "+mojo/public/cpp/bindings",
-    "+services/network/public/mojom/websocket.mojom-blink.h",
     "-third_party/blink/renderer/modules",
     "+third_party/blink/renderer/modules/event_modules.h",
     "+third_party/blink/renderer/modules/event_target_modules.h",
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn
index d584c90..f781963 100644
--- a/third_party/blink/renderer/platform/BUILD.gn
+++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -1379,7 +1379,6 @@
     "weborigin/origin_access_entry.cc",
     "weborigin/origin_access_entry.h",
     "weborigin/referrer.h",
-    "weborigin/referrer_policy.h",
     "weborigin/scheme_registry.cc",
     "weborigin/scheme_registry.h",
     "weborigin/security_origin.cc",
diff --git a/third_party/blink/renderer/platform/DEPS b/third_party/blink/renderer/platform/DEPS
index 21a067f..86b40804 100644
--- a/third_party/blink/renderer/platform/DEPS
+++ b/third_party/blink/renderer/platform/DEPS
@@ -56,7 +56,6 @@
     "+mozilla",
     "+services/metrics/public/cpp/ukm_entry_builder.h",
     "+services/metrics/public/cpp/ukm_recorder.h",
-    "+services/network/public/mojom/data_pipe_getter.mojom-blink.h",
     "+services/viz/public/interfaces/compositing/compositor_frame_sink.mojom-blink.h",
     "+skia/ext",
     #TODO(nverne): remove this
diff --git a/third_party/blink/renderer/platform/exported/web_prerender.cc b/third_party/blink/renderer/platform/exported/web_prerender.cc
index c0b0036ea..fbe19674 100644
--- a/third_party/blink/renderer/platform/exported/web_prerender.cc
+++ b/third_party/blink/renderer/platform/exported/web_prerender.cc
@@ -91,8 +91,7 @@
 }
 
 network::mojom::ReferrerPolicy WebPrerender::GetReferrerPolicy() const {
-  return static_cast<network::mojom::ReferrerPolicy>(
-      private_->GetReferrerPolicy());
+  return private_->GetReferrerPolicy();
 }
 
 void WebPrerender::SetExtraData(WebPrerender::ExtraData* extra_data) {
diff --git a/third_party/blink/renderer/platform/exported/web_service_worker_request.cc b/third_party/blink/renderer/platform/exported/web_service_worker_request.cc
index 8b0b2fc..1a4b4ae 100644
--- a/third_party/blink/renderer/platform/exported/web_service_worker_request.cc
+++ b/third_party/blink/renderer/platform/exported/web_service_worker_request.cc
@@ -155,8 +155,7 @@
   DCHECK_EQ(Referrer::NoReferrer(), String());
   String referrer =
       web_referrer.IsEmpty() ? Referrer::NoReferrer() : String(web_referrer);
-  private_->referrer_ =
-      Referrer(referrer, static_cast<ReferrerPolicy>(referrer_policy));
+  private_->referrer_ = Referrer(referrer, referrer_policy);
 }
 
 WebURL WebServiceWorkerRequest::ReferrerUrl() const {
@@ -165,8 +164,7 @@
 
 network::mojom::ReferrerPolicy WebServiceWorkerRequest::GetReferrerPolicy()
     const {
-  return static_cast<network::mojom::ReferrerPolicy>(
-      private_->referrer_.referrer_policy);
+  return private_->referrer_.referrer_policy;
 }
 
 const Referrer& WebServiceWorkerRequest::GetReferrer() const {
diff --git a/third_party/blink/renderer/platform/exported/web_url_request.cc b/third_party/blink/renderer/platform/exported/web_url_request.cc
index bba8d1a..c387c5d 100644
--- a/third_party/blink/renderer/platform/exported/web_url_request.cc
+++ b/third_party/blink/renderer/platform/exported/web_url_request.cc
@@ -158,8 +158,7 @@
       web_referrer.IsEmpty() ? Referrer::NoReferrer() : String(web_referrer);
   // TODO(domfarolino): Stop storing ResourceRequest's generated referrer as a
   // header and instead use a separate member. See https://crbug.com/850813.
-  resource_request_->SetHTTPReferrer(
-      Referrer(referrer, static_cast<ReferrerPolicy>(referrer_policy)));
+  resource_request_->SetHTTPReferrer(Referrer(referrer, referrer_policy));
 }
 
 void WebURLRequest::AddHTTPHeaderField(const WebString& name,
@@ -210,8 +209,7 @@
 }
 
 network::mojom::ReferrerPolicy WebURLRequest::GetReferrerPolicy() const {
-  return static_cast<network::mojom::ReferrerPolicy>(
-      resource_request_->GetReferrerPolicy());
+  return resource_request_->GetReferrerPolicy();
 }
 
 void WebURLRequest::SetHTTPOriginIfNeeded(const WebSecurityOrigin& origin) {
diff --git a/third_party/blink/renderer/platform/fonts/utf16_text_iterator.cc b/third_party/blink/renderer/platform/fonts/utf16_text_iterator.cc
index 3f17555..abceeae 100644
--- a/third_party/blink/renderer/platform/fonts/utf16_text_iterator.cc
+++ b/third_party/blink/renderer/platform/fonts/utf16_text_iterator.cc
@@ -53,7 +53,7 @@
   DCHECK(U16_IS_SURROGATE(character));
 
   if (!IsValidSurrogatePair(character)) {
-    character = WTF::Unicode::kReplacementCharacter;
+    character = WTF::unicode::kReplacementCharacter;
     return true;
   }
 
diff --git a/third_party/blink/renderer/platform/heap/thread_state.cc b/third_party/blink/renderer/platform/heap/thread_state.cc
index c7dc8cf3..198af3f 100644
--- a/third_party/blink/renderer/platform/heap/thread_state.cc
+++ b/third_party/blink/renderer/platform/heap/thread_state.cc
@@ -171,12 +171,6 @@
       weak_persistent_region_(std::make_unique<PersistentRegion>()),
       start_of_stack_(reinterpret_cast<intptr_t*>(WTF::GetStackStart())),
       end_of_stack_(reinterpret_cast<intptr_t*>(WTF::GetStackStart())),
-#if HAS_FEATURE(safe_stack)
-      start_of_unsafe_stack_(
-          reinterpret_cast<intptr_t*>(__builtin___get_unsafe_stack_top())),
-      end_of_unsafe_stack_(
-          reinterpret_cast<intptr_t*>(__builtin___get_unsafe_stack_bottom())),
-#endif
       sweep_forbidden_(false),
       no_allocation_count_(0),
       gc_forbidden_count_(0),
@@ -347,19 +341,6 @@
     heap_->CheckAndMarkPointer(visitor, ptr);
     VisitAsanFakeStackForPointer(visitor, ptr);
   }
-
-#if HAS_FEATURE(safe_stack)
-  start = reinterpret_cast<Address*>(start_of_unsafe_stack_);
-  end = reinterpret_cast<Address*>(end_of_unsafe_stack_);
-  current = end;
-
-  for (; current < start; ++current) {
-    Address ptr = *current;
-    // SafeStack And MSan are not compatible
-    heap_->CheckAndMarkPointer(visitor, ptr);
-    VisitAsanFakeStackForPointer(visitor, ptr);
-  }
-#endif
 }
 
 void ThreadState::VisitDOMWrappers(Visitor* visitor) {
@@ -1309,10 +1290,6 @@
 
 static void DidPushRegisters(void*, ThreadState* state, intptr_t* stack_end) {
   state->RecordStackEnd(stack_end);
-#if HAS_FEATURE(safe_stack)
-  state->RecordUnsafeStackEnd(
-      reinterpret_cast<intptr_t*>(__builtin___get_unsafe_stack_ptr()));
-#endif
 }
 
 void ThreadState::PushRegistersAndVisitStack() {
diff --git a/third_party/blink/renderer/platform/heap/thread_state.h b/third_party/blink/renderer/platform/heap/thread_state.h
index a259f73..d04c2b0 100644
--- a/third_party/blink/renderer/platform/heap/thread_state.h
+++ b/third_party/blink/renderer/platform/heap/thread_state.h
@@ -420,11 +420,6 @@
   void SafePoint(BlinkGC::StackState);
 
   void RecordStackEnd(intptr_t* end_of_stack) { end_of_stack_ = end_of_stack; }
-#if HAS_FEATURE(safe_stack)
-  void RecordUnsafeStackEnd(intptr_t* end_of_unsafe_stack) {
-    end_of_unsafe_stack_ = end_of_unsafe_stack;
-  }
-#endif
 
   void PushRegistersAndVisitStack();
 
@@ -700,11 +695,6 @@
   intptr_t* start_of_stack_;
   intptr_t* end_of_stack_;
 
-#if HAS_FEATURE(safe_stack)
-  intptr_t* start_of_unsafe_stack_;
-  intptr_t* end_of_unsafe_stack_;
-#endif
-
   bool sweep_forbidden_;
   size_t no_allocation_count_;
   size_t gc_forbidden_count_;
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h b/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h
index c71366a6..9e6f233 100644
--- a/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h
+++ b/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h
@@ -5,13 +5,13 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_FETCH_CLIENT_SETTINGS_OBJECT_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_FETCH_CLIENT_SETTINGS_OBJECT_H_
 
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/renderer/platform/cross_thread_copier.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/loader/fetch/https_state.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 
 namespace blink {
@@ -42,7 +42,7 @@
   // "The default referrer policy for fetches performed using this environment
   // settings object as a request client."
   // https://html.spec.whatwg.org/multipage/webappapis.html#concept-settings-object-referrer-policy
-  virtual ReferrerPolicy GetReferrerPolicy() const = 0;
+  virtual network::mojom::ReferrerPolicy GetReferrerPolicy() const = 0;
 
   // "referrerURL" used in the "Determine request's Referrer" algorithm:
   // https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object_snapshot.cc b/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object_snapshot.cc
index ad3a8ba..38c1829 100644
--- a/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object_snapshot.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object_snapshot.cc
@@ -19,7 +19,7 @@
 FetchClientSettingsObjectSnapshot::FetchClientSettingsObjectSnapshot(
     const KURL& base_url,
     const scoped_refptr<const SecurityOrigin> security_origin,
-    ReferrerPolicy referrer_policy,
+    network::mojom::ReferrerPolicy referrer_policy,
     const String& outgoing_referrer,
     HttpsState https_state)
     : base_url_(base_url),
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object_snapshot.h b/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object_snapshot.h
index fb3a8dad..09290de 100644
--- a/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object_snapshot.h
+++ b/third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object_snapshot.h
@@ -5,11 +5,11 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_FETCH_CLIENT_SETTINGS_OBJECT_SNAPSHOT_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_FETCH_CLIENT_SETTINGS_OBJECT_SNAPSHOT_H_
 
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/renderer/platform/cross_thread_copier.h"
 #include "third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
 
 namespace blink {
@@ -30,7 +30,7 @@
   CrossThreadFetchClientSettingsObjectData(
       KURL base_url,
       scoped_refptr<const SecurityOrigin> security_origin,
-      ReferrerPolicy referrer_policy,
+      network::mojom::ReferrerPolicy referrer_policy,
       String outgoing_referrer,
       HttpsState https_state)
       : base_url(std::move(base_url)),
@@ -41,7 +41,7 @@
 
   const KURL base_url;
   const scoped_refptr<const SecurityOrigin> security_origin;
-  const ReferrerPolicy referrer_policy;
+  const network::mojom::ReferrerPolicy referrer_policy;
   const String outgoing_referrer;
   const HttpsState https_state;
 };
@@ -64,7 +64,7 @@
   FetchClientSettingsObjectSnapshot(
       const KURL& base_url,
       const scoped_refptr<const SecurityOrigin> security_origin,
-      ReferrerPolicy referrer_policy,
+      network::mojom::ReferrerPolicy referrer_policy,
       const String& outgoing_referrer,
       HttpsState https_state);
 
@@ -74,7 +74,9 @@
   const SecurityOrigin* GetSecurityOrigin() const override {
     return security_origin_.get();
   }
-  ReferrerPolicy GetReferrerPolicy() const override { return referrer_policy_; }
+  network::mojom::ReferrerPolicy GetReferrerPolicy() const override {
+    return referrer_policy_;
+  }
   const String GetOutgoingReferrer() const override {
     return outgoing_referrer_;
   }
@@ -90,7 +92,7 @@
  private:
   const KURL base_url_;
   const scoped_refptr<const SecurityOrigin> security_origin_;
-  const ReferrerPolicy referrer_policy_;
+  const network::mojom::ReferrerPolicy referrer_policy_;
   const String outgoing_referrer_;
   const HttpsState https_state_;
 };
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_context.cc b/third_party/blink/renderer/platform/loader/fetch/fetch_context.cc
index cea9838e..b54b5503 100644
--- a/third_party/blink/renderer/platform/loader/fetch/fetch_context.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/fetch_context.cc
@@ -47,7 +47,7 @@
             MakeGarbageCollected<FetchClientSettingsObjectSnapshot>(
                 KURL(),
                 nullptr /* security_origin */,
-                kReferrerPolicyDefault,
+                network::mojom::ReferrerPolicy::kDefault,
                 String(),
                 HttpsState::kNone)) {}
 
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 e75b6d2..b07bb4f 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
@@ -564,7 +564,7 @@
   std::unique_ptr<ResourceRequest> new_request =
       resource_->LastResourceRequest().CreateRedirectRequest(
           new_url, new_method, new_site_for_cookies, new_referrer,
-          static_cast<ReferrerPolicy>(new_referrer_policy),
+          new_referrer_policy,
           !passed_redirect_response.WasFetchedViaServiceWorker());
 
   ResourceType resource_type = resource_->GetType();
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_request.cc b/third_party/blink/renderer/platform/loader/fetch/resource_request.cc
index dd7f24f..4e0c30af 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_request.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_request.cc
@@ -75,7 +75,7 @@
       fetch_credentials_mode_(network::mojom::FetchCredentialsMode::kInclude),
       fetch_redirect_mode_(network::mojom::FetchRedirectMode::kFollow),
       referrer_string_(Referrer::ClientReferrerString()),
-      referrer_policy_(kReferrerPolicyDefault),
+      referrer_policy_(network::mojom::ReferrerPolicy::kDefault),
       did_set_http_referrer_(false),
       was_discarded_(false),
       is_external_request_(false),
@@ -94,7 +94,7 @@
     const AtomicString& new_method,
     const KURL& new_site_for_cookies,
     const String& new_referrer,
-    ReferrerPolicy new_referrer_policy,
+    network::mojom::ReferrerPolicy new_referrer_policy,
     bool skip_service_worker) const {
   std::unique_ptr<ResourceRequest> request =
       std::make_unique<ResourceRequest>(new_url);
@@ -105,8 +105,7 @@
       new_referrer.IsEmpty() ? Referrer::NoReferrer() : String(new_referrer);
   // TODO(domfarolino): Stop storing ResourceRequest's generated referrer as a
   // header and instead use a separate member. See https://crbug.com/850813.
-  request->SetHTTPReferrer(
-      Referrer(referrer, static_cast<ReferrerPolicy>(new_referrer_policy)));
+  request->SetHTTPReferrer(Referrer(referrer, new_referrer_policy));
   request->SetSkipServiceWorker(skip_service_worker);
   request->SetRedirectStatus(RedirectStatus::kFollowedRedirect);
 
@@ -215,7 +214,7 @@
 
 void ResourceRequest::ClearHTTPReferrer() {
   http_header_fields_.Remove(http_names::kReferer);
-  referrer_policy_ = kReferrerPolicyDefault;
+  referrer_policy_ = network::mojom::ReferrerPolicy::kDefault;
   did_set_http_referrer_ = false;
 }
 
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_request.h b/third_party/blink/renderer/platform/loader/fetch/resource_request.h
index f92fdf2e..98f750c 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_request.h
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_request.h
@@ -85,7 +85,7 @@
       const AtomicString& new_method,
       const KURL& new_site_for_cookies,
       const String& new_referrer,
-      ReferrerPolicy new_referrer_policy,
+      network::mojom::ReferrerPolicy new_referrer_policy,
       bool skip_service_worker) const;
 
   bool IsNull() const;
@@ -143,10 +143,12 @@
   bool DidSetHTTPReferrer() const { return did_set_http_referrer_; }
   void ClearHTTPReferrer();
 
-  void SetReferrerPolicy(ReferrerPolicy referrer_policy) {
+  void SetReferrerPolicy(network::mojom::ReferrerPolicy referrer_policy) {
     referrer_policy_ = referrer_policy;
   }
-  ReferrerPolicy GetReferrerPolicy() const { return referrer_policy_; }
+  network::mojom::ReferrerPolicy GetReferrerPolicy() const {
+    return referrer_policy_;
+  }
 
   void SetReferrerString(const String& referrer_string) {
     referrer_string_ = referrer_string;
@@ -473,7 +475,7 @@
   // off-main-thread fetch is fully implemented and ResourceRequest never gets
   // transferred between threads. See https://crbug.com/706331.
   String referrer_string_;
-  ReferrerPolicy referrer_policy_;
+  network::mojom::ReferrerPolicy referrer_policy_;
   bool did_set_http_referrer_;
   bool was_discarded_;
   bool is_external_request_;
diff --git a/third_party/blink/renderer/platform/loader/fetch/script_fetch_options.h b/third_party/blink/renderer/platform/loader/fetch/script_fetch_options.h
index 0f20f74..4cb4632 100644
--- a/third_party/blink/renderer/platform/loader/fetch/script_fetch_options.h
+++ b/third_party/blink/renderer/platform/loader/fetch/script_fetch_options.h
@@ -5,13 +5,13 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_SCRIPT_FETCH_OPTIONS_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_SCRIPT_FETCH_OPTIONS_H_
 
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/renderer/platform/cross_origin_attribute_value.h"
 #include "third_party/blink/renderer/platform/loader/fetch/fetch_parameters.h"
 #include "third_party/blink/renderer/platform/loader/fetch/integrity_metadata.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/wtf/text/text_encoding.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
@@ -35,14 +35,14 @@
   ScriptFetchOptions()
       : parser_state_(ParserDisposition::kNotParserInserted),
         credentials_mode_(network::mojom::FetchCredentialsMode::kOmit),
-        referrer_policy_(kReferrerPolicyDefault) {}
+        referrer_policy_(network::mojom::ReferrerPolicy::kDefault) {}
 
   ScriptFetchOptions(const String& nonce,
                      const IntegrityMetadataSet& integrity_metadata,
                      const String& integrity_attribute,
                      ParserDisposition parser_state,
                      network::mojom::FetchCredentialsMode credentials_mode,
-                     ReferrerPolicy referrer_policy)
+                     network::mojom::ReferrerPolicy referrer_policy)
       : nonce_(nonce),
         integrity_metadata_(integrity_metadata),
         integrity_attribute_(integrity_attribute),
@@ -62,7 +62,9 @@
   network::mojom::FetchCredentialsMode CredentialsMode() const {
     return credentials_mode_;
   }
-  ReferrerPolicy GetReferrerPolicy() const { return referrer_policy_; }
+  network::mojom::ReferrerPolicy GetReferrerPolicy() const {
+    return referrer_policy_;
+  }
 
   // https://html.spec.whatwg.org/multipage/webappapis.html#fetch-a-classic-script
   // Steps 1 and 3.
@@ -87,7 +89,7 @@
   const network::mojom::FetchCredentialsMode credentials_mode_;
 
   // https://html.spec.whatwg.org/multipage/webappapis.html#concept-script-fetch-options-referrer-policy
-  const ReferrerPolicy referrer_policy_;
+  const network::mojom::ReferrerPolicy referrer_policy_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/testing/mock_fetch_context.h b/third_party/blink/renderer/platform/loader/testing/mock_fetch_context.h
index ce8af4e..7859d37a 100644
--- a/third_party/blink/renderer/platform/loader/testing/mock_fetch_context.h
+++ b/third_party/blink/renderer/platform/loader/testing/mock_fetch_context.h
@@ -71,8 +71,8 @@
   const FetchClientSettingsObject* GetFetchClientSettingsObject()
       const override {
     return MakeGarbageCollected<FetchClientSettingsObjectSnapshot>(
-        KURL(), security_origin_, kReferrerPolicyDefault, String(),
-        HttpsState::kNone);
+        KURL(), security_origin_, network::mojom::ReferrerPolicy::kDefault,
+        String(), HttpsState::kNone);
   }
 
   // The last ResourceRequest passed to DispatchWillSendRequest.
diff --git a/third_party/blink/renderer/platform/mojo/DEPS b/third_party/blink/renderer/platform/mojo/DEPS
index 4394c7a..ea09dcb 100644
--- a/third_party/blink/renderer/platform/mojo/DEPS
+++ b/third_party/blink/renderer/platform/mojo/DEPS
@@ -14,9 +14,6 @@
     "+mojo/public/cpp/base/time_mojom_traits.h",
     "+mojo/public/cpp/bindings/binding.h",
     "+mojo/public/mojom/base/string16.mojom-blink.h",
-    "+services/network/public/mojom/fetch_api.mojom-blink.h",
-    "+services/network/public/mojom/restricted_cookie_manager.mojom-blink.h",
-    "+services/network/public/mojom/referrer_policy.mojom-blink.h",
     "+skia/public/interfaces/bitmap_skbitmap_struct_traits.h",
 
     "+third_party/blink/renderer/platform/blob/blob_data.h",
diff --git a/third_party/blink/renderer/platform/prerender.h b/third_party/blink/renderer/platform/prerender.h
index 7cccea0..0c7f509 100644
--- a/third_party/blink/renderer/platform/prerender.h
+++ b/third_party/blink/renderer/platform/prerender.h
@@ -74,7 +74,9 @@
   const KURL& Url() const { return url_; }
   unsigned RelTypes() const { return rel_types_; }
   const String& GetReferrer() const { return referrer_.referrer; }
-  ReferrerPolicy GetReferrerPolicy() const { return referrer_.referrer_policy; }
+  network::mojom::ReferrerPolicy GetReferrerPolicy() const {
+    return referrer_.referrer_policy;
+  }
 
   void SetExtraData(scoped_refptr<ExtraData> extra_data) {
     extra_data_ = std::move(extra_data);
diff --git a/third_party/blink/renderer/platform/text/bidi_character_run.h b/third_party/blink/renderer/platform/text/bidi_character_run.h
index 1cb25f0..93e7afd8 100644
--- a/third_party/blink/renderer/platform/text/bidi_character_run.h
+++ b/third_party/blink/renderer/platform/text/bidi_character_run.h
@@ -35,30 +35,30 @@
                    unsigned char level,
                    int start,
                    int stop,
-                   WTF::Unicode::CharDirection dir,
-                   WTF::Unicode::CharDirection override_dir)
+                   WTF::unicode::CharDirection dir,
+                   WTF::unicode::CharDirection override_dir)
       : override_(override),
         level_(level),
         next_(nullptr),
         start_(start),
         stop_(stop) {
     DCHECK_LE(start_, stop_);
-    if (dir == WTF::Unicode::kOtherNeutral)
+    if (dir == WTF::unicode::kOtherNeutral)
       dir = override_dir;
 
     level_ = level;
 
     // add level of run (cases I1 & I2)
     if (level_ % 2) {
-      if (dir == WTF::Unicode::kLeftToRight ||
-          dir == WTF::Unicode::kArabicNumber ||
-          dir == WTF::Unicode::kEuropeanNumber)
+      if (dir == WTF::unicode::kLeftToRight ||
+          dir == WTF::unicode::kArabicNumber ||
+          dir == WTF::unicode::kEuropeanNumber)
         level_++;
     } else {
-      if (dir == WTF::Unicode::kRightToLeft)
+      if (dir == WTF::unicode::kRightToLeft)
         level_++;
-      else if (dir == WTF::Unicode::kArabicNumber ||
-               dir == WTF::Unicode::kEuropeanNumber)
+      else if (dir == WTF::unicode::kArabicNumber ||
+               dir == WTF::unicode::kEuropeanNumber)
         level_ += 2;
     }
   }
diff --git a/third_party/blink/renderer/platform/text/bidi_context.cc b/third_party/blink/renderer/platform/text/bidi_context.cc
index c8c89b1..37b08a5 100644
--- a/third_party/blink/renderer/platform/text/bidi_context.cc
+++ b/third_party/blink/renderer/platform/text/bidi_context.cc
@@ -38,7 +38,7 @@
 
 inline scoped_refptr<BidiContext> BidiContext::CreateUncached(
     unsigned char level,
-    WTF::Unicode::CharDirection direction,
+    WTF::unicode::CharDirection direction,
     bool override,
     BidiEmbeddingSource source,
     BidiContext* parent) {
@@ -48,12 +48,12 @@
 
 scoped_refptr<BidiContext> BidiContext::Create(
     unsigned char level,
-    WTF::Unicode::CharDirection direction,
+    WTF::unicode::CharDirection direction,
     bool override,
     BidiEmbeddingSource source,
     BidiContext* parent) {
-  DCHECK_EQ(direction, (level % 2 ? WTF::Unicode::kRightToLeft
-                                  : WTF::Unicode::kLeftToRight));
+  DCHECK_EQ(direction, (level % 2 ? WTF::unicode::kRightToLeft
+                                  : WTF::unicode::kLeftToRight));
 
   if (parent || level >= 2)
     return CreateUncached(level, direction, override, source, parent);
@@ -62,26 +62,26 @@
   if (!level) {
     if (!override) {
       DEFINE_STATIC_REF(BidiContext, ltr_context,
-                        (CreateUncached(0, WTF::Unicode::kLeftToRight, false,
+                        (CreateUncached(0, WTF::unicode::kLeftToRight, false,
                                         kFromStyleOrDOM, nullptr)));
       return ltr_context;
     }
 
     DEFINE_STATIC_REF(BidiContext, ltr_override_context,
-                      (CreateUncached(0, WTF::Unicode::kLeftToRight, true,
+                      (CreateUncached(0, WTF::unicode::kLeftToRight, true,
                                       kFromStyleOrDOM, nullptr)));
     return ltr_override_context;
   }
 
   if (!override) {
     DEFINE_STATIC_REF(BidiContext, rtl_context,
-                      (CreateUncached(1, WTF::Unicode::kRightToLeft, false,
+                      (CreateUncached(1, WTF::unicode::kRightToLeft, false,
                                       kFromStyleOrDOM, nullptr)));
     return rtl_context;
   }
 
   DEFINE_STATIC_REF(BidiContext, rtl_override_context,
-                    (CreateUncached(1, WTF::Unicode::kRightToLeft, true,
+                    (CreateUncached(1, WTF::unicode::kRightToLeft, true,
                                     kFromStyleOrDOM, nullptr)));
   return rtl_override_context;
 }
@@ -91,7 +91,7 @@
     BidiContext* parent) {
   DCHECK(context);
   unsigned char new_level = parent ? parent->Level() : 0;
-  if (context->Dir() == WTF::Unicode::kRightToLeft)
+  if (context->Dir() == WTF::unicode::kRightToLeft)
     new_level = NextGreaterOddLevel(new_level);
   else if (parent)
     new_level = NextGreaterEvenLevel(new_level);
diff --git a/third_party/blink/renderer/platform/text/bidi_context.h b/third_party/blink/renderer/platform/text/bidi_context.h
index e376d5f..743ce4b 100644
--- a/third_party/blink/renderer/platform/text/bidi_context.h
+++ b/third_party/blink/renderer/platform/text/bidi_context.h
@@ -38,15 +38,15 @@
  public:
   static scoped_refptr<BidiContext> Create(
       unsigned char level,
-      WTF::Unicode::CharDirection,
+      WTF::unicode::CharDirection,
       bool override = false,
       BidiEmbeddingSource = kFromStyleOrDOM,
       BidiContext* parent = nullptr);
 
   BidiContext* Parent() const { return parent_.get(); }
   unsigned char Level() const { return level_; }
-  WTF::Unicode::CharDirection Dir() const {
-    return static_cast<WTF::Unicode::CharDirection>(direction_);
+  WTF::unicode::CharDirection Dir() const {
+    return static_cast<WTF::unicode::CharDirection>(direction_);
   }
   bool Override() const { return override_; }
   BidiEmbeddingSource Source() const {
@@ -62,7 +62,7 @@
 
  private:
   BidiContext(unsigned char level,
-              WTF::Unicode::CharDirection direction,
+              WTF::unicode::CharDirection direction,
               bool override,
               BidiEmbeddingSource source,
               BidiContext* parent)
@@ -75,7 +75,7 @@
   }
 
   static scoped_refptr<BidiContext> CreateUncached(unsigned char level,
-                                                   WTF::Unicode::CharDirection,
+                                                   WTF::unicode::CharDirection,
                                                    bool override,
                                                    BidiEmbeddingSource,
                                                    BidiContext* parent);
diff --git a/third_party/blink/renderer/platform/text/bidi_resolver.h b/third_party/blink/renderer/platform/text/bidi_resolver.h
index aba93e5..3dd964e 100644
--- a/third_party/blink/renderer/platform/text/bidi_resolver.h
+++ b/third_party/blink/renderer/platform/text/bidi_resolver.h
@@ -124,25 +124,25 @@
 struct BidiStatus final {
   DISALLOW_NEW();
   BidiStatus()
-      : eor(WTF::Unicode::kOtherNeutral),
-        last_strong(WTF::Unicode::kOtherNeutral),
-        last(WTF::Unicode::kOtherNeutral) {}
+      : eor(WTF::unicode::kOtherNeutral),
+        last_strong(WTF::unicode::kOtherNeutral),
+        last(WTF::unicode::kOtherNeutral) {}
 
   // Creates a BidiStatus representing a new paragraph root with a default
   // direction.  Uses TextDirection as it only has two possibilities instead of
-  // WTF::Unicode::Direction which has 19.
+  // WTF::unicode::Direction which has 19.
   BidiStatus(TextDirection text_direction, bool is_override) {
-    WTF::Unicode::CharDirection direction =
-        text_direction == TextDirection::kLtr ? WTF::Unicode::kLeftToRight
-                                              : WTF::Unicode::kRightToLeft;
+    WTF::unicode::CharDirection direction =
+        text_direction == TextDirection::kLtr ? WTF::unicode::kLeftToRight
+                                              : WTF::unicode::kRightToLeft;
     eor = last_strong = last = direction;
     context = BidiContext::Create(text_direction == TextDirection::kLtr ? 0 : 1,
                                   direction, is_override);
   }
 
-  BidiStatus(WTF::Unicode::CharDirection eor_dir,
-             WTF::Unicode::CharDirection last_strong_dir,
-             WTF::Unicode::CharDirection last_dir,
+  BidiStatus(WTF::unicode::CharDirection eor_dir,
+             WTF::unicode::CharDirection last_strong_dir,
+             WTF::unicode::CharDirection last_dir,
              scoped_refptr<BidiContext> bidi_context)
       : eor(eor_dir),
         last_strong(last_strong_dir),
@@ -154,13 +154,13 @@
   static BidiStatus CreateForIsolate(TextDirection text_direction,
                                      bool is_override,
                                      unsigned char level) {
-    WTF::Unicode::CharDirection direction;
+    WTF::unicode::CharDirection direction;
     if (text_direction == TextDirection::kRtl) {
       level = NextGreaterOddLevel(level);
-      direction = WTF::Unicode::kRightToLeft;
+      direction = WTF::unicode::kRightToLeft;
     } else {
       level = NextGreaterEvenLevel(level);
-      direction = WTF::Unicode::kLeftToRight;
+      direction = WTF::unicode::kLeftToRight;
     }
     scoped_refptr<BidiContext> context =
         BidiContext::Create(level, direction, is_override, kFromStyleOrDOM);
@@ -170,9 +170,9 @@
     return BidiStatus(direction, direction, direction, std::move(context));
   }
 
-  WTF::Unicode::CharDirection eor;
-  WTF::Unicode::CharDirection last_strong;
-  WTF::Unicode::CharDirection last;
+  WTF::unicode::CharDirection eor;
+  WTF::unicode::CharDirection last_strong;
+  WTF::unicode::CharDirection last;
   scoped_refptr<BidiContext> context;
 };
 
@@ -180,15 +180,15 @@
   DISALLOW_NEW();
 
  public:
-  BidiEmbedding(WTF::Unicode::CharDirection direction,
+  BidiEmbedding(WTF::unicode::CharDirection direction,
                 BidiEmbeddingSource source)
       : direction_(direction), source_(source) {}
 
-  WTF::Unicode::CharDirection Direction() const { return direction_; }
+  WTF::unicode::CharDirection Direction() const { return direction_; }
   BidiEmbeddingSource Source() const { return source_; }
 
  private:
-  WTF::Unicode::CharDirection direction_;
+  WTF::unicode::CharDirection direction_;
   BidiEmbeddingSource source_;
 };
 
@@ -218,7 +218,7 @@
 
  public:
   BidiResolver()
-      : direction_(WTF::Unicode::kOtherNeutral),
+      : direction_(WTF::unicode::kOtherNeutral),
         reached_end_of_line_(false),
         empty_run_(true),
         nested_isolate_count_(0),
@@ -244,22 +244,22 @@
     status_.context = std::move(c);
   }
 
-  void SetLastDir(WTF::Unicode::CharDirection last_dir) {
+  void SetLastDir(WTF::unicode::CharDirection last_dir) {
     status_.last = last_dir;
   }
-  void SetLastStrongDir(WTF::Unicode::CharDirection last_strong_dir) {
+  void SetLastStrongDir(WTF::unicode::CharDirection last_strong_dir) {
     status_.last_strong = last_strong_dir;
   }
-  void SetEorDir(WTF::Unicode::CharDirection eor_dir) { status_.eor = eor_dir; }
+  void SetEorDir(WTF::unicode::CharDirection eor_dir) { status_.eor = eor_dir; }
 
-  WTF::Unicode::CharDirection Dir() const { return direction_; }
-  void SetDir(WTF::Unicode::CharDirection d) { direction_ = d; }
+  WTF::unicode::CharDirection Dir() const { return direction_; }
+  void SetDir(WTF::unicode::CharDirection d) { direction_ = d; }
 
   const BidiStatus& Status() const { return status_; }
   void SetStatus(const BidiStatus s) {
     DCHECK(s.context);
     status_ = s;
-    paragraph_directionality_ = s.context->Dir() == WTF::Unicode::kLeftToRight
+    paragraph_directionality_ = s.context->Dir() == WTF::unicode::kLeftToRight
                                     ? TextDirection::kLtr
                                     : TextDirection::kRtl;
   }
@@ -276,7 +276,7 @@
   }
   bool InIsolate() const { return nested_isolate_count_; }
 
-  void Embed(WTF::Unicode::CharDirection, BidiEmbeddingSource);
+  void Embed(WTF::unicode::CharDirection, BidiEmbeddingSource);
   bool CommitExplicitEmbedding(BidiRunList<Run>&);
 
   void CreateBidiRunsForLine(const Iterator& end,
@@ -339,7 +339,7 @@
   Iterator eor_;  // Points to the last character in the current run.
   Iterator last_;
   BidiStatus status_;
-  WTF::Unicode::CharDirection direction_;
+  WTF::unicode::CharDirection direction_;
   // m_endOfRunAtEndOfLine is "the position last eor in the end of line"
   Iterator end_of_run_at_end_of_line_;
   Iterator end_of_line_;
@@ -361,13 +361,13 @@
 
  private:
   void RaiseExplicitEmbeddingLevel(BidiRunList<Run>&,
-                                   WTF::Unicode::CharDirection from,
-                                   WTF::Unicode::CharDirection to);
+                                   WTF::unicode::CharDirection from,
+                                   WTF::unicode::CharDirection to);
   void LowerExplicitEmbeddingLevel(BidiRunList<Run>&,
-                                   WTF::Unicode::CharDirection from);
+                                   WTF::unicode::CharDirection from);
   void CheckDirectionInLowerRaiseEmbeddingLevel();
 
-  void UpdateStatusLastFromCurrentDirection(WTF::Unicode::CharDirection);
+  void UpdateStatusLastFromCurrentDirection(WTF::unicode::CharDirection);
   void ReorderRunsFromLevels(BidiRunList<Run>&) const;
 
   bool NeedsTrailingSpace(BidiRunList<Run>&) { return needs_trailing_space_; }
@@ -428,71 +428,71 @@
     sor_ = eor_;
   }
 
-  direction_ = WTF::Unicode::kOtherNeutral;
-  status_.eor = WTF::Unicode::kOtherNeutral;
+  direction_ = WTF::unicode::kOtherNeutral;
+  status_.eor = WTF::unicode::kOtherNeutral;
 }
 
 template <class Iterator, class Run, class IsolatedRun>
 void BidiResolver<Iterator, Run, IsolatedRun>::Embed(
-    WTF::Unicode::CharDirection dir,
+    WTF::unicode::CharDirection dir,
     BidiEmbeddingSource source) {
   // Isolated spans compute base directionality during their own UBA run.
   // Do not insert fake embed characters once we enter an isolated span.
   DCHECK(!InIsolate());
 
-  DCHECK(dir == WTF::Unicode::kPopDirectionalFormat ||
-         dir == WTF::Unicode::kLeftToRightEmbedding ||
-         dir == WTF::Unicode::kLeftToRightOverride ||
-         dir == WTF::Unicode::kRightToLeftEmbedding ||
-         dir == WTF::Unicode::kRightToLeftOverride);
+  DCHECK(dir == WTF::unicode::kPopDirectionalFormat ||
+         dir == WTF::unicode::kLeftToRightEmbedding ||
+         dir == WTF::unicode::kLeftToRightOverride ||
+         dir == WTF::unicode::kRightToLeftEmbedding ||
+         dir == WTF::unicode::kRightToLeftOverride);
   current_explicit_embedding_sequence_.push_back(BidiEmbedding(dir, source));
 }
 
 template <class Iterator, class Run, class IsolatedRun>
 void BidiResolver<Iterator, Run, IsolatedRun>::
     CheckDirectionInLowerRaiseEmbeddingLevel() {
-  DCHECK(status_.eor != WTF::Unicode::kOtherNeutral || eor_.AtEnd());
-  DCHECK_NE(status_.last, WTF::Unicode::kNonSpacingMark);
-  DCHECK_NE(status_.last, WTF::Unicode::kBoundaryNeutral);
-  DCHECK_NE(status_.last, WTF::Unicode::kRightToLeftEmbedding);
-  DCHECK_NE(status_.last, WTF::Unicode::kLeftToRightEmbedding);
-  DCHECK_NE(status_.last, WTF::Unicode::kRightToLeftOverride);
-  DCHECK_NE(status_.last, WTF::Unicode::kLeftToRightOverride);
-  DCHECK_NE(status_.last, WTF::Unicode::kPopDirectionalFormat);
-  if (direction_ == WTF::Unicode::kOtherNeutral) {
-    direction_ = status_.last_strong == WTF::Unicode::kLeftToRight
-                     ? WTF::Unicode::kLeftToRight
-                     : WTF::Unicode::kRightToLeft;
+  DCHECK(status_.eor != WTF::unicode::kOtherNeutral || eor_.AtEnd());
+  DCHECK_NE(status_.last, WTF::unicode::kNonSpacingMark);
+  DCHECK_NE(status_.last, WTF::unicode::kBoundaryNeutral);
+  DCHECK_NE(status_.last, WTF::unicode::kRightToLeftEmbedding);
+  DCHECK_NE(status_.last, WTF::unicode::kLeftToRightEmbedding);
+  DCHECK_NE(status_.last, WTF::unicode::kRightToLeftOverride);
+  DCHECK_NE(status_.last, WTF::unicode::kLeftToRightOverride);
+  DCHECK_NE(status_.last, WTF::unicode::kPopDirectionalFormat);
+  if (direction_ == WTF::unicode::kOtherNeutral) {
+    direction_ = status_.last_strong == WTF::unicode::kLeftToRight
+                     ? WTF::unicode::kLeftToRight
+                     : WTF::unicode::kRightToLeft;
   }
 }
 
 template <class Iterator, class Run, class IsolatedRun>
 void BidiResolver<Iterator, Run, IsolatedRun>::LowerExplicitEmbeddingLevel(
     BidiRunList<Run>& runs,
-    WTF::Unicode::CharDirection from) {
+    WTF::unicode::CharDirection from) {
   if (!empty_run_ && eor_ != last_) {
     CheckDirectionInLowerRaiseEmbeddingLevel();
     // bidi.sor ... bidi.eor ... bidi.last eor; need to append the
     // bidi.sor-bidi.eor run or extend it through bidi.last
-    if (from == WTF::Unicode::kLeftToRight) {
+    if (from == WTF::unicode::kLeftToRight) {
       // bidi.sor ... bidi.eor ... bidi.last L
-      if (status_.eor == WTF::Unicode::kEuropeanNumber) {
-        if (status_.last_strong != WTF::Unicode::kLeftToRight) {
-          direction_ = WTF::Unicode::kEuropeanNumber;
+      if (status_.eor == WTF::unicode::kEuropeanNumber) {
+        if (status_.last_strong != WTF::unicode::kLeftToRight) {
+          direction_ = WTF::unicode::kEuropeanNumber;
           AppendRun(runs);
         }
-      } else if (status_.eor == WTF::Unicode::kArabicNumber) {
-        direction_ = WTF::Unicode::kArabicNumber;
+      } else if (status_.eor == WTF::unicode::kArabicNumber) {
+        direction_ = WTF::unicode::kArabicNumber;
         AppendRun(runs);
-      } else if (status_.last_strong != WTF::Unicode::kLeftToRight) {
+      } else if (status_.last_strong != WTF::unicode::kLeftToRight) {
         AppendRun(runs);
-        direction_ = WTF::Unicode::kLeftToRight;
+        direction_ = WTF::unicode::kLeftToRight;
       }
-    } else if (status_.eor == WTF::Unicode::kEuropeanNumber ||
-               status_.eor == WTF::Unicode::kArabicNumber ||
-               status_.last_strong == WTF::Unicode::kLeftToRight) {
+    } else if (status_.eor == WTF::unicode::kEuropeanNumber ||
+               status_.eor == WTF::unicode::kArabicNumber ||
+               status_.last_strong == WTF::unicode::kLeftToRight) {
       AppendRun(runs);
-      direction_ = WTF::Unicode::kRightToLeft;
+      direction_ = WTF::unicode::kRightToLeft;
     }
     eor_ = last_;
   }
@@ -509,36 +509,36 @@
 template <class Iterator, class Run, class IsolatedRun>
 void BidiResolver<Iterator, Run, IsolatedRun>::RaiseExplicitEmbeddingLevel(
     BidiRunList<Run>& runs,
-    WTF::Unicode::CharDirection from,
-    WTF::Unicode::CharDirection to) {
+    WTF::unicode::CharDirection from,
+    WTF::unicode::CharDirection to) {
   if (!empty_run_ && eor_ != last_) {
     CheckDirectionInLowerRaiseEmbeddingLevel();
     // bidi.sor ... bidi.eor ... bidi.last eor; need to append the
     // bidi.sor-bidi.eor run or extend it through bidi.last
-    if (to == WTF::Unicode::kLeftToRight) {
+    if (to == WTF::unicode::kLeftToRight) {
       // bidi.sor ... bidi.eor ... bidi.last L
-      if (status_.eor == WTF::Unicode::kEuropeanNumber) {
-        if (status_.last_strong != WTF::Unicode::kLeftToRight) {
-          direction_ = WTF::Unicode::kEuropeanNumber;
+      if (status_.eor == WTF::unicode::kEuropeanNumber) {
+        if (status_.last_strong != WTF::unicode::kLeftToRight) {
+          direction_ = WTF::unicode::kEuropeanNumber;
           AppendRun(runs);
         }
-      } else if (status_.eor == WTF::Unicode::kArabicNumber) {
-        direction_ = WTF::Unicode::kArabicNumber;
+      } else if (status_.eor == WTF::unicode::kArabicNumber) {
+        direction_ = WTF::unicode::kArabicNumber;
         AppendRun(runs);
-      } else if (status_.last_strong != WTF::Unicode::kLeftToRight &&
-                 from == WTF::Unicode::kLeftToRight) {
+      } else if (status_.last_strong != WTF::unicode::kLeftToRight &&
+                 from == WTF::unicode::kLeftToRight) {
         AppendRun(runs);
-        direction_ = WTF::Unicode::kLeftToRight;
+        direction_ = WTF::unicode::kLeftToRight;
       }
-    } else if (status_.eor == WTF::Unicode::kArabicNumber ||
-               (status_.eor == WTF::Unicode::kEuropeanNumber &&
-                (status_.last_strong != WTF::Unicode::kLeftToRight ||
-                 from == WTF::Unicode::kRightToLeft)) ||
-               (status_.eor != WTF::Unicode::kEuropeanNumber &&
-                status_.last_strong == WTF::Unicode::kLeftToRight &&
-                from == WTF::Unicode::kRightToLeft)) {
+    } else if (status_.eor == WTF::unicode::kArabicNumber ||
+               (status_.eor == WTF::unicode::kEuropeanNumber &&
+                (status_.last_strong != WTF::unicode::kLeftToRight ||
+                 from == WTF::unicode::kRightToLeft)) ||
+               (status_.eor != WTF::unicode::kEuropeanNumber &&
+                status_.last_strong == WTF::unicode::kLeftToRight &&
+                from == WTF::unicode::kRightToLeft)) {
       AppendRun(runs);
-      direction_ = WTF::Unicode::kRightToLeft;
+      direction_ = WTF::unicode::kRightToLeft;
     }
     eor_ = last_;
   }
@@ -607,20 +607,20 @@
   scoped_refptr<BidiContext> to_context = Context();
 
   for (const BidiEmbedding& embedding : current_explicit_embedding_sequence_) {
-    if (embedding.Direction() == WTF::Unicode::kPopDirectionalFormat) {
+    if (embedding.Direction() == WTF::unicode::kPopDirectionalFormat) {
       if (BidiContext* parent_context = to_context->Parent())
         to_context = parent_context;
     } else {
-      WTF::Unicode::CharDirection direction =
-          (embedding.Direction() == WTF::Unicode::kRightToLeftEmbedding ||
-           embedding.Direction() == WTF::Unicode::kRightToLeftOverride)
-              ? WTF::Unicode::kRightToLeft
-              : WTF::Unicode::kLeftToRight;
+      WTF::unicode::CharDirection direction =
+          (embedding.Direction() == WTF::unicode::kRightToLeftEmbedding ||
+           embedding.Direction() == WTF::unicode::kRightToLeftOverride)
+              ? WTF::unicode::kRightToLeft
+              : WTF::unicode::kLeftToRight;
       bool override =
-          embedding.Direction() == WTF::Unicode::kLeftToRightOverride ||
-          embedding.Direction() == WTF::Unicode::kRightToLeftOverride;
+          embedding.Direction() == WTF::unicode::kLeftToRightOverride ||
+          embedding.Direction() == WTF::unicode::kRightToLeftOverride;
       unsigned char level = to_context->Level();
-      if (direction == WTF::Unicode::kRightToLeft)
+      if (direction == WTF::unicode::kRightToLeft)
         level = NextGreaterOddLevel(level);
       else
         level = NextGreaterEvenLevel(level);
@@ -636,13 +636,13 @@
   if (to_level > from_level) {
     RaiseExplicitEmbeddingLevel(
         runs,
-        from_level % 2 ? WTF::Unicode::kRightToLeft
-                       : WTF::Unicode::kLeftToRight,
-        to_level % 2 ? WTF::Unicode::kRightToLeft : WTF::Unicode::kLeftToRight);
+        from_level % 2 ? WTF::unicode::kRightToLeft
+                       : WTF::unicode::kLeftToRight,
+        to_level % 2 ? WTF::unicode::kRightToLeft : WTF::unicode::kLeftToRight);
   } else if (to_level < from_level) {
     LowerExplicitEmbeddingLevel(runs, from_level % 2
-                                          ? WTF::Unicode::kRightToLeft
-                                          : WTF::Unicode::kLeftToRight);
+                                          ? WTF::unicode::kRightToLeft
+                                          : WTF::unicode::kLeftToRight);
   }
 
   SetContext(to_context);
@@ -655,39 +655,39 @@
 template <class Iterator, class Run, class IsolatedRun>
 inline void
 BidiResolver<Iterator, Run, IsolatedRun>::UpdateStatusLastFromCurrentDirection(
-    WTF::Unicode::CharDirection dir_current) {
+    WTF::unicode::CharDirection dir_current) {
   switch (dir_current) {
-    case WTF::Unicode::kEuropeanNumberTerminator:
-      if (status_.last != WTF::Unicode::kEuropeanNumber)
-        status_.last = WTF::Unicode::kEuropeanNumberTerminator;
+    case WTF::unicode::kEuropeanNumberTerminator:
+      if (status_.last != WTF::unicode::kEuropeanNumber)
+        status_.last = WTF::unicode::kEuropeanNumberTerminator;
       break;
-    case WTF::Unicode::kEuropeanNumberSeparator:
-    case WTF::Unicode::kCommonNumberSeparator:
-    case WTF::Unicode::kSegmentSeparator:
-    case WTF::Unicode::kWhiteSpaceNeutral:
-    case WTF::Unicode::kOtherNeutral:
+    case WTF::unicode::kEuropeanNumberSeparator:
+    case WTF::unicode::kCommonNumberSeparator:
+    case WTF::unicode::kSegmentSeparator:
+    case WTF::unicode::kWhiteSpaceNeutral:
+    case WTF::unicode::kOtherNeutral:
       switch (status_.last) {
-        case WTF::Unicode::kLeftToRight:
-        case WTF::Unicode::kRightToLeft:
-        case WTF::Unicode::kRightToLeftArabic:
-        case WTF::Unicode::kEuropeanNumber:
-        case WTF::Unicode::kArabicNumber:
+        case WTF::unicode::kLeftToRight:
+        case WTF::unicode::kRightToLeft:
+        case WTF::unicode::kRightToLeftArabic:
+        case WTF::unicode::kEuropeanNumber:
+        case WTF::unicode::kArabicNumber:
           status_.last = dir_current;
           break;
         default:
-          status_.last = WTF::Unicode::kOtherNeutral;
+          status_.last = WTF::unicode::kOtherNeutral;
       }
       break;
-    case WTF::Unicode::kNonSpacingMark:
-    case WTF::Unicode::kBoundaryNeutral:
-    case WTF::Unicode::kRightToLeftEmbedding:
-    case WTF::Unicode::kLeftToRightEmbedding:
-    case WTF::Unicode::kRightToLeftOverride:
-    case WTF::Unicode::kLeftToRightOverride:
-    case WTF::Unicode::kPopDirectionalFormat:
+    case WTF::unicode::kNonSpacingMark:
+    case WTF::unicode::kBoundaryNeutral:
+    case WTF::unicode::kRightToLeftEmbedding:
+    case WTF::unicode::kLeftToRightEmbedding:
+    case WTF::unicode::kRightToLeftOverride:
+    case WTF::unicode::kLeftToRightOverride:
+    case WTF::unicode::kPopDirectionalFormat:
       // ignore these
       break;
-    case WTF::Unicode::kEuropeanNumber:
+    case WTF::unicode::kEuropeanNumber:
     // fall through
     default:
       status_.last = dir_current;
@@ -761,15 +761,15 @@
         continue;
       current = U16_GET_SUPPLEMENTARY(high, low);
     }
-    WTF::Unicode::CharDirection char_direction =
-        WTF::Unicode::Direction(current);
-    if (char_direction == WTF::Unicode::kLeftToRight) {
+    WTF::unicode::CharDirection char_direction =
+        WTF::unicode::Direction(current);
+    if (char_direction == WTF::unicode::kLeftToRight) {
       if (has_strong_directionality)
         *has_strong_directionality = true;
       return TextDirection::kLtr;
     }
-    if (char_direction == WTF::Unicode::kRightToLeft ||
-        char_direction == WTF::Unicode::kRightToLeftArabic) {
+    if (char_direction == WTF::unicode::kRightToLeft ||
+        char_direction == WTF::unicode::kRightToLeftArabic) {
       if (has_strong_directionality)
         *has_strong_directionality = true;
       return TextDirection::kRtl;
@@ -782,10 +782,10 @@
 }
 
 inline TextDirection DirectionForCharacter(UChar32 character) {
-  WTF::Unicode::CharDirection char_direction =
-      WTF::Unicode::Direction(character);
-  if (char_direction == WTF::Unicode::kRightToLeft ||
-      char_direction == WTF::Unicode::kRightToLeftArabic)
+  WTF::unicode::CharDirection char_direction =
+      WTF::unicode::Direction(character);
+  if (char_direction == WTF::unicode::kRightToLeft ||
+      char_direction == WTF::unicode::kRightToLeftArabic)
     return TextDirection::kRtl;
   return TextDirection::kLtr;
 }
@@ -796,7 +796,7 @@
     VisualDirectionOverride override,
     bool hard_line_break,
     bool reorder_runs) {
-  DCHECK_EQ(direction_, WTF::Unicode::kOtherNeutral);
+  DCHECK_EQ(direction_, WTF::unicode::kOtherNeutral);
   trailing_space_run_ = nullptr;
 
   end_of_line_ = end;
@@ -810,8 +810,8 @@
       Increment();
     }
     direction_ = override == kVisualLeftToRightOverride
-                     ? WTF::Unicode::kLeftToRight
-                     : WTF::Unicode::kRightToLeft;
+                     ? WTF::unicode::kLeftToRight
+                     : WTF::unicode::kRightToLeft;
     AppendRun(runs_);
     runs_.SetLogicallyLastRun(runs_.LastRun());
     if (override == kVisualRightToLeftOverride && runs_.RunCount())
@@ -847,7 +847,7 @@
       end_of_run_at_end_of_line_ = last_;
       last_line_ended = true;
     }
-    WTF::Unicode::CharDirection dir_current;
+    WTF::unicode::CharDirection dir_current;
     if (last_line_ended && (hard_line_break || current_.AtEnd())) {
       BidiContext* c = Context();
       if (hard_line_break) {
@@ -869,83 +869,83 @@
     } else {
       dir_current = current_.Direction();
       if (Context()->Override() &&
-          dir_current != WTF::Unicode::kRightToLeftEmbedding &&
-          dir_current != WTF::Unicode::kLeftToRightEmbedding &&
-          dir_current != WTF::Unicode::kRightToLeftOverride &&
-          dir_current != WTF::Unicode::kLeftToRightOverride &&
-          dir_current != WTF::Unicode::kPopDirectionalFormat)
+          dir_current != WTF::unicode::kRightToLeftEmbedding &&
+          dir_current != WTF::unicode::kLeftToRightEmbedding &&
+          dir_current != WTF::unicode::kRightToLeftOverride &&
+          dir_current != WTF::unicode::kLeftToRightOverride &&
+          dir_current != WTF::unicode::kPopDirectionalFormat)
         dir_current = Context()->Dir();
-      else if (dir_current == WTF::Unicode::kNonSpacingMark)
+      else if (dir_current == WTF::unicode::kNonSpacingMark)
         dir_current = status_.last;
     }
 
     // We ignore all character directionality while in unicode-bidi: isolate
     // spans.  We'll handle ordering the isolated characters in a second pass.
     if (InIsolate())
-      dir_current = WTF::Unicode::kOtherNeutral;
+      dir_current = WTF::unicode::kOtherNeutral;
 
-    DCHECK(status_.eor != WTF::Unicode::kOtherNeutral || eor_.AtEnd());
+    DCHECK(status_.eor != WTF::unicode::kOtherNeutral || eor_.AtEnd());
     switch (dir_current) {
       // embedding and overrides (X1-X9 in the Bidi specs)
-      case WTF::Unicode::kRightToLeftEmbedding:
-      case WTF::Unicode::kLeftToRightEmbedding:
-      case WTF::Unicode::kRightToLeftOverride:
-      case WTF::Unicode::kLeftToRightOverride:
-      case WTF::Unicode::kPopDirectionalFormat:
+      case WTF::unicode::kRightToLeftEmbedding:
+      case WTF::unicode::kLeftToRightEmbedding:
+      case WTF::unicode::kRightToLeftOverride:
+      case WTF::unicode::kLeftToRightOverride:
+      case WTF::unicode::kPopDirectionalFormat:
         Embed(dir_current, kFromUnicode);
         CommitExplicitEmbedding(runs_);
         break;
 
       // strong types
-      case WTF::Unicode::kLeftToRight:
+      case WTF::unicode::kLeftToRight:
         switch (status_.last) {
-          case WTF::Unicode::kRightToLeft:
-          case WTF::Unicode::kRightToLeftArabic:
-          case WTF::Unicode::kEuropeanNumber:
-          case WTF::Unicode::kArabicNumber:
-            if (status_.last != WTF::Unicode::kEuropeanNumber ||
-                status_.last_strong != WTF::Unicode::kLeftToRight)
+          case WTF::unicode::kRightToLeft:
+          case WTF::unicode::kRightToLeftArabic:
+          case WTF::unicode::kEuropeanNumber:
+          case WTF::unicode::kArabicNumber:
+            if (status_.last != WTF::unicode::kEuropeanNumber ||
+                status_.last_strong != WTF::unicode::kLeftToRight)
               AppendRun(runs_);
             break;
-          case WTF::Unicode::kLeftToRight:
+          case WTF::unicode::kLeftToRight:
             break;
-          case WTF::Unicode::kEuropeanNumberSeparator:
-          case WTF::Unicode::kEuropeanNumberTerminator:
-          case WTF::Unicode::kCommonNumberSeparator:
-          case WTF::Unicode::kBoundaryNeutral:
-          case WTF::Unicode::kBlockSeparator:
-          case WTF::Unicode::kSegmentSeparator:
-          case WTF::Unicode::kWhiteSpaceNeutral:
-          case WTF::Unicode::kOtherNeutral:
-            if (status_.eor == WTF::Unicode::kEuropeanNumber) {
-              if (status_.last_strong != WTF::Unicode::kLeftToRight) {
+          case WTF::unicode::kEuropeanNumberSeparator:
+          case WTF::unicode::kEuropeanNumberTerminator:
+          case WTF::unicode::kCommonNumberSeparator:
+          case WTF::unicode::kBoundaryNeutral:
+          case WTF::unicode::kBlockSeparator:
+          case WTF::unicode::kSegmentSeparator:
+          case WTF::unicode::kWhiteSpaceNeutral:
+          case WTF::unicode::kOtherNeutral:
+            if (status_.eor == WTF::unicode::kEuropeanNumber) {
+              if (status_.last_strong != WTF::unicode::kLeftToRight) {
                 // the numbers need to be on a higher embedding level, so let's
                 // close that run
-                direction_ = WTF::Unicode::kEuropeanNumber;
+                direction_ = WTF::unicode::kEuropeanNumber;
                 AppendRun(runs_);
-                if (Context()->Dir() != WTF::Unicode::kLeftToRight) {
+                if (Context()->Dir() != WTF::unicode::kLeftToRight) {
                   // the neutrals take the embedding direction, which is R
                   eor_ = last_;
-                  direction_ = WTF::Unicode::kRightToLeft;
+                  direction_ = WTF::unicode::kRightToLeft;
                   AppendRun(runs_);
                 }
               }
-            } else if (status_.eor == WTF::Unicode::kArabicNumber) {
+            } else if (status_.eor == WTF::unicode::kArabicNumber) {
               // Arabic numbers are always on a higher embedding level, so let's
               // close that run
-              direction_ = WTF::Unicode::kArabicNumber;
+              direction_ = WTF::unicode::kArabicNumber;
               AppendRun(runs_);
-              if (Context()->Dir() != WTF::Unicode::kLeftToRight) {
+              if (Context()->Dir() != WTF::unicode::kLeftToRight) {
                 // the neutrals take the embedding direction, which is R
                 eor_ = last_;
-                direction_ = WTF::Unicode::kRightToLeft;
+                direction_ = WTF::unicode::kRightToLeft;
                 AppendRun(runs_);
               }
-            } else if (status_.last_strong != WTF::Unicode::kLeftToRight) {
+            } else if (status_.last_strong != WTF::unicode::kLeftToRight) {
               // last stuff takes embedding dir
-              if (Context()->Dir() == WTF::Unicode::kRightToLeft) {
+              if (Context()->Dir() == WTF::unicode::kRightToLeft) {
                 eor_ = last_;
-                direction_ = WTF::Unicode::kRightToLeft;
+                direction_ = WTF::unicode::kRightToLeft;
               }
               AppendRun(runs_);
             }
@@ -954,38 +954,38 @@
             break;
         }
         eor_ = current_;
-        status_.eor = WTF::Unicode::kLeftToRight;
-        status_.last_strong = WTF::Unicode::kLeftToRight;
-        direction_ = WTF::Unicode::kLeftToRight;
+        status_.eor = WTF::unicode::kLeftToRight;
+        status_.last_strong = WTF::unicode::kLeftToRight;
+        direction_ = WTF::unicode::kLeftToRight;
         break;
-      case WTF::Unicode::kRightToLeftArabic:
-      case WTF::Unicode::kRightToLeft:
+      case WTF::unicode::kRightToLeftArabic:
+      case WTF::unicode::kRightToLeft:
         switch (status_.last) {
-          case WTF::Unicode::kLeftToRight:
-          case WTF::Unicode::kEuropeanNumber:
-          case WTF::Unicode::kArabicNumber:
+          case WTF::unicode::kLeftToRight:
+          case WTF::unicode::kEuropeanNumber:
+          case WTF::unicode::kArabicNumber:
             AppendRun(runs_);
             break;
-          case WTF::Unicode::kRightToLeft:
-          case WTF::Unicode::kRightToLeftArabic:
+          case WTF::unicode::kRightToLeft:
+          case WTF::unicode::kRightToLeftArabic:
             break;
-          case WTF::Unicode::kEuropeanNumberSeparator:
-          case WTF::Unicode::kEuropeanNumberTerminator:
-          case WTF::Unicode::kCommonNumberSeparator:
-          case WTF::Unicode::kBoundaryNeutral:
-          case WTF::Unicode::kBlockSeparator:
-          case WTF::Unicode::kSegmentSeparator:
-          case WTF::Unicode::kWhiteSpaceNeutral:
-          case WTF::Unicode::kOtherNeutral:
-            if (status_.eor == WTF::Unicode::kEuropeanNumber) {
-              if (status_.last_strong == WTF::Unicode::kLeftToRight &&
-                  Context()->Dir() == WTF::Unicode::kLeftToRight)
+          case WTF::unicode::kEuropeanNumberSeparator:
+          case WTF::unicode::kEuropeanNumberTerminator:
+          case WTF::unicode::kCommonNumberSeparator:
+          case WTF::unicode::kBoundaryNeutral:
+          case WTF::unicode::kBlockSeparator:
+          case WTF::unicode::kSegmentSeparator:
+          case WTF::unicode::kWhiteSpaceNeutral:
+          case WTF::unicode::kOtherNeutral:
+            if (status_.eor == WTF::unicode::kEuropeanNumber) {
+              if (status_.last_strong == WTF::unicode::kLeftToRight &&
+                  Context()->Dir() == WTF::unicode::kLeftToRight)
                 eor_ = last_;
               AppendRun(runs_);
-            } else if (status_.eor == WTF::Unicode::kArabicNumber) {
+            } else if (status_.eor == WTF::unicode::kArabicNumber) {
               AppendRun(runs_);
-            } else if (status_.last_strong == WTF::Unicode::kLeftToRight) {
-              if (Context()->Dir() == WTF::Unicode::kLeftToRight)
+            } else if (status_.last_strong == WTF::unicode::kLeftToRight) {
+              if (Context()->Dir() == WTF::unicode::kLeftToRight)
                 eor_ = last_;
               AppendRun(runs_);
             }
@@ -994,129 +994,129 @@
             break;
         }
         eor_ = current_;
-        status_.eor = WTF::Unicode::kRightToLeft;
+        status_.eor = WTF::unicode::kRightToLeft;
         status_.last_strong = dir_current;
-        direction_ = WTF::Unicode::kRightToLeft;
+        direction_ = WTF::unicode::kRightToLeft;
         break;
 
       // weak types:
 
-      case WTF::Unicode::kEuropeanNumber:
+      case WTF::unicode::kEuropeanNumber:
         // If last_strong is kRightToLeftArabic, change kEuropeanNumber to
         // kArabicNumber by falling through after this if.
-        if (status_.last_strong != WTF::Unicode::kRightToLeftArabic) {
+        if (status_.last_strong != WTF::unicode::kRightToLeftArabic) {
           switch (status_.last) {
-            case WTF::Unicode::kEuropeanNumber:
-            case WTF::Unicode::kLeftToRight:
+            case WTF::unicode::kEuropeanNumber:
+            case WTF::unicode::kLeftToRight:
               break;
-            case WTF::Unicode::kRightToLeft:
-            case WTF::Unicode::kRightToLeftArabic:
-            case WTF::Unicode::kArabicNumber:
+            case WTF::unicode::kRightToLeft:
+            case WTF::unicode::kRightToLeftArabic:
+            case WTF::unicode::kArabicNumber:
               eor_ = last_;
               AppendRun(runs_);
-              direction_ = WTF::Unicode::kEuropeanNumber;
+              direction_ = WTF::unicode::kEuropeanNumber;
               break;
-            case WTF::Unicode::kEuropeanNumberSeparator:
-            case WTF::Unicode::kCommonNumberSeparator:
-              if (status_.eor == WTF::Unicode::kEuropeanNumber)
+            case WTF::unicode::kEuropeanNumberSeparator:
+            case WTF::unicode::kCommonNumberSeparator:
+              if (status_.eor == WTF::unicode::kEuropeanNumber)
                 break;
               FALLTHROUGH;
-            case WTF::Unicode::kEuropeanNumberTerminator:
-            case WTF::Unicode::kBoundaryNeutral:
-            case WTF::Unicode::kBlockSeparator:
-            case WTF::Unicode::kSegmentSeparator:
-            case WTF::Unicode::kWhiteSpaceNeutral:
-            case WTF::Unicode::kOtherNeutral:
-              if (status_.eor == WTF::Unicode::kEuropeanNumber) {
-                if (status_.last_strong == WTF::Unicode::kRightToLeft) {
+            case WTF::unicode::kEuropeanNumberTerminator:
+            case WTF::unicode::kBoundaryNeutral:
+            case WTF::unicode::kBlockSeparator:
+            case WTF::unicode::kSegmentSeparator:
+            case WTF::unicode::kWhiteSpaceNeutral:
+            case WTF::unicode::kOtherNeutral:
+              if (status_.eor == WTF::unicode::kEuropeanNumber) {
+                if (status_.last_strong == WTF::unicode::kRightToLeft) {
                   // ENs on both sides behave like Rs, so the neutrals should be
                   // R.  Terminate the EN run.
                   AppendRun(runs_);
                   // Make an R run.
-                  eor_ = status_.last == WTF::Unicode::kEuropeanNumberTerminator
+                  eor_ = status_.last == WTF::unicode::kEuropeanNumberTerminator
                              ? last_before_et_
                              : last_;
-                  direction_ = WTF::Unicode::kRightToLeft;
+                  direction_ = WTF::unicode::kRightToLeft;
                   AppendRun(runs_);
                   // Begin a new EN run.
-                  direction_ = WTF::Unicode::kEuropeanNumber;
+                  direction_ = WTF::unicode::kEuropeanNumber;
                 }
-              } else if (status_.eor == WTF::Unicode::kArabicNumber) {
+              } else if (status_.eor == WTF::unicode::kArabicNumber) {
                 // Terminate the AN run.
                 AppendRun(runs_);
-                if (status_.last_strong == WTF::Unicode::kRightToLeft ||
-                    Context()->Dir() == WTF::Unicode::kRightToLeft) {
+                if (status_.last_strong == WTF::unicode::kRightToLeft ||
+                    Context()->Dir() == WTF::unicode::kRightToLeft) {
                   // Make an R run.
-                  eor_ = status_.last == WTF::Unicode::kEuropeanNumberTerminator
+                  eor_ = status_.last == WTF::unicode::kEuropeanNumberTerminator
                              ? last_before_et_
                              : last_;
-                  direction_ = WTF::Unicode::kRightToLeft;
+                  direction_ = WTF::unicode::kRightToLeft;
                   AppendRun(runs_);
                   // Begin a new EN run.
-                  direction_ = WTF::Unicode::kEuropeanNumber;
+                  direction_ = WTF::unicode::kEuropeanNumber;
                 }
-              } else if (status_.last_strong == WTF::Unicode::kRightToLeft) {
+              } else if (status_.last_strong == WTF::unicode::kRightToLeft) {
                 // Extend the R run to include the neutrals.
-                eor_ = status_.last == WTF::Unicode::kEuropeanNumberTerminator
+                eor_ = status_.last == WTF::unicode::kEuropeanNumberTerminator
                            ? last_before_et_
                            : last_;
-                direction_ = WTF::Unicode::kRightToLeft;
+                direction_ = WTF::unicode::kRightToLeft;
                 AppendRun(runs_);
                 // Begin a new EN run.
-                direction_ = WTF::Unicode::kEuropeanNumber;
+                direction_ = WTF::unicode::kEuropeanNumber;
               }
               break;
             default:
               break;
           }
           eor_ = current_;
-          status_.eor = WTF::Unicode::kEuropeanNumber;
-          if (direction_ == WTF::Unicode::kOtherNeutral)
-            direction_ = WTF::Unicode::kLeftToRight;
+          status_.eor = WTF::unicode::kEuropeanNumber;
+          if (direction_ == WTF::unicode::kOtherNeutral)
+            direction_ = WTF::unicode::kLeftToRight;
           break;
         }
         FALLTHROUGH;
-      case WTF::Unicode::kArabicNumber:
-        dir_current = WTF::Unicode::kArabicNumber;
+      case WTF::unicode::kArabicNumber:
+        dir_current = WTF::unicode::kArabicNumber;
         switch (status_.last) {
-          case WTF::Unicode::kLeftToRight:
-            if (Context()->Dir() == WTF::Unicode::kLeftToRight)
+          case WTF::unicode::kLeftToRight:
+            if (Context()->Dir() == WTF::unicode::kLeftToRight)
               AppendRun(runs_);
             break;
-          case WTF::Unicode::kArabicNumber:
+          case WTF::unicode::kArabicNumber:
             break;
-          case WTF::Unicode::kRightToLeft:
-          case WTF::Unicode::kRightToLeftArabic:
-          case WTF::Unicode::kEuropeanNumber:
+          case WTF::unicode::kRightToLeft:
+          case WTF::unicode::kRightToLeftArabic:
+          case WTF::unicode::kEuropeanNumber:
             eor_ = last_;
             AppendRun(runs_);
             break;
-          case WTF::Unicode::kCommonNumberSeparator:
-            if (status_.eor == WTF::Unicode::kArabicNumber)
+          case WTF::unicode::kCommonNumberSeparator:
+            if (status_.eor == WTF::unicode::kArabicNumber)
               break;
             FALLTHROUGH;
-          case WTF::Unicode::kEuropeanNumberSeparator:
-          case WTF::Unicode::kEuropeanNumberTerminator:
-          case WTF::Unicode::kBoundaryNeutral:
-          case WTF::Unicode::kBlockSeparator:
-          case WTF::Unicode::kSegmentSeparator:
-          case WTF::Unicode::kWhiteSpaceNeutral:
-          case WTF::Unicode::kOtherNeutral:
-            if (status_.eor == WTF::Unicode::kArabicNumber ||
-                (status_.eor == WTF::Unicode::kEuropeanNumber &&
-                 (status_.last_strong == WTF::Unicode::kRightToLeft ||
-                  Context()->Dir() == WTF::Unicode::kRightToLeft)) ||
-                (status_.eor != WTF::Unicode::kEuropeanNumber &&
-                 status_.last_strong == WTF::Unicode::kLeftToRight &&
-                 Context()->Dir() == WTF::Unicode::kRightToLeft)) {
+          case WTF::unicode::kEuropeanNumberSeparator:
+          case WTF::unicode::kEuropeanNumberTerminator:
+          case WTF::unicode::kBoundaryNeutral:
+          case WTF::unicode::kBlockSeparator:
+          case WTF::unicode::kSegmentSeparator:
+          case WTF::unicode::kWhiteSpaceNeutral:
+          case WTF::unicode::kOtherNeutral:
+            if (status_.eor == WTF::unicode::kArabicNumber ||
+                (status_.eor == WTF::unicode::kEuropeanNumber &&
+                 (status_.last_strong == WTF::unicode::kRightToLeft ||
+                  Context()->Dir() == WTF::unicode::kRightToLeft)) ||
+                (status_.eor != WTF::unicode::kEuropeanNumber &&
+                 status_.last_strong == WTF::unicode::kLeftToRight &&
+                 Context()->Dir() == WTF::unicode::kRightToLeft)) {
               // Terminate the run before the neutrals.
               AppendRun(runs_);
               // Begin an R run for the neutrals.
-              direction_ = WTF::Unicode::kRightToLeft;
-            } else if (direction_ == WTF::Unicode::kOtherNeutral) {
-              direction_ = status_.last_strong == WTF::Unicode::kLeftToRight
-                               ? WTF::Unicode::kLeftToRight
-                               : WTF::Unicode::kRightToLeft;
+              direction_ = WTF::unicode::kRightToLeft;
+            } else if (direction_ == WTF::unicode::kOtherNeutral) {
+              direction_ = status_.last_strong == WTF::unicode::kLeftToRight
+                               ? WTF::unicode::kLeftToRight
+                               : WTF::unicode::kRightToLeft;
             }
             eor_ = last_;
             AppendRun(runs_);
@@ -1125,39 +1125,39 @@
             break;
         }
         eor_ = current_;
-        status_.eor = WTF::Unicode::kArabicNumber;
-        if (direction_ == WTF::Unicode::kOtherNeutral)
-          direction_ = WTF::Unicode::kArabicNumber;
+        status_.eor = WTF::unicode::kArabicNumber;
+        if (direction_ == WTF::unicode::kOtherNeutral)
+          direction_ = WTF::unicode::kArabicNumber;
         break;
-      case WTF::Unicode::kEuropeanNumberSeparator:
-      case WTF::Unicode::kCommonNumberSeparator:
+      case WTF::unicode::kEuropeanNumberSeparator:
+      case WTF::unicode::kCommonNumberSeparator:
         break;
-      case WTF::Unicode::kEuropeanNumberTerminator:
-        if (status_.last == WTF::Unicode::kEuropeanNumber) {
-          dir_current = WTF::Unicode::kEuropeanNumber;
+      case WTF::unicode::kEuropeanNumberTerminator:
+        if (status_.last == WTF::unicode::kEuropeanNumber) {
+          dir_current = WTF::unicode::kEuropeanNumber;
           eor_ = current_;
           status_.eor = dir_current;
-        } else if (status_.last != WTF::Unicode::kEuropeanNumberTerminator) {
+        } else if (status_.last != WTF::unicode::kEuropeanNumberTerminator) {
           last_before_et_ = empty_run_ ? eor_ : last_;
         }
         break;
 
       // boundary neutrals should be ignored
-      case WTF::Unicode::kBoundaryNeutral:
+      case WTF::unicode::kBoundaryNeutral:
         if (eor_ == last_)
           eor_ = current_;
         break;
       // neutrals
-      case WTF::Unicode::kBlockSeparator:
+      case WTF::unicode::kBlockSeparator:
         // ### what do we do with newline and paragraph seperators that come to
         // here?
         break;
-      case WTF::Unicode::kSegmentSeparator:
+      case WTF::unicode::kSegmentSeparator:
         // ### implement rule L1
         break;
-      case WTF::Unicode::kWhiteSpaceNeutral:
+      case WTF::unicode::kWhiteSpaceNeutral:
         break;
-      case WTF::Unicode::kOtherNeutral:
+      case WTF::unicode::kOtherNeutral:
         break;
       default:
         break;
@@ -1167,15 +1167,15 @@
       if (!reached_end_of_line_) {
         eor_ = end_of_run_at_end_of_line_;
         switch (status_.eor) {
-          case WTF::Unicode::kLeftToRight:
-          case WTF::Unicode::kRightToLeft:
-          case WTF::Unicode::kArabicNumber:
+          case WTF::unicode::kLeftToRight:
+          case WTF::unicode::kRightToLeft:
+          case WTF::unicode::kArabicNumber:
             direction_ = status_.eor;
             break;
-          case WTF::Unicode::kEuropeanNumber:
-            direction_ = status_.last_strong == WTF::Unicode::kLeftToRight
-                             ? WTF::Unicode::kLeftToRight
-                             : WTF::Unicode::kEuropeanNumber;
+          case WTF::unicode::kEuropeanNumber:
+            direction_ = status_.last_strong == WTF::unicode::kLeftToRight
+                             ? WTF::unicode::kLeftToRight
+                             : WTF::unicode::kEuropeanNumber;
             break;
           default:
             NOTREACHED();
@@ -1190,7 +1190,7 @@
       reached_end_of_line_ = state_at_end.reached_end_of_line_;
       last_before_et_ = state_at_end.last_before_et_;
       empty_run_ = state_at_end.empty_run_;
-      direction_ = WTF::Unicode::kOtherNeutral;
+      direction_ = WTF::unicode::kOtherNeutral;
       break;
     }
 
@@ -1214,7 +1214,7 @@
         reached_end_of_line_ = state_at_end.reached_end_of_line_;
         last_before_et_ = state_at_end.last_before_et_;
         empty_run_ = state_at_end.empty_run_;
-        direction_ = WTF::Unicode::kOtherNeutral;
+        direction_ = WTF::unicode::kOtherNeutral;
         break;
       }
     }
diff --git a/third_party/blink/renderer/platform/text/capitalize.cc b/third_party/blink/renderer/platform/text/capitalize.cc
index 858ef83..1336b82 100644
--- a/third_party/blink/renderer/platform/text/capitalize.cc
+++ b/third_party/blink/renderer/platform/text/capitalize.cc
@@ -48,7 +48,7 @@
       result.Append(
           input[start_of_word - 1] == kNoBreakSpaceCharacter
               ? kNoBreakSpaceCharacter
-              : WTF::Unicode::ToTitleCase(string_with_previous[start_of_word]));
+              : WTF::unicode::ToTitleCase(string_with_previous[start_of_word]));
     }
     for (int i = start_of_word + 1; i < end_of_word; i++)
       result.Append(input[i - 1]);
diff --git a/third_party/blink/renderer/platform/text/character.cc b/third_party/blink/renderer/platform/text/character.cc
index f9fa1d1..e43dbce 100644
--- a/third_party/blink/renderer/platform/text/character.cc
+++ b/third_party/blink/renderer/platform/text/character.cc
@@ -236,11 +236,11 @@
 }
 
 bool Character::CanReceiveTextEmphasis(UChar32 c) {
-  WTF::Unicode::CharCategory category = WTF::Unicode::Category(c);
+  WTF::unicode::CharCategory category = WTF::unicode::Category(c);
   if (category &
-      (WTF::Unicode::kSeparator_Space | WTF::Unicode::kSeparator_Line |
-       WTF::Unicode::kSeparator_Paragraph | WTF::Unicode::kOther_NotAssigned |
-       WTF::Unicode::kOther_Control | WTF::Unicode::kOther_Format))
+      (WTF::unicode::kSeparator_Space | WTF::unicode::kSeparator_Line |
+       WTF::unicode::kSeparator_Paragraph | WTF::unicode::kOther_NotAssigned |
+       WTF::unicode::kOther_Control | WTF::unicode::kOther_Format))
     return false;
 
   // Additional word-separator characters listed in CSS Text Level 3 Editor's
@@ -292,7 +292,7 @@
 }
 
 bool Character::IsPrivateUse(UChar32 character) {
-  return WTF::Unicode::Category(character) & WTF::Unicode::kOther_PrivateUse;
+  return WTF::unicode::Category(character) & WTF::unicode::kOther_PrivateUse;
 }
 
 bool Character::IsNonCharacter(UChar32 character) {
diff --git a/third_party/blink/renderer/platform/text/locale_win.cc b/third_party/blink/renderer/platform/text/locale_win.cc
index 8b5049f..80fcf10 100644
--- a/third_party/blink/renderer/platform/text/locale_win.cc
+++ b/third_party/blink/renderer/platform/text/locale_win.cc
@@ -325,10 +325,10 @@
 }
 
 bool LocaleWin::IsRTL() {
-  WTF::Unicode::CharDirection dir =
-      WTF::Unicode::Direction(MonthLabels()[0][0]);
-  return dir == WTF::Unicode::kRightToLeft ||
-         dir == WTF::Unicode::kRightToLeftArabic;
+  WTF::unicode::CharDirection dir =
+      WTF::unicode::Direction(MonthLabels()[0][0]);
+  return dir == WTF::unicode::kRightToLeft ||
+         dir == WTF::unicode::kRightToLeftArabic;
 }
 
 String LocaleWin::DateFormat() {
diff --git a/third_party/blink/renderer/platform/text/segmented_string.h b/third_party/blink/renderer/platform/text/segmented_string.h
index fb0c7d6..9e5a55e 100644
--- a/third_party/blink/renderer/platform/text/segmented_string.h
+++ b/third_party/blink/renderer/platform/text/segmented_string.h
@@ -226,8 +226,8 @@
   }
 
   ALWAYS_INLINE void AdvanceAndASSERTIgnoringCase(UChar expected_character) {
-    DCHECK_EQ(WTF::Unicode::FoldCase(CurrentChar()),
-              WTF::Unicode::FoldCase(expected_character));
+    DCHECK_EQ(WTF::unicode::FoldCase(CurrentChar()),
+              WTF::unicode::FoldCase(expected_character));
     Advance();
   }
 
diff --git a/third_party/blink/renderer/platform/text/text_boundaries.cc b/third_party/blink/renderer/platform/text/text_boundaries.cc
index 2161def..3a09acd8 100644
--- a/third_party/blink/renderer/platform/text/text_boundaries.cc
+++ b/third_party/blink/renderer/platform/text/text_boundaries.cc
@@ -62,7 +62,7 @@
       // We stop searching when the character preceeding the break
       // is alphanumeric or underscore.
       if (position < len &&
-          (WTF::Unicode::IsAlphanumeric(chars[position - 1]) ||
+          (WTF::unicode::IsAlphanumeric(chars[position - 1]) ||
            chars[position - 1] == kLowLineCharacter))
         return position;
 
@@ -79,7 +79,7 @@
   while (position != kTextBreakDone) {
     // We stop searching when the character following the break
     // is alphanumeric or underscore.
-    if (position > 0 && (WTF::Unicode::IsAlphanumeric(chars[position]) ||
+    if (position > 0 && (WTF::unicode::IsAlphanumeric(chars[position]) ||
                          chars[position] == kLowLineCharacter))
       return position;
 
diff --git a/third_party/blink/renderer/platform/text/text_boundaries.h b/third_party/blink/renderer/platform/text/text_boundaries.h
index 44c5438..7a7cc4b 100644
--- a/third_party/blink/renderer/platform/text/text_boundaries.h
+++ b/third_party/blink/renderer/platform/text/text_boundaries.h
@@ -34,7 +34,7 @@
 namespace blink {
 
 inline bool RequiresContextForWordBoundary(UChar32 ch) {
-  return WTF::Unicode::HasLineBreakingPropertyComplexContext(ch);
+  return WTF::unicode::HasLineBreakingPropertyComplexContext(ch);
 }
 
 PLATFORM_EXPORT int EndOfFirstWordBoundaryContext(const UChar* characters,
diff --git a/third_party/blink/renderer/platform/text/text_break_iterator.cc b/third_party/blink/renderer/platform/text/text_break_iterator.cc
index e39e8df0..0160d67 100644
--- a/third_party/blink/renderer/platform/text/text_break_iterator.cc
+++ b/third_party/blink/renderer/platform/text/text_break_iterator.cc
@@ -284,9 +284,9 @@
                                           UChar next_ch) {
   UChar pre_ch = U_MASK(u_charType(ch)) & U_GC_M_MASK ? last_ch : ch;
   return U_MASK(u_charType(pre_ch)) & (U_GC_L_MASK | U_GC_N_MASK) &&
-         !WTF::Unicode::HasLineBreakingPropertyComplexContext(pre_ch) &&
+         !WTF::unicode::HasLineBreakingPropertyComplexContext(pre_ch) &&
          U_MASK(u_charType(next_ch)) & (U_GC_L_MASK | U_GC_N_MASK) &&
-         !WTF::Unicode::HasLineBreakingPropertyComplexContext(next_ch);
+         !WTF::unicode::HasLineBreakingPropertyComplexContext(next_ch);
 }
 
 inline bool NeedsLineBreakIterator(UChar ch) {
diff --git a/third_party/blink/renderer/platform/text/text_run_iterator.h b/third_party/blink/renderer/platform/text/text_run_iterator.h
index 4e64b83..a277cdc1 100644
--- a/third_party/blink/renderer/platform/text/text_run_iterator.h
+++ b/third_party/blink/renderer/platform/text/text_run_iterator.h
@@ -52,9 +52,9 @@
   void Increment() { offset_++; }
   bool AtEnd() const { return offset_ >= length_; }
   UChar Current() const { return (*text_run_)[offset_]; }
-  WTF::Unicode::CharDirection Direction() const {
-    return AtEnd() ? WTF::Unicode::kOtherNeutral
-                   : WTF::Unicode::Direction(Current());
+  WTF::unicode::CharDirection Direction() const {
+    return AtEnd() ? WTF::unicode::kOtherNeutral
+                   : WTF::unicode::Direction(Current());
   }
   bool AtParagraphSeparator() const { return Current() == '\n'; }
 
diff --git a/third_party/blink/renderer/platform/weborigin/DEPS b/third_party/blink/renderer/platform/weborigin/DEPS
index 1b1d6a7..14eb4e4 100644
--- a/third_party/blink/renderer/platform/weborigin/DEPS
+++ b/third_party/blink/renderer/platform/weborigin/DEPS
@@ -11,9 +11,6 @@
     "+net/base",
     "+services/network/public/cpp/cors/origin_access_entry.h",
     "+services/network/public/cpp/cors/origin_access_list.h",
-    "+services/network/public/mojom/cors.mojom-shared.h",
-    "+services/network/public/mojom/cors_origin_pattern.mojom-shared.h",
-    "+services/network/public/mojom/referrer_policy.mojom-blink.h",
     "+third_party/blink/renderer/platform/blob/blob_url.h",
     "+third_party/blink/renderer/platform/platform_export.h",
     "+third_party/blink/renderer/platform/runtime_enabled_features.h",
diff --git a/third_party/blink/renderer/platform/weborigin/referrer.h b/third_party/blink/renderer/platform/weborigin/referrer.h
index aa577e33..e47ab10 100644
--- a/third_party/blink/renderer/platform/weborigin/referrer.h
+++ b/third_party/blink/renderer/platform/weborigin/referrer.h
@@ -31,8 +31,8 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_WEBORIGIN_REFERRER_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_WEBORIGIN_REFERRER_H_
 
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/wtf/allocator.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
@@ -40,17 +40,18 @@
 
 struct Referrer {
   DISALLOW_NEW();
-  Referrer(const String& referrer, ReferrerPolicy referrer_policy)
+  Referrer(const String& referrer,
+           network::mojom::ReferrerPolicy referrer_policy)
       : referrer(referrer), referrer_policy(referrer_policy) {
     DCHECK(referrer == NoReferrer() || KURL(NullURL(), referrer).IsValid());
   }
-  Referrer() : referrer_policy(kReferrerPolicyDefault) {}
+  Referrer() : referrer_policy(network::mojom::ReferrerPolicy::kDefault) {}
   // We use these strings instead of "no-referrer" and "client" in the spec.
   static String NoReferrer() { return String(); }
   static String ClientReferrerString() { return "about:client"; }
 
   AtomicString referrer;
-  ReferrerPolicy referrer_policy;
+  network::mojom::ReferrerPolicy referrer_policy;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/weborigin/referrer_policy.h b/third_party/blink/renderer/platform/weborigin/referrer_policy.h
deleted file mode 100644
index e9ddd2f8..0000000
--- a/third_party/blink/renderer/platform/weborigin/referrer_policy.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_WEBORIGIN_REFERRER_POLICY_H_
-#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_WEBORIGIN_REFERRER_POLICY_H_
-
-#include <stdint.h>
-
-namespace blink {
-
-enum ReferrerPolicy : uint8_t {
-  // https://w3c.github.io/webappsec/specs/referrer-policy/#referrer-policy-state-unsafe-url
-  kReferrerPolicyAlways,
-  // The default policy, if no policy is explicitly set by the page.
-  kReferrerPolicyDefault,
-  // https://w3c.github.io/webappsec/specs/referrer-policy/#referrer-policy-state-no-referrer-when-downgrade
-  kReferrerPolicyNoReferrerWhenDowngrade,
-  // https://w3c.github.io/webappsec/specs/referrer-policy/#referrer-policy-state-no-referrer
-  kReferrerPolicyNever,
-  // https://w3c.github.io/webappsec/specs/referrer-policy/#referrer-policy-state-origin
-  kReferrerPolicyOrigin,
-  // https://w3c.github.io/webappsec/specs/referrer-policy/#referrer-policy-state-origin-when-cross-origin
-  kReferrerPolicyOriginWhenCrossOrigin,
-  // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-strict-origin-when-cross-origin
-  // Also used as the default policy when reduced-referrer-granularity is
-  // enabled (not spec conformant).
-  kReferrerPolicyStrictOriginWhenCrossOrigin,
-  // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-same-origin
-  kReferrerPolicySameOrigin,
-  // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-strict-origin
-  kReferrerPolicyStrictOrigin,
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WEBORIGIN_REFERRER_POLICY_H_
diff --git a/third_party/blink/renderer/platform/weborigin/security_policy.cc b/third_party/blink/renderer/platform/weborigin/security_policy.cc
index 9ef5ab6e..2a893a7 100644
--- a/third_party/blink/renderer/platform/weborigin/security_policy.cc
+++ b/third_party/blink/renderer/platform/weborigin/security_policy.cc
@@ -32,7 +32,6 @@
 
 #include "base/strings/pattern.h"
 #include "services/network/public/cpp/cors/origin_access_list.h"
-#include "services/network/public/mojom/cors_origin_pattern.mojom-shared.h"
 #include "services/network/public/mojom/referrer_policy.mojom-blink.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
@@ -90,15 +89,18 @@
   return !url_is_secure_url;
 }
 
-Referrer SecurityPolicy::GenerateReferrer(ReferrerPolicy referrer_policy,
-                                          const KURL& url,
-                                          const String& referrer) {
-  ReferrerPolicy referrer_policy_no_default = referrer_policy;
-  if (referrer_policy_no_default == kReferrerPolicyDefault) {
+Referrer SecurityPolicy::GenerateReferrer(
+    network::mojom::ReferrerPolicy referrer_policy,
+    const KURL& url,
+    const String& referrer) {
+  network::mojom::ReferrerPolicy referrer_policy_no_default = referrer_policy;
+  if (referrer_policy_no_default == network::mojom::ReferrerPolicy::kDefault) {
     if (RuntimeEnabledFeatures::ReducedReferrerGranularityEnabled()) {
-      referrer_policy_no_default = kReferrerPolicyStrictOriginWhenCrossOrigin;
+      referrer_policy_no_default = network::mojom::ReferrerPolicy::
+          kNoReferrerWhenDowngradeOriginWhenCrossOrigin;
     } else {
-      referrer_policy_no_default = kReferrerPolicyNoReferrerWhenDowngrade;
+      referrer_policy_no_default =
+          network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade;
     }
   }
   if (referrer == Referrer::NoReferrer())
@@ -114,17 +116,17 @@
     return Referrer(Referrer::NoReferrer(), referrer_policy_no_default);
 
   switch (referrer_policy_no_default) {
-    case kReferrerPolicyNever:
+    case network::mojom::ReferrerPolicy::kNever:
       return Referrer(Referrer::NoReferrer(), referrer_policy_no_default);
-    case kReferrerPolicyAlways:
+    case network::mojom::ReferrerPolicy::kAlways:
       return Referrer(referrer, referrer_policy_no_default);
-    case kReferrerPolicyOrigin: {
+    case network::mojom::ReferrerPolicy::kOrigin: {
       String origin = SecurityOrigin::Create(referrer_url)->ToString();
       // A security origin is not a canonical URL as it lacks a path. Add /
       // to turn it into a canonical URL we can use as referrer.
       return Referrer(origin + "/", referrer_policy_no_default);
     }
-    case kReferrerPolicyOriginWhenCrossOrigin: {
+    case network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin: {
       scoped_refptr<const SecurityOrigin> referrer_origin =
           SecurityOrigin::Create(referrer_url);
       scoped_refptr<const SecurityOrigin> url_origin =
@@ -135,7 +137,7 @@
       }
       break;
     }
-    case kReferrerPolicySameOrigin: {
+    case network::mojom::ReferrerPolicy::kSameOrigin: {
       scoped_refptr<const SecurityOrigin> referrer_origin =
           SecurityOrigin::Create(referrer_url);
       scoped_refptr<const SecurityOrigin> url_origin =
@@ -145,14 +147,15 @@
       }
       return Referrer(referrer, referrer_policy_no_default);
     }
-    case kReferrerPolicyStrictOrigin: {
+    case network::mojom::ReferrerPolicy::kStrictOrigin: {
       String origin = SecurityOrigin::Create(referrer_url)->ToString();
       return Referrer(ShouldHideReferrer(url, referrer_url)
                           ? Referrer::NoReferrer()
                           : origin + "/",
                       referrer_policy_no_default);
     }
-    case kReferrerPolicyStrictOriginWhenCrossOrigin: {
+    case network::mojom::ReferrerPolicy::
+        kNoReferrerWhenDowngradeOriginWhenCrossOrigin: {
       scoped_refptr<const SecurityOrigin> referrer_origin =
           SecurityOrigin::Create(referrer_url);
       scoped_refptr<const SecurityOrigin> url_origin =
@@ -166,9 +169,9 @@
       }
       break;
     }
-    case kReferrerPolicyNoReferrerWhenDowngrade:
+    case network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade:
       break;
-    case kReferrerPolicyDefault:
+    case network::mojom::ReferrerPolicy::kDefault:
       NOTREACHED();
       break;
   }
@@ -243,10 +246,12 @@
     const network::mojom::CorsOriginAccessMatchPriority priority) {
   MutexLocker lock(GetMutex());
   GetOriginAccessList().AddAllowListEntryForOrigin(
-      source_origin.ToUrlOrigin(), network::mojom::CorsOriginPattern::New(
-                                       WebString(destination_protocol).Utf8(),
-                                       WebString(destination_domain).Utf8(),
-                                       allow_destination_subdomains, priority));
+      source_origin.ToUrlOrigin(), WebString(destination_protocol).Utf8(),
+      WebString(destination_domain).Utf8(),
+      allow_destination_subdomains
+          ? network::mojom::CorsOriginAccessMatchMode::kAllowSubdomains
+          : network::mojom::CorsOriginAccessMatchMode::kDisallowSubdomains,
+      priority);
 }
 
 void SecurityPolicy::AddOriginAccessBlockListEntry(
@@ -257,21 +262,20 @@
     const network::mojom::CorsOriginAccessMatchPriority priority) {
   MutexLocker lock(GetMutex());
   GetOriginAccessList().AddBlockListEntryForOrigin(
-      source_origin.ToUrlOrigin(), network::mojom::CorsOriginPattern::New(
-                                       WebString(destination_protocol).Utf8(),
-                                       WebString(destination_domain).Utf8(),
-                                       allow_destination_subdomains, priority));
+      source_origin.ToUrlOrigin(), WebString(destination_protocol).Utf8(),
+      WebString(destination_domain).Utf8(),
+      allow_destination_subdomains
+          ? network::mojom::CorsOriginAccessMatchMode::kAllowSubdomains
+          : network::mojom::CorsOriginAccessMatchMode::kDisallowSubdomains,
+      priority);
 }
 
 void SecurityPolicy::ClearOriginAccessListForOrigin(
     const SecurityOrigin& source_origin) {
   MutexLocker lock(GetMutex());
-  GetOriginAccessList().SetAllowListForOrigin(
-      source_origin.ToUrlOrigin(),
-      std::vector<network::mojom::CorsOriginPatternPtr>());
-  GetOriginAccessList().SetBlockListForOrigin(
-      source_origin.ToUrlOrigin(),
-      std::vector<network::mojom::CorsOriginPatternPtr>());
+  const url::Origin origin = source_origin.ToUrlOrigin();
+  GetOriginAccessList().ClearAllowListForOrigin(origin);
+  GetOriginAccessList().ClearBlockListForOrigin(origin);
 }
 
 void SecurityPolicy::ClearOriginAccessList() {
@@ -283,7 +287,7 @@
 bool SecurityPolicy::ReferrerPolicyFromString(
     const String& policy,
     ReferrerPolicyLegacyKeywordsSupport legacy_keywords_support,
-    ReferrerPolicy* result) {
+    network::mojom::ReferrerPolicy* result) {
   DCHECK(!policy.IsNull());
   bool support_legacy_keywords =
       (legacy_keywords_support == kSupportReferrerPolicyLegacyKeywords);
@@ -291,39 +295,40 @@
   if (EqualIgnoringASCIICase(policy, "no-referrer") ||
       (support_legacy_keywords && (EqualIgnoringASCIICase(policy, "never") ||
                                    EqualIgnoringASCIICase(policy, "none")))) {
-    *result = kReferrerPolicyNever;
+    *result = network::mojom::ReferrerPolicy::kNever;
     return true;
   }
   if (EqualIgnoringASCIICase(policy, "unsafe-url") ||
       (support_legacy_keywords && EqualIgnoringASCIICase(policy, "always"))) {
-    *result = kReferrerPolicyAlways;
+    *result = network::mojom::ReferrerPolicy::kAlways;
     return true;
   }
   if (EqualIgnoringASCIICase(policy, "origin")) {
-    *result = kReferrerPolicyOrigin;
+    *result = network::mojom::ReferrerPolicy::kOrigin;
     return true;
   }
   if (EqualIgnoringASCIICase(policy, "origin-when-cross-origin") ||
       (support_legacy_keywords &&
        EqualIgnoringASCIICase(policy, "origin-when-crossorigin"))) {
-    *result = kReferrerPolicyOriginWhenCrossOrigin;
+    *result = network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin;
     return true;
   }
   if (EqualIgnoringASCIICase(policy, "same-origin")) {
-    *result = kReferrerPolicySameOrigin;
+    *result = network::mojom::ReferrerPolicy::kSameOrigin;
     return true;
   }
   if (EqualIgnoringASCIICase(policy, "strict-origin")) {
-    *result = kReferrerPolicyStrictOrigin;
+    *result = network::mojom::ReferrerPolicy::kStrictOrigin;
     return true;
   }
   if (EqualIgnoringASCIICase(policy, "strict-origin-when-cross-origin")) {
-    *result = kReferrerPolicyStrictOriginWhenCrossOrigin;
+    *result = network::mojom::ReferrerPolicy::
+        kNoReferrerWhenDowngradeOriginWhenCrossOrigin;
     return true;
   }
   if (EqualIgnoringASCIICase(policy, "no-referrer-when-downgrade") ||
       (support_legacy_keywords && EqualIgnoringASCIICase(policy, "default"))) {
-    *result = kReferrerPolicyNoReferrerWhenDowngrade;
+    *result = network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade;
     return true;
   }
   return false;
@@ -341,13 +346,14 @@
 bool SecurityPolicy::ReferrerPolicyFromHeaderValue(
     const String& header_value,
     ReferrerPolicyLegacyKeywordsSupport legacy_keywords_support,
-    ReferrerPolicy* result) {
-  ReferrerPolicy referrer_policy = kReferrerPolicyDefault;
+    network::mojom::ReferrerPolicy* result) {
+  network::mojom::ReferrerPolicy referrer_policy =
+      network::mojom::ReferrerPolicy::kDefault;
 
   Vector<String> tokens;
   header_value.Split(',', true, tokens);
   for (const auto& token : tokens) {
-    ReferrerPolicy current_result;
+    network::mojom::ReferrerPolicy current_result;
     auto stripped_token = token.StripWhiteSpace();
     if (SecurityPolicy::ReferrerPolicyFromString(token.StripWhiteSpace(),
                                                  legacy_keywords_support,
@@ -364,7 +370,7 @@
     }
   }
 
-  if (referrer_policy == kReferrerPolicyDefault)
+  if (referrer_policy == network::mojom::ReferrerPolicy::kDefault)
     return false;
 
   *result = referrer_policy;
@@ -372,23 +378,24 @@
 }
 
 STATIC_ASSERT_ENUM(network::mojom::ReferrerPolicy::kAlways,
-                   kReferrerPolicyAlways);
+                   network::mojom::ReferrerPolicy::kAlways);
 STATIC_ASSERT_ENUM(network::mojom::ReferrerPolicy::kDefault,
-                   kReferrerPolicyDefault);
+                   network::mojom::ReferrerPolicy::kDefault);
 STATIC_ASSERT_ENUM(network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade,
-                   kReferrerPolicyNoReferrerWhenDowngrade);
+                   network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade);
 STATIC_ASSERT_ENUM(network::mojom::ReferrerPolicy::kNever,
-                   kReferrerPolicyNever);
+                   network::mojom::ReferrerPolicy::kNever);
 STATIC_ASSERT_ENUM(network::mojom::ReferrerPolicy::kOrigin,
-                   kReferrerPolicyOrigin);
+                   network::mojom::ReferrerPolicy::kOrigin);
 STATIC_ASSERT_ENUM(network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin,
-                   kReferrerPolicyOriginWhenCrossOrigin);
+                   network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin);
 STATIC_ASSERT_ENUM(network::mojom::ReferrerPolicy::kSameOrigin,
-                   kReferrerPolicySameOrigin);
+                   network::mojom::ReferrerPolicy::kSameOrigin);
 STATIC_ASSERT_ENUM(network::mojom::ReferrerPolicy::kStrictOrigin,
-                   kReferrerPolicyStrictOrigin);
+                   network::mojom::ReferrerPolicy::kStrictOrigin);
 STATIC_ASSERT_ENUM(network::mojom::ReferrerPolicy::
                        kNoReferrerWhenDowngradeOriginWhenCrossOrigin,
-                   kReferrerPolicyStrictOriginWhenCrossOrigin);
+                   network::mojom::ReferrerPolicy::
+                       kNoReferrerWhenDowngradeOriginWhenCrossOrigin);
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/weborigin/security_policy.h b/third_party/blink/renderer/platform/weborigin/security_policy.h
index 397939f..a3ebc1e8 100644
--- a/third_party/blink/renderer/platform/weborigin/security_policy.h
+++ b/third_party/blink/renderer/platform/weborigin/security_policy.h
@@ -30,9 +30,9 @@
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_WEBORIGIN_SECURITY_POLICY_H_
 
 #include "services/network/public/mojom/cors_origin_pattern.mojom-shared.h"
+#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
 #include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/weborigin/referrer.h"
-#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/wtf/allocator.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
@@ -62,7 +62,7 @@
   // Returns the referrer modified according to the referrer policy for a
   // navigation to a given URL. If the referrer returned is empty, the
   // referrer header should be omitted.
-  static Referrer GenerateReferrer(ReferrerPolicy,
+  static Referrer GenerateReferrer(network::mojom::ReferrerPolicy,
                                    const KURL&,
                                    const String& referrer);
 
@@ -93,11 +93,12 @@
 
   static bool ReferrerPolicyFromString(const String& policy,
                                        ReferrerPolicyLegacyKeywordsSupport,
-                                       ReferrerPolicy* result);
+                                       network::mojom::ReferrerPolicy* result);
 
-  static bool ReferrerPolicyFromHeaderValue(const String& header_value,
-                                            ReferrerPolicyLegacyKeywordsSupport,
-                                            ReferrerPolicy* result);
+  static bool ReferrerPolicyFromHeaderValue(
+      const String& header_value,
+      ReferrerPolicyLegacyKeywordsSupport,
+      network::mojom::ReferrerPolicy* result);
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/weborigin/security_policy_test.cc b/third_party/blink/renderer/platform/weborigin/security_policy_test.cc
index a8bd312..ec1e5212 100644
--- a/third_party/blink/renderer/platform/weborigin/security_policy_test.cc
+++ b/third_party/blink/renderer/platform/weborigin/security_policy_test.cc
@@ -41,7 +41,8 @@
 TEST(SecurityPolicyTest, EmptyReferrerForUnauthorizedScheme) {
   const KURL example_http_url = KURL("http://example.com/");
   EXPECT_TRUE(String() == SecurityPolicy::GenerateReferrer(
-                              kReferrerPolicyAlways, example_http_url,
+                              network::mojom::ReferrerPolicy::kAlways,
+                              example_http_url,
                               String::FromUTF8("chrome://somepage/"))
                               .referrer);
 }
@@ -52,11 +53,13 @@
   const String foobar_scheme = String::FromUTF8("foobar");
 
   EXPECT_EQ(String(), SecurityPolicy::GenerateReferrer(
-                          kReferrerPolicyAlways, example_http_url, foobar_url)
+                          network::mojom::ReferrerPolicy::kAlways,
+                          example_http_url, foobar_url)
                           .referrer);
   SchemeRegistry::RegisterURLSchemeAsAllowedForReferrer(foobar_scheme);
   EXPECT_EQ(foobar_url, SecurityPolicy::GenerateReferrer(
-                            kReferrerPolicyAlways, example_http_url, foobar_url)
+                            network::mojom::ReferrerPolicy::kAlways,
+                            example_http_url, foobar_url)
                             .referrer);
   SchemeRegistry::RemoveURLSchemeAsAllowedForReferrer(foobar_scheme);
 }
@@ -75,7 +78,7 @@
 
 TEST(SecurityPolicyTest, GenerateReferrer) {
   struct TestCase {
-    ReferrerPolicy policy;
+    network::mojom::ReferrerPolicy policy;
     const char* referrer;
     const char* destination;
     const char* expected;
@@ -95,97 +98,140 @@
 
   TestCase inputs[] = {
       // HTTP -> HTTP: Same Origin
-      {kReferrerPolicyAlways, kInsecureURLA, kInsecureURLA, kInsecureURLA},
-      {kReferrerPolicyDefault, kInsecureURLA, kInsecureURLA, kInsecureURLA},
-      {kReferrerPolicyNoReferrerWhenDowngrade, kInsecureURLA, kInsecureURLA,
+      {network::mojom::ReferrerPolicy::kAlways, kInsecureURLA, kInsecureURLA,
        kInsecureURLA},
-      {kReferrerPolicyNever, kInsecureURLA, kInsecureURLA, nullptr},
-      {kReferrerPolicyOrigin, kInsecureURLA, kInsecureURLA, kInsecureOriginA},
-      {kReferrerPolicyOriginWhenCrossOrigin, kInsecureURLA, kInsecureURLA,
+      {network::mojom::ReferrerPolicy::kDefault, kInsecureURLA, kInsecureURLA,
        kInsecureURLA},
-      {kReferrerPolicySameOrigin, kInsecureURLA, kInsecureURLA, kInsecureURLA},
-      {kReferrerPolicyStrictOrigin, kInsecureURLA, kInsecureURLA,
+      {network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade, kInsecureURLA,
+       kInsecureURLA, kInsecureURLA},
+      {network::mojom::ReferrerPolicy::kNever, kInsecureURLA, kInsecureURLA,
+       nullptr},
+      {network::mojom::ReferrerPolicy::kOrigin, kInsecureURLA, kInsecureURLA,
        kInsecureOriginA},
-      {kReferrerPolicyStrictOriginWhenCrossOrigin, kInsecureURLA, kInsecureURLA,
-       kInsecureURLA},
+      {network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin, kInsecureURLA,
+       kInsecureURLA, kInsecureURLA},
+      {network::mojom::ReferrerPolicy::kSameOrigin, kInsecureURLA,
+       kInsecureURLA, kInsecureURLA},
+      {network::mojom::ReferrerPolicy::kStrictOrigin, kInsecureURLA,
+       kInsecureURLA, kInsecureOriginA},
+      {network::mojom::ReferrerPolicy::
+           kNoReferrerWhenDowngradeOriginWhenCrossOrigin,
+       kInsecureURLA, kInsecureURLA, kInsecureURLA},
 
       // HTTP -> HTTP: Cross Origin
-      {kReferrerPolicyAlways, kInsecureURLA, kInsecureURLB, kInsecureURLA},
-      {kReferrerPolicyDefault, kInsecureURLA, kInsecureURLB, kInsecureURLA},
-      {kReferrerPolicyNoReferrerWhenDowngrade, kInsecureURLA, kInsecureURLB,
+      {network::mojom::ReferrerPolicy::kAlways, kInsecureURLA, kInsecureURLB,
        kInsecureURLA},
-      {kReferrerPolicyNever, kInsecureURLA, kInsecureURLB, nullptr},
-      {kReferrerPolicyOrigin, kInsecureURLA, kInsecureURLB, kInsecureOriginA},
-      {kReferrerPolicyOriginWhenCrossOrigin, kInsecureURLA, kInsecureURLB,
+      {network::mojom::ReferrerPolicy::kDefault, kInsecureURLA, kInsecureURLB,
+       kInsecureURLA},
+      {network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade, kInsecureURLA,
+       kInsecureURLB, kInsecureURLA},
+      {network::mojom::ReferrerPolicy::kNever, kInsecureURLA, kInsecureURLB,
+       nullptr},
+      {network::mojom::ReferrerPolicy::kOrigin, kInsecureURLA, kInsecureURLB,
        kInsecureOriginA},
-      {kReferrerPolicySameOrigin, kInsecureURLA, kInsecureURLB, nullptr},
-      {kReferrerPolicyStrictOrigin, kInsecureURLA, kInsecureURLB,
-       kInsecureOriginA},
-      {kReferrerPolicyStrictOriginWhenCrossOrigin, kInsecureURLA, kInsecureURLB,
-       kInsecureOriginA},
+      {network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin, kInsecureURLA,
+       kInsecureURLB, kInsecureOriginA},
+      {network::mojom::ReferrerPolicy::kSameOrigin, kInsecureURLA,
+       kInsecureURLB, nullptr},
+      {network::mojom::ReferrerPolicy::kStrictOrigin, kInsecureURLA,
+       kInsecureURLB, kInsecureOriginA},
+      {network::mojom::ReferrerPolicy::
+           kNoReferrerWhenDowngradeOriginWhenCrossOrigin,
+       kInsecureURLA, kInsecureURLB, kInsecureOriginA},
 
       // HTTPS -> HTTPS: Same Origin
-      {kReferrerPolicyAlways, kSecureURLA, kSecureURLA, kSecureURLA},
-      {kReferrerPolicyDefault, kSecureURLA, kSecureURLA, kSecureURLA},
-      {kReferrerPolicyNoReferrerWhenDowngrade, kSecureURLA, kSecureURLA,
+      {network::mojom::ReferrerPolicy::kAlways, kSecureURLA, kSecureURLA,
        kSecureURLA},
-      {kReferrerPolicyNever, kSecureURLA, kSecureURLA, nullptr},
-      {kReferrerPolicyOrigin, kSecureURLA, kSecureURLA, kSecureOriginA},
-      {kReferrerPolicyOriginWhenCrossOrigin, kSecureURLA, kSecureURLA,
+      {network::mojom::ReferrerPolicy::kDefault, kSecureURLA, kSecureURLA,
        kSecureURLA},
-      {kReferrerPolicySameOrigin, kSecureURLA, kSecureURLA, kSecureURLA},
-      {kReferrerPolicyStrictOrigin, kSecureURLA, kSecureURLA, kSecureOriginA},
-      {kReferrerPolicyStrictOriginWhenCrossOrigin, kSecureURLA, kSecureURLA,
+      {network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade, kSecureURLA,
+       kSecureURLA, kSecureURLA},
+      {network::mojom::ReferrerPolicy::kNever, kSecureURLA, kSecureURLA,
+       nullptr},
+      {network::mojom::ReferrerPolicy::kOrigin, kSecureURLA, kSecureURLA,
+       kSecureOriginA},
+      {network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin, kSecureURLA,
+       kSecureURLA, kSecureURLA},
+      {network::mojom::ReferrerPolicy::kSameOrigin, kSecureURLA, kSecureURLA,
        kSecureURLA},
+      {network::mojom::ReferrerPolicy::kStrictOrigin, kSecureURLA, kSecureURLA,
+       kSecureOriginA},
+      {network::mojom::ReferrerPolicy::
+           kNoReferrerWhenDowngradeOriginWhenCrossOrigin,
+       kSecureURLA, kSecureURLA, kSecureURLA},
 
       // HTTPS -> HTTPS: Cross Origin
-      {kReferrerPolicyAlways, kSecureURLA, kSecureURLB, kSecureURLA},
-      {kReferrerPolicyDefault, kSecureURLA, kSecureURLB, kSecureURLA},
-      {kReferrerPolicyNoReferrerWhenDowngrade, kSecureURLA, kSecureURLB,
+      {network::mojom::ReferrerPolicy::kAlways, kSecureURLA, kSecureURLB,
        kSecureURLA},
-      {kReferrerPolicyNever, kSecureURLA, kSecureURLB, nullptr},
-      {kReferrerPolicyOrigin, kSecureURLA, kSecureURLB, kSecureOriginA},
-      {kReferrerPolicyOriginWhenCrossOrigin, kSecureURLA, kSecureURLB,
+      {network::mojom::ReferrerPolicy::kDefault, kSecureURLA, kSecureURLB,
+       kSecureURLA},
+      {network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade, kSecureURLA,
+       kSecureURLB, kSecureURLA},
+      {network::mojom::ReferrerPolicy::kNever, kSecureURLA, kSecureURLB,
+       nullptr},
+      {network::mojom::ReferrerPolicy::kOrigin, kSecureURLA, kSecureURLB,
        kSecureOriginA},
-      {kReferrerPolicySameOrigin, kSecureURLA, kSecureURLB, nullptr},
-      {kReferrerPolicyStrictOrigin, kSecureURLA, kSecureURLB, kSecureOriginA},
-      {kReferrerPolicyStrictOriginWhenCrossOrigin, kSecureURLA, kSecureURLB,
+      {network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin, kSecureURLA,
+       kSecureURLB, kSecureOriginA},
+      {network::mojom::ReferrerPolicy::kSameOrigin, kSecureURLA, kSecureURLB,
+       nullptr},
+      {network::mojom::ReferrerPolicy::kStrictOrigin, kSecureURLA, kSecureURLB,
        kSecureOriginA},
+      {network::mojom::ReferrerPolicy::
+           kNoReferrerWhenDowngradeOriginWhenCrossOrigin,
+       kSecureURLA, kSecureURLB, kSecureOriginA},
 
       // HTTP -> HTTPS
-      {kReferrerPolicyAlways, kInsecureURLA, kSecureURLB, kInsecureURLA},
-      {kReferrerPolicyDefault, kInsecureURLA, kSecureURLB, kInsecureURLA},
-      {kReferrerPolicyNoReferrerWhenDowngrade, kInsecureURLA, kSecureURLB,
+      {network::mojom::ReferrerPolicy::kAlways, kInsecureURLA, kSecureURLB,
        kInsecureURLA},
-      {kReferrerPolicyNever, kInsecureURLA, kSecureURLB, nullptr},
-      {kReferrerPolicyOrigin, kInsecureURLA, kSecureURLB, kInsecureOriginA},
-      {kReferrerPolicyOriginWhenCrossOrigin, kInsecureURLA, kSecureURLB,
+      {network::mojom::ReferrerPolicy::kDefault, kInsecureURLA, kSecureURLB,
+       kInsecureURLA},
+      {network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade, kInsecureURLA,
+       kSecureURLB, kInsecureURLA},
+      {network::mojom::ReferrerPolicy::kNever, kInsecureURLA, kSecureURLB,
+       nullptr},
+      {network::mojom::ReferrerPolicy::kOrigin, kInsecureURLA, kSecureURLB,
        kInsecureOriginA},
-      {kReferrerPolicySameOrigin, kInsecureURLA, kSecureURLB, nullptr},
-      {kReferrerPolicyStrictOrigin, kInsecureURLA, kSecureURLB,
-       kInsecureOriginA},
-      {kReferrerPolicyStrictOriginWhenCrossOrigin, kInsecureURLA, kSecureURLB,
-       kInsecureOriginA},
+      {network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin, kInsecureURLA,
+       kSecureURLB, kInsecureOriginA},
+      {network::mojom::ReferrerPolicy::kSameOrigin, kInsecureURLA, kSecureURLB,
+       nullptr},
+      {network::mojom::ReferrerPolicy::kStrictOrigin, kInsecureURLA,
+       kSecureURLB, kInsecureOriginA},
+      {network::mojom::ReferrerPolicy::
+           kNoReferrerWhenDowngradeOriginWhenCrossOrigin,
+       kInsecureURLA, kSecureURLB, kInsecureOriginA},
 
       // HTTPS -> HTTP
-      {kReferrerPolicyAlways, kSecureURLA, kInsecureURLB, kSecureURLA},
-      {kReferrerPolicyDefault, kSecureURLA, kInsecureURLB, nullptr},
-      {kReferrerPolicyNoReferrerWhenDowngrade, kSecureURLA, kInsecureURLB,
+      {network::mojom::ReferrerPolicy::kAlways, kSecureURLA, kInsecureURLB,
+       kSecureURLA},
+      {network::mojom::ReferrerPolicy::kDefault, kSecureURLA, kInsecureURLB,
        nullptr},
-      {kReferrerPolicyNever, kSecureURLA, kInsecureURLB, nullptr},
-      {kReferrerPolicyOrigin, kSecureURLA, kInsecureURLB, kSecureOriginA},
-      {kReferrerPolicyOriginWhenCrossOrigin, kSecureURLA, kSecureURLB,
+      {network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade, kSecureURLA,
+       kInsecureURLB, nullptr},
+      {network::mojom::ReferrerPolicy::kNever, kSecureURLA, kInsecureURLB,
+       nullptr},
+      {network::mojom::ReferrerPolicy::kOrigin, kSecureURLA, kInsecureURLB,
        kSecureOriginA},
-      {kReferrerPolicySameOrigin, kSecureURLA, kInsecureURLB, nullptr},
-      {kReferrerPolicyStrictOrigin, kSecureURLA, kInsecureURLB, nullptr},
-      {kReferrerPolicyStrictOriginWhenCrossOrigin, kSecureURLA, kInsecureURLB,
+      {network::mojom::ReferrerPolicy::kOriginWhenCrossOrigin, kSecureURLA,
+       kSecureURLB, kSecureOriginA},
+      {network::mojom::ReferrerPolicy::kSameOrigin, kSecureURLA, kInsecureURLB,
        nullptr},
+      {network::mojom::ReferrerPolicy::kStrictOrigin, kSecureURLA,
+       kInsecureURLB, nullptr},
+      {network::mojom::ReferrerPolicy::
+           kNoReferrerWhenDowngradeOriginWhenCrossOrigin,
+       kSecureURLA, kInsecureURLB, nullptr},
 
       // blob and filesystem URL handling
-      {kReferrerPolicyAlways, kInsecureURLA, kBlobURL, nullptr},
-      {kReferrerPolicyAlways, kBlobURL, kInsecureURLA, nullptr},
-      {kReferrerPolicyAlways, kInsecureURLA, kFilesystemURL, nullptr},
-      {kReferrerPolicyAlways, kFilesystemURL, kInsecureURLA, nullptr},
+      {network::mojom::ReferrerPolicy::kAlways, kInsecureURLA, kBlobURL,
+       nullptr},
+      {network::mojom::ReferrerPolicy::kAlways, kBlobURL, kInsecureURLA,
+       nullptr},
+      {network::mojom::ReferrerPolicy::kAlways, kInsecureURLA, kFilesystemURL,
+       nullptr},
+      {network::mojom::ReferrerPolicy::kAlways, kFilesystemURL, kInsecureURLA,
+       nullptr},
   };
 
   for (TestCase test : inputs) {
@@ -203,8 +249,8 @@
           << "' should have been empty: was '" << result.referrer.Utf8().data()
           << "'.";
     }
-    EXPECT_EQ(test.policy == kReferrerPolicyDefault
-                  ? kReferrerPolicyNoReferrerWhenDowngrade
+    EXPECT_EQ(test.policy == network::mojom::ReferrerPolicy::kDefault
+                  ? network::mojom::ReferrerPolicy::kNoReferrerWhenDowngrade
                   : test.policy,
               result.referrer_policy);
   }
@@ -215,28 +261,29 @@
     const char* header;
     bool is_valid;
     ReferrerPolicyLegacyKeywordsSupport keywords;
-    ReferrerPolicy expected_policy;
+    network::mojom::ReferrerPolicy expected_policy;
   };
 
   TestCase inputs[] = {
       {"origin", true, kDoNotSupportReferrerPolicyLegacyKeywords,
-       kReferrerPolicyOrigin},
+       network::mojom::ReferrerPolicy::kOrigin},
       {"none", true, kSupportReferrerPolicyLegacyKeywords,
-       kReferrerPolicyNever},
+       network::mojom::ReferrerPolicy::kNever},
       {"none", false, kDoNotSupportReferrerPolicyLegacyKeywords,
-       kReferrerPolicyDefault},
+       network::mojom::ReferrerPolicy::kDefault},
       {"foo", false, kDoNotSupportReferrerPolicyLegacyKeywords,
-       kReferrerPolicyDefault},
+       network::mojom::ReferrerPolicy::kDefault},
       {"origin, foo", true, kDoNotSupportReferrerPolicyLegacyKeywords,
-       kReferrerPolicyOrigin},
+       network::mojom::ReferrerPolicy::kOrigin},
       {"origin, foo-bar", true, kDoNotSupportReferrerPolicyLegacyKeywords,
-       kReferrerPolicyOrigin},
+       network::mojom::ReferrerPolicy::kOrigin},
       {"origin, foo bar", false, kDoNotSupportReferrerPolicyLegacyKeywords,
-       kReferrerPolicyDefault},
+       network::mojom::ReferrerPolicy::kDefault},
   };
 
   for (TestCase test : inputs) {
-    ReferrerPolicy actual_policy = kReferrerPolicyDefault;
+    network::mojom::ReferrerPolicy actual_policy =
+        network::mojom::ReferrerPolicy::kDefault;
     EXPECT_EQ(test.is_valid, SecurityPolicy::ReferrerPolicyFromHeaderValue(
                                  test.header, test.keywords, &actual_policy));
     if (test.is_valid)
diff --git a/third_party/blink/renderer/platform/wtf/text/atomic_string_table.cc b/third_party/blink/renderer/platform/wtf/text/atomic_string_table.cc
index bcaa1c68..2d9af4b 100644
--- a/third_party/blink/renderer/platform/wtf/text/atomic_string_table.cc
+++ b/third_party/blink/renderer/platform/wtf/text/atomic_string_table.cc
@@ -88,12 +88,12 @@
     if (buffer.utf16_length != buffer.length) {
       if (string->Is8Bit()) {
         const LChar* characters8 = string->Characters8();
-        return Unicode::EqualLatin1WithUTF8(
+        return unicode::EqualLatin1WithUTF8(
             characters8, characters8 + string->length(), buffer.characters,
             buffer.characters + buffer.length);
       }
       const UChar* characters16 = string->Characters16();
-      return Unicode::EqualUTF16WithUTF8(
+      return unicode::EqualUTF16WithUTF8(
           characters16, characters16 + string->length(), buffer.characters,
           buffer.characters + buffer.length);
     }
@@ -133,9 +133,9 @@
       new_string = StringImpl::CreateUninitialized(buffer.utf16_length, target);
 
       const char* source = buffer.characters;
-      if (Unicode::ConvertUTF8ToUTF16(&source, source + buffer.length, &target,
+      if (unicode::ConvertUTF8ToUTF16(&source, source + buffer.length, &target,
                                       target + buffer.utf16_length,
-                                      &is_all_ascii) != Unicode::kConversionOK)
+                                      &is_all_ascii) != unicode::kConversionOK)
         NOTREACHED();
     } else {
       new_string = StringImpl::Create(buffer.characters, buffer.length);
@@ -210,7 +210,7 @@
     const char* characters_end) {
   HashAndUTF8Characters buffer;
   buffer.characters = characters_start;
-  buffer.hash = Unicode::CalculateStringHashAndLengthFromUTF8MaskingTop8Bits(
+  buffer.hash = unicode::CalculateStringHashAndLengthFromUTF8MaskingTop8Bits(
       characters_start, characters_end, buffer.length, buffer.utf16_length);
 
   if (!buffer.hash)
diff --git a/third_party/blink/renderer/platform/wtf/text/character_names.h b/third_party/blink/renderer/platform/wtf/text/character_names.h
index 93fab69..2668291 100644
--- a/third_party/blink/renderer/platform/wtf/text/character_names.h
+++ b/third_party/blink/renderer/platform/wtf/text/character_names.h
@@ -29,7 +29,7 @@
 #include "third_party/blink/renderer/platform/wtf/text/unicode.h"
 
 namespace WTF {
-namespace Unicode {
+namespace unicode {
 
 // Names here are taken from the Unicode standard.
 
@@ -138,101 +138,101 @@
 const UChar kZeroWidthNoBreakSpaceCharacter = 0xFEFF;
 const UChar32 kMaxCodepoint = 0x10ffff;
 
-}  // namespace Unicode
+}  // namespace unicode
 }  // namespace WTF
 
-using WTF::Unicode::kAegeanWordSeparatorLineCharacter;
-using WTF::Unicode::kAegeanWordSeparatorDotCharacter;
-using WTF::Unicode::kActivateArabicFormShapingCharacter;
-using WTF::Unicode::kActivateSymmetricSwappingCharacter;
-using WTF::Unicode::kArabicLetterMarkCharacter;
-using WTF::Unicode::kBlackCircleCharacter;
-using WTF::Unicode::kBlackSquareCharacter;
-using WTF::Unicode::kBlackUpPointingTriangleCharacter;
-using WTF::Unicode::kBulletCharacter;
-using WTF::Unicode::kBullseyeCharacter;
-using WTF::Unicode::kCancelTag;
-using WTF::Unicode::kCarriageReturnCharacter;
-using WTF::Unicode::kCombiningEnclosingKeycapCharacter;
-using WTF::Unicode::kCombiningEnclosingCircleBackslashCharacter;
-using WTF::Unicode::kEthiopicPrefaceColonCharacter;
-using WTF::Unicode::kEthiopicWordspaceCharacter;
-using WTF::Unicode::kEyeCharacter;
-using WTF::Unicode::kFamilyCharacter;
-using WTF::Unicode::kFemaleSignCharacter;
-using WTF::Unicode::kFirstStrongIsolateCharacter;
-using WTF::Unicode::kFisheyeCharacter;
-using WTF::Unicode::kFormFeedCharacter;
-using WTF::Unicode::kFullstopCharacter;
-using WTF::Unicode::kHebrewPunctuationGereshCharacter;
-using WTF::Unicode::kHebrewPunctuationGershayimCharacter;
-using WTF::Unicode::kHiraganaLetterSmallACharacter;
-using WTF::Unicode::kHorizontalEllipsisCharacter;
-using WTF::Unicode::kHyphenCharacter;
-using WTF::Unicode::kHyphenMinusCharacter;
-using WTF::Unicode::kIdeographicCommaCharacter;
-using WTF::Unicode::kIdeographicFullStopCharacter;
+using WTF::unicode::kActivateArabicFormShapingCharacter;
+using WTF::unicode::kActivateSymmetricSwappingCharacter;
+using WTF::unicode::kAegeanWordSeparatorDotCharacter;
+using WTF::unicode::kAegeanWordSeparatorLineCharacter;
+using WTF::unicode::kArabicLetterMarkCharacter;
+using WTF::unicode::kBlackCircleCharacter;
+using WTF::unicode::kBlackSquareCharacter;
+using WTF::unicode::kBlackUpPointingTriangleCharacter;
+using WTF::unicode::kBulletCharacter;
+using WTF::unicode::kBullseyeCharacter;
+using WTF::unicode::kCancelTag;
+using WTF::unicode::kCarriageReturnCharacter;
+using WTF::unicode::kCombiningEnclosingCircleBackslashCharacter;
+using WTF::unicode::kCombiningEnclosingKeycapCharacter;
+using WTF::unicode::kEthiopicPrefaceColonCharacter;
+using WTF::unicode::kEthiopicWordspaceCharacter;
+using WTF::unicode::kEyeCharacter;
+using WTF::unicode::kFamilyCharacter;
+using WTF::unicode::kFemaleSignCharacter;
+using WTF::unicode::kFirstStrongIsolateCharacter;
+using WTF::unicode::kFisheyeCharacter;
+using WTF::unicode::kFormFeedCharacter;
+using WTF::unicode::kFullstopCharacter;
+using WTF::unicode::kHebrewPunctuationGereshCharacter;
+using WTF::unicode::kHebrewPunctuationGershayimCharacter;
+using WTF::unicode::kHiraganaLetterSmallACharacter;
+using WTF::unicode::kHorizontalEllipsisCharacter;
+using WTF::unicode::kHyphenCharacter;
+using WTF::unicode::kHyphenMinusCharacter;
+using WTF::unicode::kIdeographicCommaCharacter;
+using WTF::unicode::kIdeographicFullStopCharacter;
 #if defined(USING_SYSTEM_ICU)
-using WTF::Unicode::ideographicSpaceCharacter;
+using WTF::unicode::ideographicSpaceCharacter;
 #endif
-using WTF::Unicode::kInhibitArabicFormShapingCharacter;
-using WTF::Unicode::kInhibitSymmetricSwappingCharacter;
-using WTF::Unicode::kLatinCapitalLetterIWithDotAbove;
-using WTF::Unicode::kLatinSmallLetterDotlessI;
-using WTF::Unicode::kLeftDoubleQuotationMarkCharacter;
-using WTF::Unicode::kLeftSingleQuotationMarkCharacter;
-using WTF::Unicode::kLeftSpeechBubbleCharacter;
-using WTF::Unicode::kLeftToRightEmbedCharacter;
-using WTF::Unicode::kLeftToRightIsolateCharacter;
-using WTF::Unicode::kLeftToRightMarkCharacter;
-using WTF::Unicode::kLeftToRightOverrideCharacter;
-using WTF::Unicode::kLineSeparator;
-using WTF::Unicode::kLowLineCharacter;
-using WTF::Unicode::kMaleSignCharacter;
-using WTF::Unicode::kMinusSignCharacter;
-using WTF::Unicode::kNewlineCharacter;
-using WTF::Unicode::kNationalDigitShapesCharacter;
-using WTF::Unicode::kNominalDigitShapesCharacter;
-using WTF::Unicode::kNoBreakSpaceCharacter;
-using WTF::Unicode::kObjectReplacementCharacter;
-using WTF::Unicode::kParagraphSeparator;
-using WTF::Unicode::kPopDirectionalFormattingCharacter;
-using WTF::Unicode::kPopDirectionalIsolateCharacter;
-using WTF::Unicode::kRainbowCharacter;
-using WTF::Unicode::kReplacementCharacter;
-using WTF::Unicode::kReverseSolidusCharacter;
-using WTF::Unicode::kRightDoubleQuotationMarkCharacter;
-using WTF::Unicode::kRightSingleQuotationMarkCharacter;
-using WTF::Unicode::kRightToLeftEmbedCharacter;
-using WTF::Unicode::kRightToLeftIsolateCharacter;
-using WTF::Unicode::kRightToLeftMarkCharacter;
-using WTF::Unicode::kRightToLeftOverrideCharacter;
-using WTF::Unicode::kSesameDotCharacter;
-using WTF::Unicode::kSmallLetterSharpSCharacter;
-using WTF::Unicode::kSoftHyphenCharacter;
-using WTF::Unicode::kSolidusCharacter;
-using WTF::Unicode::kSpaceCharacter;
-using WTF::Unicode::kStaffOfAesculapiusCharacter;
-using WTF::Unicode::kTabulationCharacter;
-using WTF::Unicode::kTagDigitZero;
-using WTF::Unicode::kTagDigitNine;
-using WTF::Unicode::kTagLatinSmallLetterA;
-using WTF::Unicode::kTagLatinSmallLetterZ;
-using WTF::Unicode::kTibetanMarkIntersyllabicTshegCharacter;
-using WTF::Unicode::kTibetanMarkDelimiterTshegBstarCharacter;
-using WTF::Unicode::kUgariticWordDividerCharacter;
-using WTF::Unicode::kVariationSelector15Character;
-using WTF::Unicode::kVariationSelector16Character;
-using WTF::Unicode::kWavingWhiteFlagCharacter;
-using WTF::Unicode::kWhiteBulletCharacter;
-using WTF::Unicode::kWhiteCircleCharacter;
-using WTF::Unicode::kWhiteSesameDotCharacter;
-using WTF::Unicode::kWhiteUpPointingTriangleCharacter;
-using WTF::Unicode::kYenSignCharacter;
-using WTF::Unicode::kZeroWidthJoinerCharacter;
-using WTF::Unicode::kZeroWidthNonJoinerCharacter;
-using WTF::Unicode::kZeroWidthSpaceCharacter;
-using WTF::Unicode::kZeroWidthNoBreakSpaceCharacter;
-using WTF::Unicode::kMaxCodepoint;
+using WTF::unicode::kInhibitArabicFormShapingCharacter;
+using WTF::unicode::kInhibitSymmetricSwappingCharacter;
+using WTF::unicode::kLatinCapitalLetterIWithDotAbove;
+using WTF::unicode::kLatinSmallLetterDotlessI;
+using WTF::unicode::kLeftDoubleQuotationMarkCharacter;
+using WTF::unicode::kLeftSingleQuotationMarkCharacter;
+using WTF::unicode::kLeftSpeechBubbleCharacter;
+using WTF::unicode::kLeftToRightEmbedCharacter;
+using WTF::unicode::kLeftToRightIsolateCharacter;
+using WTF::unicode::kLeftToRightMarkCharacter;
+using WTF::unicode::kLeftToRightOverrideCharacter;
+using WTF::unicode::kLineSeparator;
+using WTF::unicode::kLowLineCharacter;
+using WTF::unicode::kMaleSignCharacter;
+using WTF::unicode::kMaxCodepoint;
+using WTF::unicode::kMinusSignCharacter;
+using WTF::unicode::kNationalDigitShapesCharacter;
+using WTF::unicode::kNewlineCharacter;
+using WTF::unicode::kNoBreakSpaceCharacter;
+using WTF::unicode::kNominalDigitShapesCharacter;
+using WTF::unicode::kObjectReplacementCharacter;
+using WTF::unicode::kParagraphSeparator;
+using WTF::unicode::kPopDirectionalFormattingCharacter;
+using WTF::unicode::kPopDirectionalIsolateCharacter;
+using WTF::unicode::kRainbowCharacter;
+using WTF::unicode::kReplacementCharacter;
+using WTF::unicode::kReverseSolidusCharacter;
+using WTF::unicode::kRightDoubleQuotationMarkCharacter;
+using WTF::unicode::kRightSingleQuotationMarkCharacter;
+using WTF::unicode::kRightToLeftEmbedCharacter;
+using WTF::unicode::kRightToLeftIsolateCharacter;
+using WTF::unicode::kRightToLeftMarkCharacter;
+using WTF::unicode::kRightToLeftOverrideCharacter;
+using WTF::unicode::kSesameDotCharacter;
+using WTF::unicode::kSmallLetterSharpSCharacter;
+using WTF::unicode::kSoftHyphenCharacter;
+using WTF::unicode::kSolidusCharacter;
+using WTF::unicode::kSpaceCharacter;
+using WTF::unicode::kStaffOfAesculapiusCharacter;
+using WTF::unicode::kTabulationCharacter;
+using WTF::unicode::kTagDigitNine;
+using WTF::unicode::kTagDigitZero;
+using WTF::unicode::kTagLatinSmallLetterA;
+using WTF::unicode::kTagLatinSmallLetterZ;
+using WTF::unicode::kTibetanMarkDelimiterTshegBstarCharacter;
+using WTF::unicode::kTibetanMarkIntersyllabicTshegCharacter;
+using WTF::unicode::kUgariticWordDividerCharacter;
+using WTF::unicode::kVariationSelector15Character;
+using WTF::unicode::kVariationSelector16Character;
+using WTF::unicode::kWavingWhiteFlagCharacter;
+using WTF::unicode::kWhiteBulletCharacter;
+using WTF::unicode::kWhiteCircleCharacter;
+using WTF::unicode::kWhiteSesameDotCharacter;
+using WTF::unicode::kWhiteUpPointingTriangleCharacter;
+using WTF::unicode::kYenSignCharacter;
+using WTF::unicode::kZeroWidthJoinerCharacter;
+using WTF::unicode::kZeroWidthNoBreakSpaceCharacter;
+using WTF::unicode::kZeroWidthNonJoinerCharacter;
+using WTF::unicode::kZeroWidthSpaceCharacter;
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_TEXT_CHARACTER_NAMES_H_
diff --git a/third_party/blink/renderer/platform/wtf/text/string_hash.h b/third_party/blink/renderer/platform/wtf/text/string_hash.h
index 615a3c99..987d0c9 100644
--- a/third_party/blink/renderer/platform/wtf/text/string_hash.h
+++ b/third_party/blink/renderer/platform/wtf/text/string_hash.h
@@ -138,11 +138,11 @@
   static inline UChar FoldCase(T ch) {
     if (std::is_same<T, LChar>::value)
       return StringImpl::kLatin1CaseFoldTable[ch];
-    // It's possible for WTF::Unicode::foldCase() to return a 32-bit value
+    // It's possible for WTF::unicode::foldCase() to return a 32-bit value
     // that's not representable as a UChar.  However, since this is rare and
     // deterministic, and the result of this is merely used for hashing, go
     // ahead and clamp the value.
-    return static_cast<UChar>(WTF::Unicode::FoldCase(ch));
+    return static_cast<UChar>(WTF::unicode::FoldCase(ch));
   }
 };
 
diff --git a/third_party/blink/renderer/platform/wtf/text/string_impl.cc b/third_party/blink/renderer/platform/wtf/text/string_impl.cc
index a7d3938..b72f6c5f 100644
--- a/third_party/blink/renderer/platform/wtf/text/string_impl.cc
+++ b/third_party/blink/renderer/platform/wtf/text/string_impl.cc
@@ -418,7 +418,7 @@
 
     for (wtf_size_t i = first_index_to_be_lowered; i < length_; ++i) {
       LChar ch = Characters8()[i];
-      data8[i] = UNLIKELY(ch & ~0x7F) ? static_cast<LChar>(Unicode::ToLower(ch))
+      data8[i] = UNLIKELY(ch & ~0x7F) ? static_cast<LChar>(unicode::ToLower(ch))
                                       : ToASCIILower(ch);
     }
 
@@ -458,12 +458,12 @@
 
   bool error;
   int32_t real_length =
-      Unicode::ToLower(data16, length, Characters16(), length_, &error);
+      unicode::ToLower(data16, length, Characters16(), length_, &error);
   if (!error && real_length == length)
     return new_impl;
 
   new_impl = CreateUninitialized(real_length, data16);
-  Unicode::ToLower(data16, real_length, Characters16(), length_, &error);
+  unicode::ToLower(data16, real_length, Characters16(), length_, &error);
   if (error)
     return this;
   return new_impl;
@@ -503,7 +503,7 @@
       LChar c = Characters8()[i];
       if (UNLIKELY(c == kSmallLetterSharpSCharacter))
         ++number_sharp_s_characters;
-      UChar upper = static_cast<UChar>(Unicode::ToUpper(c));
+      UChar upper = static_cast<UChar>(unicode::ToUpper(c));
       if (UNLIKELY(upper > 0xff)) {
         // Since this upper-cased character does not fit in an 8-bit string, we
         // need to take the 16-bit path.
@@ -527,7 +527,7 @@
         *dest++ = 'S';
         *dest++ = 'S';
       } else {
-        *dest++ = static_cast<LChar>(Unicode::ToUpper(c));
+        *dest++ = static_cast<LChar>(unicode::ToUpper(c));
       }
     }
 
@@ -554,11 +554,11 @@
   // Do a slower implementation for cases that include non-ASCII characters.
   bool error;
   int32_t real_length =
-      Unicode::ToUpper(data16, length, source16, length_, &error);
+      unicode::ToUpper(data16, length, source16, length_, &error);
   if (!error && real_length == length)
     return new_impl;
   new_impl = CreateUninitialized(real_length, data16);
-  Unicode::ToUpper(data16, real_length, source16, length_, &error);
+  unicode::ToUpper(data16, real_length, source16, length_, &error);
   if (error)
     return this;
   return new_impl;
@@ -720,7 +720,7 @@
     // Do a slower implementation for cases that include non-ASCII Latin-1
     // characters.
     for (int32_t i = 0; i < length; ++i)
-      data[i] = static_cast<LChar>(Unicode::ToLower(Characters8()[i]));
+      data[i] = static_cast<LChar>(unicode::ToLower(Characters8()[i]));
 
     return new_impl;
   }
@@ -740,11 +740,11 @@
   // Do a slower implementation for cases that include non-ASCII characters.
   bool error;
   int32_t real_length =
-      Unicode::FoldCase(data, length, Characters16(), length_, &error);
+      unicode::FoldCase(data, length, Characters16(), length_, &error);
   if (!error && real_length == length)
     return new_impl;
   new_impl = CreateUninitialized(real_length, data);
-  Unicode::FoldCase(data, real_length, Characters16(), length_, &error);
+  unicode::FoldCase(data, real_length, Characters16(), length_, &error);
   if (error)
     return this;
   return new_impl;
@@ -1048,14 +1048,14 @@
   DCHECK_GE(length, 0u);
   if (a == b)
     return true;
-  return !Unicode::Umemcasecmp(a, b, length);
+  return !unicode::Umemcasecmp(a, b, length);
 }
 
 bool DeprecatedEqualIgnoringCase(const UChar* a,
                                  const LChar* b,
                                  wtf_size_t length) {
   while (length--) {
-    if (Unicode::FoldCase(*a++) != StringImpl::kLatin1CaseFoldTable[*b++])
+    if (unicode::FoldCase(*a++) != StringImpl::kLatin1CaseFoldTable[*b++])
       return false;
   }
   return true;
@@ -2000,7 +2000,7 @@
     }
   }
 
-  return Unicode::ToUpper(c);
+  return unicode::ToUpper(c);
 }
 
 }  // namespace WTF
diff --git a/third_party/blink/renderer/platform/wtf/text/string_impl.h b/third_party/blink/renderer/platform/wtf/text/string_impl.h
index 319c574c..3073b08 100644
--- a/third_party/blink/renderer/platform/wtf/text/string_impl.h
+++ b/third_party/blink/renderer/platform/wtf/text/string_impl.h
@@ -788,7 +788,7 @@
   // This will include newlines, which aren't included in Unicode DirWS.
   return c <= 0x7F
              ? WTF::IsASCIISpace(c)
-             : WTF::Unicode::Direction(c) == WTF::Unicode::kWhiteSpaceNeutral;
+             : WTF::unicode::Direction(c) == WTF::unicode::kWhiteSpaceNeutral;
 }
 
 inline scoped_refptr<StringImpl> StringImpl::IsolatedCopy() const {
diff --git a/third_party/blink/renderer/platform/wtf/text/string_impl_test.cc b/third_party/blink/renderer/platform/wtf/text/string_impl_test.cc
index 6f967bc..b8333d16 100644
--- a/third_party/blink/renderer/platform/wtf/text/string_impl_test.cc
+++ b/third_party/blink/renderer/platform/wtf/text/string_impl_test.cc
@@ -38,7 +38,7 @@
 TEST(StringImplTest, Latin1CaseFoldTable) {
   LChar symbol = 0xff;
   while (symbol--) {
-    EXPECT_EQ(Unicode::FoldCase(symbol),
+    EXPECT_EQ(unicode::FoldCase(symbol),
               StringImpl::kLatin1CaseFoldTable[symbol]);
   }
 }
diff --git a/third_party/blink/renderer/platform/wtf/text/unicode.h b/third_party/blink/renderer/platform/wtf/text/unicode.h
index 9202dc1..f0b5d73 100644
--- a/third_party/blink/renderer/platform/wtf/text/unicode.h
+++ b/third_party/blink/renderer/platform/wtf/text/unicode.h
@@ -32,7 +32,7 @@
 static_assert(sizeof(UChar) == 2, "UChar should be two bytes");
 
 namespace WTF {
-namespace Unicode {
+namespace unicode {
 
 enum CharDirection {
   kLeftToRight = U_LEFT_TO_RIGHT,
@@ -223,7 +223,7 @@
   return u_memcasecmp(a, b, len, U_FOLD_CASE_DEFAULT);
 }
 
-}  // namespace Unicode
+}  // namespace unicode
 }  // namespace WTF
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_TEXT_UNICODE_H_
diff --git a/third_party/blink/renderer/platform/wtf/text/utf8.cc b/third_party/blink/renderer/platform/wtf/text/utf8.cc
index 87943115..570e7748 100644
--- a/third_party/blink/renderer/platform/wtf/text/utf8.cc
+++ b/third_party/blink/renderer/platform/wtf/text/utf8.cc
@@ -31,7 +31,7 @@
 #include "third_party/blink/renderer/platform/wtf/text/character_names.h"
 
 namespace WTF {
-namespace Unicode {
+namespace unicode {
 
 inline int InlineUTF8SequenceLengthNonASCII(char b0) {
   if ((b0 & 0xC0) != 0xC0)
@@ -472,5 +472,5 @@
   return EqualWithUTF8Internal(a, a_end, b, b_end);
 }
 
-}  // namespace Unicode
+}  // namespace unicode
 }  // namespace WTF
diff --git a/third_party/blink/renderer/platform/wtf/text/utf8.h b/third_party/blink/renderer/platform/wtf/text/utf8.h
index 1bbde324..159aefb 100644
--- a/third_party/blink/renderer/platform/wtf/text/utf8.h
+++ b/third_party/blink/renderer/platform/wtf/text/utf8.h
@@ -30,7 +30,7 @@
 #include "third_party/blink/renderer/platform/wtf/wtf_export.h"
 
 namespace WTF {
-namespace Unicode {
+namespace unicode {
 
 typedef enum {
   kConversionOK,     // conversion successful
@@ -87,7 +87,7 @@
                                     const char* b,
                                     const char* b_end);
 
-}  // namespace Unicode
+}  // namespace unicode
 }  // namespace WTF
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_TEXT_UTF8_H_
diff --git a/third_party/blink/renderer/platform/wtf/text/wtf_string.cc b/third_party/blink/renderer/platform/wtf/text/wtf_string.cc
index 652afb2..a243c0a8 100644
--- a/third_party/blink/renderer/platform/wtf/text/wtf_string.cc
+++ b/third_party/blink/renderer/platform/wtf/text/wtf_string.cc
@@ -661,11 +661,11 @@
   if (Is8Bit()) {
     const LChar* characters = this->Characters8();
 
-    Unicode::ConversionResult result =
-        Unicode::ConvertLatin1ToUTF8(&characters, characters + length, &buffer,
+    unicode::ConversionResult result =
+        unicode::ConvertLatin1ToUTF8(&characters, characters + length, &buffer,
                                      buffer + buffer_vector.size());
     // (length * 3) should be sufficient for any conversion
-    DCHECK_NE(result, Unicode::kTargetExhausted);
+    DCHECK_NE(result, unicode::kTargetExhausted);
   } else {
     const UChar* characters = this->Characters16();
 
@@ -674,13 +674,13 @@
       char* buffer_end = buffer + buffer_vector.size();
       while (characters < characters_end) {
         // Use strict conversion to detect unpaired surrogates.
-        Unicode::ConversionResult result = Unicode::ConvertUTF16ToUTF8(
+        unicode::ConversionResult result = unicode::ConvertUTF16ToUTF8(
             &characters, characters_end, &buffer, buffer_end, true);
-        DCHECK_NE(result, Unicode::kTargetExhausted);
+        DCHECK_NE(result, unicode::kTargetExhausted);
         // Conversion fails when there is an unpaired surrogate.  Put
         // replacement character (U+FFFD) instead of the unpaired
         // surrogate.
-        if (result != Unicode::kConversionOK) {
+        if (result != unicode::kConversionOK) {
           DCHECK_LE(0xD800, *characters);
           DCHECK_LE(*characters, 0xDFFF);
           // There should be room left, since one UChar hasn't been
@@ -692,20 +692,20 @@
       }
     } else {
       bool strict = mode == kStrictUTF8Conversion;
-      Unicode::ConversionResult result =
-          Unicode::ConvertUTF16ToUTF8(&characters, characters + length, &buffer,
+      unicode::ConversionResult result =
+          unicode::ConvertUTF16ToUTF8(&characters, characters + length, &buffer,
                                       buffer + buffer_vector.size(), strict);
       // (length * 3) should be sufficient for any conversion
-      DCHECK_NE(result, Unicode::kTargetExhausted);
+      DCHECK_NE(result, unicode::kTargetExhausted);
 
       // Only produced from strict conversion.
-      if (result == Unicode::kSourceIllegal) {
+      if (result == unicode::kSourceIllegal) {
         DCHECK(strict);
         return CString();
       }
 
       // Check for an unconverted high surrogate.
-      if (result == Unicode::kSourceExhausted) {
+      if (result == unicode::kSourceExhausted) {
         if (strict)
           return CString();
         // This should be one unpaired high surrogate. Treat it the same
@@ -767,10 +767,10 @@
 
   UChar* buffer_current = buffer_start;
   const char* string_current = reinterpret_cast<const char*>(string_start);
-  if (Unicode::ConvertUTF8ToUTF16(
+  if (unicode::ConvertUTF8ToUTF16(
           &string_current, reinterpret_cast<const char*>(string_start + length),
           &buffer_current,
-          buffer_current + buffer.size()) != Unicode::kConversionOK)
+          buffer_current + buffer.size()) != unicode::kConversionOK)
     return String();
 
   unsigned utf16_length =
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 68a70e67..3b3544d 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
@@ -253,6 +253,7 @@
             'svg_path_parser::.+',
             'trace_event::.+',
             'touch_action_util::.+',
+            'unicode::.+',
             'vector_math::.+',
             'web_core_test_support::.+',
             'xpath::.+',
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/android.py b/third_party/blink/tools/blinkpy/web_tests/port/android.py
index cb2b390..a89cfb44 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/android.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/android.py
@@ -1046,7 +1046,7 @@
     def _command_from_driver_input(self, driver_input):
         command = super(ChromiumAndroidDriver, self)._command_from_driver_input(driver_input)
         if command.startswith('/'):
-            command = 'http://127.0.0.1:8000' + LAYOUT_TEST_PATH_PREFIX + \
+            command = 'http://127.0.0.1:8000' + WEB_TESTS_PATH_PREFIX + \
                 '/' + self._port.relative_test_filename(command)
         return command
 
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py b/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py
index 88a1fde..945d6577 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py
@@ -280,7 +280,7 @@
         if command.startswith('/'):
             relative_test_filename = \
                 os.path.relpath(command, self._port.layout_tests_dir())
-            command = 'http://127.0.0.1:8000' + LAYOUT_TEST_PATH_PREFIX + \
+            command = 'http://127.0.0.1:8000' + WEB_TESTS_PATH_PREFIX + \
                 '/' + relative_test_filename
         return command
 
diff --git a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG
index 7369983..d72bab7 100644
--- a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG
+++ b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG
@@ -22,11 +22,6 @@
 # Superscript text off by 1px
 crbug.com/636993 external/wpt/css/css-text-decor/text-decoration-color.html [ Failure ]
 
-# text-overflow:ellipsis and paint fragment
-crbug.com/873957 accessibility/ellipsis-text.html [ Failure ]
-crbug.com/873957 fast/css/getComputedStyle/getComputedStyle-text-overflow.html [ Failure ]
-crbug.com/873957 http/tests/devtools/network/network-cookies-pane.js [ Failure ]
-
 # rightsizing-grid.html is truly flaky, show flakiness on reload
 
 # Needs rebaselining.
@@ -313,24 +308,9 @@
 crbug.com/855039 html/details_summary/details-writing-mode-align-left.html [ Failure ]
 crbug.com/855039 html/details_summary/details-writing-mode-align-right.html [ Failure ]
 crbug.com/855039 html/details_summary/details-writing-mode.html [ Failure ]
-crbug.com/591099 http/tests/devtools/console-resource-errors.js [ Failure ]
-crbug.com/591099 http/tests/devtools/console/console-correct-suggestions.js [ Pass ]
 crbug.com/591099 http/tests/devtools/elements/highlight/highlight-node.js [ Failure ]
-crbug.com/591099 http/tests/devtools/elements/shadow/shadow-distribution.js [ Failure ]
-crbug.com/591099 http/tests/devtools/network/network-datareceived.js [ Failure ]
-crbug.com/591099 http/tests/devtools/network/network-datasaver-warning.js [ Failure ]
-crbug.com/591099 http/tests/devtools/service-workers/service-worker-v8-cache.js [ Pass ]
 crbug.com/591099 http/tests/images/image-decode-in-frame.html [ Pass ]
 crbug.com/591099 http/tests/images/restyle-decode-error.html [ Failure ]
-crbug.com/591099 http/tests/intersection-observer/v2/cross-origin-effects.html [ Failure ]
-crbug.com/591099 http/tests/intersection-observer/v2/cross-origin-occlusion.html [ Failure ]
-crbug.com/591099 http/tests/local/fileapi/select-dragged-file-input.html [ Skip ]
-crbug.com/591099 http/tests/misc/object-embedding-svg-delayed-size-negotiation.xhtml [ Pass ]
-crbug.com/591099 http/tests/security/cors-rfc1918/addressspace-document-appcache.https.html [ Crash Failure ]
-crbug.com/591099 http/tests/security/cors-rfc1918/addressspace-document-csp-appcache.https.html [ Crash Failure Pass ]
-crbug.com/591099 http/tests/security/setDomainRelaxationForbiddenForURLScheme.html [ Pass ]
-crbug.com/591099 http/tests/security/upgrade-insecure-requests/iframe-upgrade.https.html [ Crash ]
-crbug.com/591099 http/tests/webaudio/autoplay-crossorigin.html [ Timeout ]
 crbug.com/591099 idle-callback/test-runner-run-idle-tasks.html [ Crash Pass Timeout ]
 crbug.com/591099 inspector-protocol/dom-snapshot/dom-snapshot-getSnapshot-pseudo-element.js [ Failure ]
 crbug.com/714962 inspector-protocol/layout-fonts/languages-emoji-rare-glyphs.js [ Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index b6602b1c..1249f17 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1912,6 +1912,7 @@
 
 crbug.com/520736 [ Win7 ] media/W3C/video/networkState/networkState_during_progress.html [ Failure Pass ]
 crbug.com/520736 [ Linux ] media/W3C/video/networkState/networkState_during_progress.html [ Failure Pass ]
+crbug.com/909095 [ Mac ] media/W3C/video/networkState/networkState_during_progress.html [ Failure Pass ]
 # This is also flaky from findit, see crbug.com/903019:
 crbug.com/520736 virtual/video-surface-layer/media/W3C/video/networkState/networkState_during_progress.html [ Pass Failure Timeout Crash ]
 crbug.com/865839 external/wpt/service-workers/service-worker/update-after-navigation-redirect.https.html [ Timeout ]
@@ -2889,7 +2890,6 @@
 crbug.com/800898 external/wpt/workers/shared-worker-from-blob-url.window.html [ Skip ]
 crbug.com/800898 virtual/omt-worker-fetch/external/wpt/workers/shared-worker-from-blob-url.window.html [ Skip ]
 
-crbug.com/849737 virtual/mojo-blob-urls/external/wpt/FileAPI/url/sandboxed-iframe.html [ Pass Timeout ]
 crbug.com/849737 virtual/mojo-blob-urls/external/wpt/FileAPI/url/url-format.any.html [ Pass Timeout ]
 crbug.com/849737 virtual/mojo-blob-urls/external/wpt/FileAPI/url/url-format.any.worker.html [ Pass Timeout ]
 
@@ -3001,6 +3001,20 @@
 crbug.com/893480 external/wpt/infrastructure/testdriver/actions/multiDevice.html [ Failure Timeout ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/css/css-text/text-transform/text-transform-capitalize-033.html [ Failure ]
+crbug.com/626703 virtual/outofblink-cors/external/wpt/fetch/content-type/response.window.html [ Timeout ]
+crbug.com/626703 virtual/outofblink-cors-ns/external/wpt/fetch/content-type/response.window.html [ Timeout ]
+crbug.com/626703 [ Mac10.10 ] external/wpt/mimesniff/mime-types/parsing.any.worker.html [ Failure Timeout ]
+crbug.com/626703 [ Mac10.11 ] external/wpt/mimesniff/mime-types/parsing.any.worker.html [ Failure Timeout ]
+crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002.html [ Failure ]
+crbug.com/626703 [ Mac10.10 ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ]
+crbug.com/626703 [ Mac10.13 ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ]
+crbug.com/626703 [ Retina ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ]
+crbug.com/626703 [ Win ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ]
+crbug.com/626703 [ Mac10.11 ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ]
+crbug.com/626703 [ Mac10.12 ] external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html [ Failure Timeout ]
+crbug.com/626703 external/wpt/css/css-ui/text-overflow-ruby.html [ Failure ]
+crbug.com/626703 external/wpt/fetch/content-type/response.window.html [ Timeout ]
 crbug.com/626703 virtual/streaming-preload/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/no-active-script-manual-module.html [ Timeout ]
 crbug.com/626703 virtual/streaming-preload/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/no-active-script-manual-classic.html [ Timeout ]
 crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/no-active-script-manual-classic.html [ Timeout ]
@@ -4910,7 +4924,6 @@
 
 # Sheriff failures 2018-01-03
 crbug.com/798680 external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html [ Pass Timeout ]
-crbug.com/804682 [ Mac ] external/wpt/service-workers/service-worker/navigation-preload/resource-timing.https.html [ Pass Failure ]
 
 # Sheriff failures 2018-01-25
 # Flaking on Linux Tests, WebKit Linux Trusty (also ASAN, Leak)
diff --git a/third_party/blink/web_tests/accessibility/adopt-node-causes-crash-expected.txt b/third_party/blink/web_tests/accessibility/adopt-node-causes-crash-expected.txt
index 8cb17d9..5b33fe3d 100644
--- a/third_party/blink/web_tests/accessibility/adopt-node-causes-crash-expected.txt
+++ b/third_party/blink/web_tests/accessibility/adopt-node-causes-crash-expected.txt
@@ -6,4 +6,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/accessibility/aria-labelledby-overrides-label-expected.txt b/third_party/blink/web_tests/accessibility/aria-labelledby-overrides-label-expected.txt
index 57b0073..64d415b 100644
--- a/third_party/blink/web_tests/accessibility/aria-labelledby-overrides-label-expected.txt
+++ b/third_party/blink/web_tests/accessibility/aria-labelledby-overrides-label-expected.txt
@@ -3,7 +3,6 @@
 B
 C
 
-
 This tests that if aria-labelledby is used, then label elements are not used
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/accessibility/canvas-accessibilitynodeobject-expected.txt b/third_party/blink/web_tests/accessibility/canvas-accessibilitynodeobject-expected.txt
index dab2c00e..6e4b3a50 100644
--- a/third_party/blink/web_tests/accessibility/canvas-accessibilitynodeobject-expected.txt
+++ b/third_party/blink/web_tests/accessibility/canvas-accessibilitynodeobject-expected.txt
@@ -1,8 +1,7 @@
-Link Button    
+Link Button     
 1
 2
-ARIA button ARIA link
-
+ ARIA button ARIA link
 
 This test makes sure that AccessibilityNodeObjects are created for elements in a canvas subtree.
 
diff --git a/third_party/blink/web_tests/accessibility/canvas-fallback-content-2-expected.txt b/third_party/blink/web_tests/accessibility/canvas-fallback-content-2-expected.txt
index d5878a9..ca799ec5 100644
--- a/third_party/blink/web_tests/accessibility/canvas-fallback-content-2-expected.txt
+++ b/third_party/blink/web_tests/accessibility/canvas-fallback-content-2-expected.txt
@@ -1,9 +1,10 @@
-Link Button Button Button      
+Link Button Button Button       
 1
 2
+ 
 1
 2
-
+ 
 Focusable
 Heading
 ARIA button
@@ -13,7 +14,6 @@
 ARIA toggle button
 ARIA link
 
-
 This tests a number of different elements in canvas fallback content to make sure their accessible attributes are essentially identical to the corresponding elements outside of canvas fallback content.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/accessibility/canvas-fallback-content-expected.txt b/third_party/blink/web_tests/accessibility/canvas-fallback-content-expected.txt
index 65d261f..09b2238 100644
--- a/third_party/blink/web_tests/accessibility/canvas-fallback-content-expected.txt
+++ b/third_party/blink/web_tests/accessibility/canvas-fallback-content-expected.txt
@@ -1,11 +1,10 @@
-Link Button    
+Link Button     
 1
 2
 Focusable
 ARIA button
 ARIA link
 
-
 This test makes sure that focusable elements in canvas fallback content are accessible.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/accessibility/container-node-delete-causes-crash-expected.txt b/third_party/blink/web_tests/accessibility/container-node-delete-causes-crash-expected.txt
index ac718e92..64c6ac14a 100644
--- a/third_party/blink/web_tests/accessibility/container-node-delete-causes-crash-expected.txt
+++ b/third_party/blink/web_tests/accessibility/container-node-delete-causes-crash-expected.txt
@@ -7,4 +7,3 @@
 TEST COMPLETE
 
 Text
-
diff --git a/third_party/blink/web_tests/accessibility/css-generated-content-expected.txt b/third_party/blink/web_tests/accessibility/css-generated-content-expected.txt
index 13aa988..f691336 100644
--- a/third_party/blink/web_tests/accessibility/css-generated-content-expected.txt
+++ b/third_party/blink/web_tests/accessibility/css-generated-content-expected.txt
@@ -10,4 +10,4 @@
 TEST COMPLETE
 
 
-six seven eight nine ten
+six seven eight nine ten 
diff --git a/third_party/blink/web_tests/accessibility/element-role-mapping-focusable-expected.txt b/third_party/blink/web_tests/accessibility/element-role-mapping-focusable-expected.txt
index 1383452b..ed7d1af 100644
--- a/third_party/blink/web_tests/accessibility/element-role-mapping-focusable-expected.txt
+++ b/third_party/blink/web_tests/accessibility/element-role-mapping-focusable-expected.txt
@@ -2,17 +2,18 @@
 Copyright 2015.
    I have a checkbox  Radio  Button
   I have a menuItem  Menu  ItemRadio
-Birthday:  Birthday(date and time):  Birthday(datetime-local):  Birthday (month and year):  Select a week:  Select a file:  Min-Max:  Color: Select a time:  
+Birthday:  Birthday(date and time):  Birthday(datetime-local):  Birthday (month and year):  Select a week:  Select a file:  Min-Max:  Color: Select a time:   
 Pacific
 Atlantic
 Indian
 Southern
 Arctic
+ 
 Milk
 Soda
 Coffee
 Water
- 
+  
 0 100 + =
 Blue  Red 
 Text Input Controls
diff --git a/third_party/blink/web_tests/accessibility/element-role-mapping-normal-expected.txt b/third_party/blink/web_tests/accessibility/element-role-mapping-normal-expected.txt
index 619a5d9..d1e583b5 100644
--- a/third_party/blink/web_tests/accessibility/element-role-mapping-normal-expected.txt
+++ b/third_party/blink/web_tests/accessibility/element-role-mapping-normal-expected.txt
@@ -39,10 +39,8 @@
 
 Caption
 Cell1	Cell2
-
 Fig1. - Blue Box
 
-
 This is a footer.
 
 End of test
diff --git a/third_party/blink/web_tests/accessibility/image-link-expected.txt b/third_party/blink/web_tests/accessibility/image-link-expected.txt
index ad12b2d2d..e753d61 100644
--- a/third_party/blink/web_tests/accessibility/image-link-expected.txt
+++ b/third_party/blink/web_tests/accessibility/image-link-expected.txt
@@ -2,7 +2,6 @@
 
 This test checks that the right accessibility tree is generated for a link inside an image
 
-
 Delicious cake
 AXRole: AXLink
 
diff --git a/third_party/blink/web_tests/accessibility/image-link-inline-cont-expected.txt b/third_party/blink/web_tests/accessibility/image-link-inline-cont-expected.txt
index 69dfa98..e8618f3 100644
--- a/third_party/blink/web_tests/accessibility/image-link-inline-cont-expected.txt
+++ b/third_party/blink/web_tests/accessibility/image-link-inline-cont-expected.txt
@@ -2,7 +2,6 @@
 
 This test checks that a block inside a link does not unduly disturb the render tree via inline continuations. In particular, it checks that adding <div role=presentation> between a link and its contained image does not alter the accessibility tree at all, other than with respect to size.
 
-
 PASS: accessibility trees were identical other than size.
 
 
diff --git a/third_party/blink/web_tests/accessibility/input-type-text-caret-position-expected.txt b/third_party/blink/web_tests/accessibility/input-type-text-caret-position-expected.txt
index d98cdc8..bc914f2c 100644
--- a/third_party/blink/web_tests/accessibility/input-type-text-caret-position-expected.txt
+++ b/third_party/blink/web_tests/accessibility/input-type-text-caret-position-expected.txt
@@ -20,4 +20,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/accessibility/input-type-text-selection-expected.txt b/third_party/blink/web_tests/accessibility/input-type-text-selection-expected.txt
index 52730b9..eed2b83 100644
--- a/third_party/blink/web_tests/accessibility/input-type-text-selection-expected.txt
+++ b/third_party/blink/web_tests/accessibility/input-type-text-selection-expected.txt
@@ -94,4 +94,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/accessibility/insert-selected-option-into-select-causes-crash-expected.txt b/third_party/blink/web_tests/accessibility/insert-selected-option-into-select-causes-crash-expected.txt
index e78e5cc..634d55d4 100644
--- a/third_party/blink/web_tests/accessibility/insert-selected-option-into-select-causes-crash-expected.txt
+++ b/third_party/blink/web_tests/accessibility/insert-selected-option-into-select-causes-crash-expected.txt
@@ -6,3 +6,4 @@
 
 TEST COMPLETE
 
+ 
diff --git a/third_party/blink/web_tests/accessibility/is-richly-editable-expected.txt b/third_party/blink/web_tests/accessibility/is-richly-editable-expected.txt
index 085d3ef3..2d2790e0 100644
--- a/third_party/blink/web_tests/accessibility/is-richly-editable-expected.txt
+++ b/third_party/blink/web_tests/accessibility/is-richly-editable-expected.txt
@@ -25,7 +25,6 @@
 
 Some text.
 
-
 Some text.
  
 
diff --git a/third_party/blink/web_tests/accessibility/meter-value-expected.txt b/third_party/blink/web_tests/accessibility/meter-value-expected.txt
index bcb13f2a..4c27ace 100644
--- a/third_party/blink/web_tests/accessibility/meter-value-expected.txt
+++ b/third_party/blink/web_tests/accessibility/meter-value-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/accessibility/readonly-expected.txt b/third_party/blink/web_tests/accessibility/readonly-expected.txt
index de48040..ce1920e 100644
--- a/third_party/blink/web_tests/accessibility/readonly-expected.txt
+++ b/third_party/blink/web_tests/accessibility/readonly-expected.txt
@@ -1,10 +1,10 @@
 Link Button A B C D E F G H I
 1
 2
-J
+ J
 1
 2
-K L M
+ K L M
 Focusable
 Heading
 Plain div can't be readonly
diff --git a/third_party/blink/web_tests/accessibility/role-attribute-expected.txt b/third_party/blink/web_tests/accessibility/role-attribute-expected.txt
index cacc310..e8f6a23 100644
--- a/third_party/blink/web_tests/accessibility/role-attribute-expected.txt
+++ b/third_party/blink/web_tests/accessibility/role-attribute-expected.txt
@@ -6,13 +6,16 @@
 Implicit Item 3
 Explicit Option 1
 Explicit Option 2
+ 
 Implicit Option 1
 Implicit Option 2
+ 
 Explicit dropdown 1
 Explicit dropdown 2
+ 
 Implicit dropdown 1
 Implicit dropdown 2
-   
+    
 
 End of test
 
diff --git a/third_party/blink/web_tests/accessibility/svg-bounds-expected.txt b/third_party/blink/web_tests/accessibility/svg-bounds-expected.txt
index 7730a40..9895655 100644
--- a/third_party/blink/web_tests/accessibility/svg-bounds-expected.txt
+++ b/third_party/blink/web_tests/accessibility/svg-bounds-expected.txt
@@ -1,6 +1,5 @@
 Test
 
-
 This test ensures the accessibility bounds of embedded SVG objects are correct.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/accessibility/textarea-line-for-index-expected.txt b/third_party/blink/web_tests/accessibility/textarea-line-for-index-expected.txt
index 973b7d8..a151a7a0 100644
--- a/third_party/blink/web_tests/accessibility/textarea-line-for-index-expected.txt
+++ b/third_party/blink/web_tests/accessibility/textarea-line-for-index-expected.txt
@@ -28,4 +28,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/accessibility/whitespace-in-name-calc-expected.txt b/third_party/blink/web_tests/accessibility/whitespace-in-name-calc-expected.txt
index 3c577470..457504e3 100644
--- a/third_party/blink/web_tests/accessibility/whitespace-in-name-calc-expected.txt
+++ b/third_party/blink/web_tests/accessibility/whitespace-in-name-calc-expected.txt
@@ -7,7 +7,6 @@
 World 
 Hello
 World
-
 Hello
 World
 Hello
diff --git a/third_party/blink/web_tests/compositing/backface-visibility/backface-visibility-image-expected.txt b/third_party/blink/web_tests/compositing/backface-visibility/backface-visibility-image-expected.txt
index 3533253b..f36f6064 100644
--- a/third_party/blink/web_tests/compositing/backface-visibility/backface-visibility-image-expected.txt
+++ b/third_party/blink/web_tests/compositing/backface-visibility/backface-visibility-image-expected.txt
@@ -1,12 +1,7 @@
 	
-
 	
 
 
-
-
 	
-
 	
-
 This test is only useful as a pixel test
diff --git a/third_party/blink/web_tests/compositing/backface-visibility/backface-visibility-webgl-expected.txt b/third_party/blink/web_tests/compositing/backface-visibility/backface-visibility-webgl-expected.txt
index 3533253b..f36f6064 100644
--- a/third_party/blink/web_tests/compositing/backface-visibility/backface-visibility-webgl-expected.txt
+++ b/third_party/blink/web_tests/compositing/backface-visibility/backface-visibility-webgl-expected.txt
@@ -1,12 +1,7 @@
 	
-
 	
 
 
-
-
 	
-
 	
-
 This test is only useful as a pixel test
diff --git a/third_party/blink/web_tests/compositing/geometry/clipped-video-controller-expected.txt b/third_party/blink/web_tests/compositing/geometry/clipped-video-controller-expected.txt
index 94f55c6..43b8f00 100644
--- a/third_party/blink/web_tests/compositing/geometry/clipped-video-controller-expected.txt
+++ b/third_party/blink/web_tests/compositing/geometry/clipped-video-controller-expected.txt
@@ -1,3 +1 @@
 The video controller should not be visible below
-
-
diff --git a/third_party/blink/web_tests/compositing/geometry/empty-embed-rects-expected.txt b/third_party/blink/web_tests/compositing/geometry/empty-embed-rects-expected.txt
index d87ac3e..9f35a26 100644
--- a/third_party/blink/web_tests/compositing/geometry/empty-embed-rects-expected.txt
+++ b/third_party/blink/web_tests/compositing/geometry/empty-embed-rects-expected.txt
@@ -1,4 +1 @@
 This testcase should not fire an assertion related to the clip rects root.
-
-
-
diff --git a/third_party/blink/web_tests/compositing/geometry/foreground-layer-expected.txt b/third_party/blink/web_tests/compositing/geometry/foreground-layer-expected.txt
index 7c7ef798..1617299 100644
--- a/third_party/blink/web_tests/compositing/geometry/foreground-layer-expected.txt
+++ b/third_party/blink/web_tests/compositing/geometry/foreground-layer-expected.txt
@@ -1,5 +1,4 @@
  
-
 {
   "layers": [
     {
diff --git a/third_party/blink/web_tests/compositing/geometry/object-clip-rects-assertion-expected.txt b/third_party/blink/web_tests/compositing/geometry/object-clip-rects-assertion-expected.txt
index 6f4d60c..022131d 100644
--- a/third_party/blink/web_tests/compositing/geometry/object-clip-rects-assertion-expected.txt
+++ b/third_party/blink/web_tests/compositing/geometry/object-clip-rects-assertion-expected.txt
@@ -1,3 +1 @@
 This testcase should not fire an assertion related to clip rects.
-
-
diff --git a/third_party/blink/web_tests/compositing/geometry/repaint-foreground-layer-expected.txt b/third_party/blink/web_tests/compositing/geometry/repaint-foreground-layer-expected.txt
index 8cb7cb9..8d1c8b6 100644
--- a/third_party/blink/web_tests/compositing/geometry/repaint-foreground-layer-expected.txt
+++ b/third_party/blink/web_tests/compositing/geometry/repaint-foreground-layer-expected.txt
@@ -1,2 +1 @@
  
-
diff --git a/third_party/blink/web_tests/compositing/iframes/iframe-composited-scrolling-hide-and-show-expected.txt b/third_party/blink/web_tests/compositing/iframes/iframe-composited-scrolling-hide-and-show-expected.txt
index 6a1577fc..d545c05 100644
--- a/third_party/blink/web_tests/compositing/iframes/iframe-composited-scrolling-hide-and-show-expected.txt
+++ b/third_party/blink/web_tests/compositing/iframes/iframe-composited-scrolling-hide-and-show-expected.txt
@@ -9,4 +9,3 @@
 PASS internals.nonFastScrollableRects(document).length is 1
 PASS internals.nonFastScrollableRects(document).length is 0
 PASS internals.nonFastScrollableRects(document).length is 1
-
diff --git a/third_party/blink/web_tests/compositing/layer-creation/iframe-background-attachment-fixed-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/iframe-background-attachment-fixed-expected.txt
index 9d4082cc..615b4fc0 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/iframe-background-attachment-fixed-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/iframe-background-attachment-fixed-expected.txt
@@ -1,3 +1,2 @@
 Main frame scrolls on impl
 The iFrame scrolls on main thread, reasons: Has background-attachment:fixed
-
diff --git a/third_party/blink/web_tests/compositing/layer-creation/rotate3d-overlap-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/rotate3d-overlap-expected.txt
index 18d762a..281479e 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/rotate3d-overlap-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/rotate3d-overlap-expected.txt
@@ -1,6 +1,5 @@
  
  
-
 {
   "layers": [
     {
diff --git a/third_party/blink/web_tests/compositing/layer-creation/spanOverlapsCanvas-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/spanOverlapsCanvas-expected.txt
index 4096c362..b5d0107 100644
--- a/third_party/blink/web_tests/compositing/layer-creation/spanOverlapsCanvas-expected.txt
+++ b/third_party/blink/web_tests/compositing/layer-creation/spanOverlapsCanvas-expected.txt
@@ -34,4 +34,3 @@
   ]
 }
 
-
diff --git a/third_party/blink/web_tests/compositing/self-painting-layers2-expected.txt b/third_party/blink/web_tests/compositing/self-painting-layers2-expected.txt
index 4ebf1bdb..a80f1306 100644
--- a/third_party/blink/web_tests/compositing/self-painting-layers2-expected.txt
+++ b/third_party/blink/web_tests/compositing/self-painting-layers2-expected.txt
@@ -1,3 +1 @@
 This test should not assert in debug builds.
-
-
diff --git a/third_party/blink/web_tests/compositing/visibility/visibility-image-layers-expected.txt b/third_party/blink/web_tests/compositing/visibility/visibility-image-layers-expected.txt
index 8cb7cb9..8d1c8b6 100644
--- a/third_party/blink/web_tests/compositing/visibility/visibility-image-layers-expected.txt
+++ b/third_party/blink/web_tests/compositing/visibility/visibility-image-layers-expected.txt
@@ -1,2 +1 @@
  
-
diff --git a/third_party/blink/web_tests/css3/filters/effect-reference-reset-style-delete-crash-expected.txt b/third_party/blink/web_tests/css3/filters/effect-reference-reset-style-delete-crash-expected.txt
index 8cd777f..4303226 100644
--- a/third_party/blink/web_tests/css3/filters/effect-reference-reset-style-delete-crash-expected.txt
+++ b/third_party/blink/web_tests/css3/filters/effect-reference-reset-style-delete-crash-expected.txt
@@ -6,4 +6,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/css3/flexbox/crash-removing-out-of-flow-child-expected.txt b/third_party/blink/web_tests/css3/flexbox/crash-removing-out-of-flow-child-expected.txt
index 367da97..7b50d524 100644
--- a/third_party/blink/web_tests/css3/flexbox/crash-removing-out-of-flow-child-expected.txt
+++ b/third_party/blink/web_tests/css3/flexbox/crash-removing-out-of-flow-child-expected.txt
@@ -1,4 +1,3 @@
 This test passes if it doesn't crash.
 
-
 This test passes if it doesn't crash.
diff --git a/third_party/blink/web_tests/css3/flexbox/line-wrapping-expected.txt b/third_party/blink/web_tests/css3/flexbox/line-wrapping-expected.txt
index 8be9d72..a6ba79ec3 100644
--- a/third_party/blink/web_tests/css3/flexbox/line-wrapping-expected.txt
+++ b/third_party/blink/web_tests/css3/flexbox/line-wrapping-expected.txt
@@ -1,43 +1,15 @@
 PASS
-
-
 PASS
-
-
 PASS
-
-
 PASS
-
-
 PASS
-
-
 PASS
-
-
 PASS
-
-
 PASS
-
-
 PASS
-
-
 PASS
-
-
 PASS
-
-
 PASS
-
-
 PASS
-
-
 PASS
-
-
 PASS
diff --git a/third_party/blink/web_tests/css3/flexbox/negative-flex-rounding-assert-expected.txt b/third_party/blink/web_tests/css3/flexbox/negative-flex-rounding-assert-expected.txt
index 21a3df5c..964b7eb0 100644
--- a/third_party/blink/web_tests/css3/flexbox/negative-flex-rounding-assert-expected.txt
+++ b/third_party/blink/web_tests/css3/flexbox/negative-flex-rounding-assert-expected.txt
@@ -5,4 +5,3 @@
 x
 y
 z
-
diff --git a/third_party/blink/web_tests/css3/zoom-coords-expected.txt b/third_party/blink/web_tests/css3/zoom-coords-expected.txt
index 5b4ff3b..8ea8440e 100644
--- a/third_party/blink/web_tests/css3/zoom-coords-expected.txt
+++ b/third_party/blink/web_tests/css3/zoom-coords-expected.txt
@@ -2,7 +2,6 @@
 Test
 Test
 
-
 This test checks getBoundingClientRect() on zoomed HTML and SVG elements
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/cssom/ahem-ex-units-expected.txt b/third_party/blink/web_tests/cssom/ahem-ex-units-expected.txt
index 14fe67a..8707395 100644
--- a/third_party/blink/web_tests/cssom/ahem-ex-units-expected.txt
+++ b/third_party/blink/web_tests/cssom/ahem-ex-units-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/custom-elements/tentative/form-association.html b/third_party/blink/web_tests/custom-elements/tentative/form-association.html
index a57a16d..3e2284d 100644
--- a/third_party/blink/web_tests/custom-elements/tentative/form-association.html
+++ b/third_party/blink/web_tests/custom-elements/tentative/form-association.html
@@ -8,6 +8,14 @@
   constructor() {
     super();
     this.internals_ = this.attachInternals();
+    this.formHistory_ = [];
+  }
+
+  formAssociatedCallback(nullableForm) {
+    this.formHistory_.push(nullableForm);
+  }
+  formHistory() {
+    return this.formHistory_;
   }
 
   get form() {
@@ -55,6 +63,7 @@
   assert_equals(controls.length, 3);
   assert_equals(controls[1], $('#pd1'), 'form.elements');
   assert_equals($('#pd1').form, $('#form1'));
+  assert_array_equals($('#pd1').formHistory(), [$('#form1')]);
   assert_equals($('#fs1').elements[1], $('#pd1'), 'fieldset.elements');
 
   controls = $('#form2').elements;
@@ -63,6 +72,8 @@
   assert_equals(controls[3], $('#pd3'));
   assert_equals($('#pd2').form, $('#form2'));
   assert_equals($('#pd3').form, $('#form2'));
+  assert_array_equals($('#pd2').formHistory(), [$('#form2')]);
+  assert_array_equals($('#pd3').formHistory(), [$('#form2')]);
   controls = $('#fs2').elements;
   assert_equals(controls.length, 3);
   assert_equals(controls[0], $('#pd2'), 'fieldset.elements');
@@ -94,6 +105,14 @@
     constructor() {
       super();
       this.internals_ = this.attachInternals();
+      this.formHistory_ = [];
+    }
+
+    formAssociatedCallback(nullableForm) {
+      this.formHistory_.push(nullableForm);
+    }
+    formHistory() {
+      return this.formHistory_;
     }
 
     get form() {
@@ -114,6 +133,8 @@
   controls = $('#form2').elements;
   assert_equals($('#wbd2').form, $('#form2'));
   assert_equals($('#wbd3').form, $('#form2'));
+  assert_array_equals($('#wbd2').formHistory(), [$('#form2')]);
+  assert_array_equals($('#wbd3').formHistory(), [$('#form2')]);
   assert_equals(controls.length, 2, 'form.elements.length');
   assert_equals(controls[0], $('#wbd2'));
   assert_equals(controls[1], $('#wbd3'));
@@ -133,6 +154,7 @@
   assert_equals($('#fs1').elements.length, 3, 'fildset.elements.length before removal');
   pd1.remove();
   assert_equals(pd1.form, null);
+  assert_array_equals(pd1.formHistory(), [$('#form1'), null]);
   assert_equals($('#form1').elements.length, 2, 'form.elements.length after removal');
   assert_equals($('#fs1').elements.length, 2, 'fildset.elements.length after removal');
 
@@ -144,6 +166,8 @@
   pd3.remove();
   assert_equals(pd2.form, null);
   assert_equals(pd3.form, null);
+  assert_array_equals(pd2.formHistory(), [$('#form2'), null]);
+  assert_array_equals(pd3.formHistory(), [$('#form2'), null]);
   assert_equals($('#form2').elements.length, 0, 'form.elements.length after removal');
   assert_equals($('#fs2').elements.length, 0, 'fieldset.elements.length after removal');
 }, 'Disassociation');
diff --git a/third_party/blink/web_tests/dom/attr/set-attribute-node-from-iframe-expected.txt b/third_party/blink/web_tests/dom/attr/set-attribute-node-from-iframe-expected.txt
index d48b5bb..6ec7d6a 100644
--- a/third_party/blink/web_tests/dom/attr/set-attribute-node-from-iframe-expected.txt
+++ b/third_party/blink/web_tests/dom/attr/set-attribute-node-from-iframe-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/dom/attr/update-attribute-node-no-crash-expected.txt b/third_party/blink/web_tests/dom/attr/update-attribute-node-no-crash-expected.txt
index 0b2dc07..f331c52 100644
--- a/third_party/blink/web_tests/dom/attr/update-attribute-node-no-crash-expected.txt
+++ b/third_party/blink/web_tests/dom/attr/update-attribute-node-no-crash-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/dom/comment/comment-constructor-expected.txt b/third_party/blink/web_tests/dom/comment/comment-constructor-expected.txt
index 4ff94c42..07eb272 100644
--- a/third_party/blink/web_tests/dom/comment/comment-constructor-expected.txt
+++ b/third_party/blink/web_tests/dom/comment/comment-constructor-expected.txt
@@ -18,4 +18,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/dom/document_fragment/document-fragment-constructor-expected.txt b/third_party/blink/web_tests/dom/document_fragment/document-fragment-constructor-expected.txt
index 82d6001..203d87c 100644
--- a/third_party/blink/web_tests/dom/document_fragment/document-fragment-constructor-expected.txt
+++ b/third_party/blink/web_tests/dom/document_fragment/document-fragment-constructor-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/dom/legacy_dom_conformance/html/level2/html/AppletsCollection-expected.txt b/third_party/blink/web_tests/dom/legacy_dom_conformance/html/level2/html/AppletsCollection-expected.txt
index 999bd1ea..48876d5 100644
--- a/third_party/blink/web_tests/dom/legacy_dom_conformance/html/level2/html/AppletsCollection-expected.txt
+++ b/third_party/blink/web_tests/dom/legacy_dom_conformance/html/level2/html/AppletsCollection-expected.txt
@@ -6,14 +6,10 @@
 
 Applets length is currently 0
 
-
-
 Applets length is currently 0
 
 Nothing here!
 
 Applets length is currently 0
 
-
-
 Applets length is currently 0
diff --git a/third_party/blink/web_tests/dom/node/contains-method-expected.txt b/third_party/blink/web_tests/dom/node/contains-method-expected.txt
index 912fa02..f5ed39277 100644
--- a/third_party/blink/web_tests/dom/node/contains-method-expected.txt
+++ b/third_party/blink/web_tests/dom/node/contains-method-expected.txt
@@ -25,4 +25,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/dom/node/mutation-blur-expected.txt b/third_party/blink/web_tests/dom/node/mutation-blur-expected.txt
index c4b6865..bc539141 100644
--- a/third_party/blink/web_tests/dom/node/mutation-blur-expected.txt
+++ b/third_party/blink/web_tests/dom/node/mutation-blur-expected.txt
@@ -1,3 +1 @@
 Tests for proper handling of DOM changes during a blur event. If the test doesn't crash, it passed.
-
-
diff --git a/third_party/blink/web_tests/dom/text/text-constructor-expected.txt b/third_party/blink/web_tests/dom/text/text-constructor-expected.txt
index 0a67f8ee..7ab0c56 100644
--- a/third_party/blink/web_tests/dom/text/text-constructor-expected.txt
+++ b/third_party/blink/web_tests/dom/text/text-constructor-expected.txt
@@ -18,4 +18,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/editing/input/ime-composition-clearpreedit-expected.txt b/third_party/blink/web_tests/editing/input/ime-composition-clearpreedit-expected.txt
index c9d82a1..a8b065b 100644
--- a/third_party/blink/web_tests/editing/input/ime-composition-clearpreedit-expected.txt
+++ b/third_party/blink/web_tests/editing/input/ime-composition-clearpreedit-expected.txt
@@ -2,6 +2,5 @@
 
 To test manually, enable an IME, input characters, clear the compose and see if the input field only contains the initial value
 
-
 SUCCESS COMPOSE
 SUCCESS CLEAR
diff --git a/third_party/blink/web_tests/editing/input/option-page-up-down-expected.txt b/third_party/blink/web_tests/editing/input/option-page-up-down-expected.txt
index dc3ccabc..2ea81945 100644
--- a/third_party/blink/web_tests/editing/input/option-page-up-down-expected.txt
+++ b/third_party/blink/web_tests/editing/input/option-page-up-down-expected.txt
@@ -1,6 +1,5 @@
 Page up/down (option+page up/down on Mac) should move the move cursor and scroll the content in contenteditable elements. This sample covers cursor position move test of a) iframe element containing contenteditable body, and b) content editable div element.
 
-
 line 0
 
 line 1
diff --git a/third_party/blink/web_tests/editing/input/paste-linebreak-into-initially-hidden-textarea-expected.txt b/third_party/blink/web_tests/editing/input/paste-linebreak-into-initially-hidden-textarea-expected.txt
index 2478fb48..d3b72f6a 100644
--- a/third_party/blink/web_tests/editing/input/paste-linebreak-into-initially-hidden-textarea-expected.txt
+++ b/third_party/blink/web_tests/editing/input/paste-linebreak-into-initially-hidden-textarea-expected.txt
@@ -1,4 +1,3 @@
 This tests pasting into a textarea that starts with a line break that didn't initially have a renderer (display: none). WebKit should still be able to paste text with line breaks.
 
-
 PASS
diff --git a/third_party/blink/web_tests/editing/input/reveal-edit-on-input-vertically-expected.txt b/third_party/blink/web_tests/editing/input/reveal-edit-on-input-vertically-expected.txt
index cf6f4ca..f388660b 100644
--- a/third_party/blink/web_tests/editing/input/reveal-edit-on-input-vertically-expected.txt
+++ b/third_party/blink/web_tests/editing/input/reveal-edit-on-input-vertically-expected.txt
@@ -1,4 +1,3 @@
 After starting typing in a scrolled out of view editor control, the control is to be brought in the center of the view
 To test manually, scroll the page up to the top, then start typing. Input box should be scrolled into the middle of the view.
-
 ScrollVertically: PASS
diff --git a/third_party/blink/web_tests/editing/input/reveal-edit-on-paste-vertically-expected.txt b/third_party/blink/web_tests/editing/input/reveal-edit-on-paste-vertically-expected.txt
index 4f21fa86..ff0ba33 100644
--- a/third_party/blink/web_tests/editing/input/reveal-edit-on-paste-vertically-expected.txt
+++ b/third_party/blink/web_tests/editing/input/reveal-edit-on-paste-vertically-expected.txt
@@ -1,5 +1,4 @@
 After pasting text in a scrolled out of view editor control, the control is to be brought in the center of the view
 To test manually, have some text in the clipboard, then scroll the page up to the top, then paste. Input box should be scrolled into the middle of the view.
-
 WebKit
 ScrollVertically: PASS
diff --git a/third_party/blink/web_tests/editing/input/scroll-viewport-page-up-down-expected.txt b/third_party/blink/web_tests/editing/input/scroll-viewport-page-up-down-expected.txt
index 306388f11..308d67a6 100644
--- a/third_party/blink/web_tests/editing/input/scroll-viewport-page-up-down-expected.txt
+++ b/third_party/blink/web_tests/editing/input/scroll-viewport-page-up-down-expected.txt
@@ -1,6 +1,5 @@
 Page up/down (option+page up/down on Mac) should move the move cursor and scroll the content in contenteditable elements. This sample covers scroll position test of a) iframe element containing contenteditable body and b) content editable div element. Even though the cursor will move exactly to the same location on all platforms (covered by test option-page-up-down.html), please note that Mac will scroll the visible area by placing the cursor position in the middle. All other platforms will scroll by keeping the cursor aligned with the top edge of the visible area.
 
-
 line 0
 
 line 1
diff --git a/third_party/blink/web_tests/editing/input/text-input-controller-leak-document-expected.txt b/third_party/blink/web_tests/editing/input/text-input-controller-leak-document-expected.txt
index fedb82d..d4c46f8 100644
--- a/third_party/blink/web_tests/editing/input/text-input-controller-leak-document-expected.txt
+++ b/third_party/blink/web_tests/editing/input/text-input-controller-leak-document-expected.txt
@@ -5,4 +5,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/editing/pasteboard/copy-backslash-with-euc-expected.txt b/third_party/blink/web_tests/editing/pasteboard/copy-backslash-with-euc-expected.txt
index 1c9b799..cb28b41 100644
--- a/third_party/blink/web_tests/editing/pasteboard/copy-backslash-with-euc-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/copy-backslash-with-euc-expected.txt
@@ -2,7 +2,6 @@
 \ from UTF8 page
 \ FROM UTF8 PAGE (TRANSFORMED)
 •••••••••••••••••••••••••
-
 Texts in the EUC frame will be pasted here
 from EUC div to UTF8 text-control: 
 from EUC div to UTF8 content-editable: \ from EUC page
diff --git a/third_party/blink/web_tests/editing/pasteboard/copy-crash-expected.txt b/third_party/blink/web_tests/editing/pasteboard/copy-crash-expected.txt
index 48c467c..58486526 100644
--- a/third_party/blink/web_tests/editing/pasteboard/copy-crash-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/copy-crash-expected.txt
@@ -1,7 +1,7 @@
 Mouse Over
 
 This test checks the fix for https://bugs.webkit.org/show_bug.cgi?id=18506. To test it manually:
-Hover mouse over "Mouse Over" link
-Quickly jump to the yellow box that pops up and select "Select" link
-Move mouse away so that pop up disappears
-Press the "Copy" keyboard accelerator - this should not cause any crash
+ Hover mouse over "Mouse Over" link
+ Quickly jump to the yellow box that pops up and select "Select" link
+ Move mouse away so that pop up disappears
+ Press the "Copy" keyboard accelerator - this should not cause any crash
diff --git a/third_party/blink/web_tests/editing/pasteboard/copy-standalone-image-escaping-expected.txt b/third_party/blink/web_tests/editing/pasteboard/copy-standalone-image-escaping-expected.txt
index d7a8c52d..5a9a14b 100644
--- a/third_party/blink/web_tests/editing/pasteboard/copy-standalone-image-escaping-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/copy-standalone-image-escaping-expected.txt
@@ -1,4 +1,2 @@
 ALERT: PASS
 This is an automatic test of copying an image document to ensure that the fragment portion of the URL is properly escaped and hence preserved by the paste operation.
-
-
diff --git a/third_party/blink/web_tests/editing/pasteboard/drag-drop-copy-text-expected.txt b/third_party/blink/web_tests/editing/pasteboard/drag-drop-copy-text-expected.txt
index 50cdcc50..4b48d4b 100644
--- a/third_party/blink/web_tests/editing/pasteboard/drag-drop-copy-text-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/drag-drop-copy-text-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/editing/pasteboard/drag-prioritizes-draggable-container-over-image-expected.txt b/third_party/blink/web_tests/editing/pasteboard/drag-prioritizes-draggable-container-over-image-expected.txt
index e1ea212b..3efdefe 100644
--- a/third_party/blink/web_tests/editing/pasteboard/drag-prioritizes-draggable-container-over-image-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/drag-prioritizes-draggable-container-over-image-expected.txt
@@ -1,5 +1,4 @@
 This test verifies that starting a drag on an image inside a -webkit-user-drag: element container succeeds. To run this test manually, try dragging the image to the box below. You should see the word "PASS" appear if it succeeds.
 
-
 PASS
 
diff --git a/third_party/blink/web_tests/editing/pasteboard/drop-file-svg-expected.txt b/third_party/blink/web_tests/editing/pasteboard/drop-file-svg-expected.txt
index 092e0fb1..b182132d 100644
--- a/third_party/blink/web_tests/editing/pasteboard/drop-file-svg-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/drop-file-svg-expected.txt
@@ -1,3 +1 @@
 A crash reproducing test using DRT. The test passes if it doesn't crash.
-
-
diff --git a/third_party/blink/web_tests/editing/pasteboard/input-with-display-none-div-expected.txt b/third_party/blink/web_tests/editing/pasteboard/input-with-display-none-div-expected.txt
index ad82154..0d73246 100644
--- a/third_party/blink/web_tests/editing/pasteboard/input-with-display-none-div-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/input-with-display-none-div-expected.txt
@@ -1,5 +1,3 @@
 This tests pasting (InsertHTML) into an input element with a CSS rule div { display: none}. You should see PASS below.
 
-
-
 PASS
diff --git a/third_party/blink/web_tests/editing/pasteboard/input-with-visibility-hidden-expected.txt b/third_party/blink/web_tests/editing/pasteboard/input-with-visibility-hidden-expected.txt
index 7cfbf17..c8918a9 100644
--- a/third_party/blink/web_tests/editing/pasteboard/input-with-visibility-hidden-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/input-with-visibility-hidden-expected.txt
@@ -1,5 +1,3 @@
 This tests pasting (InsertHTML) into an input element when body element has visibility set to hidden. You should see PASS below.
 
-
-
 PASS
diff --git a/third_party/blink/web_tests/editing/pasteboard/paste-event-only-once-expected.txt b/third_party/blink/web_tests/editing/pasteboard/paste-event-only-once-expected.txt
index 1a7376f..d985cb3 100644
--- a/third_party/blink/web_tests/editing/pasteboard/paste-event-only-once-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/paste-event-only-once-expected.txt
@@ -1,5 +1,3 @@
 Pasting in the text area should only fire one paste event.
 
-
-
 PASSED
diff --git a/third_party/blink/web_tests/editing/pasteboard/paste-noscript-svg-expected.txt b/third_party/blink/web_tests/editing/pasteboard/paste-noscript-svg-expected.txt
index 772ce379..456a5bf7 100644
--- a/third_party/blink/web_tests/editing/pasteboard/paste-noscript-svg-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/paste-noscript-svg-expected.txt
@@ -2,4 +2,3 @@
 Hello
 world
 <div id="div1">Hello</div><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="5cm" height="3cm" viewBox="0 0 5 3" version="1.1"><a><ellipse cx="2.5" cy="1.5" rx="2" ry="1" fill="red"></ellipse></a></svg><div id="div2">world</div>
-
diff --git a/third_party/blink/web_tests/editing/pasteboard/paste-placeholder-input-expected.txt b/third_party/blink/web_tests/editing/pasteboard/paste-placeholder-input-expected.txt
index df7f0a2dd..b40747c 100644
--- a/third_party/blink/web_tests/editing/pasteboard/paste-placeholder-input-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/paste-placeholder-input-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/editing/pasteboard/paste-plaintext-user-select-none-expected.txt b/third_party/blink/web_tests/editing/pasteboard/paste-plaintext-user-select-none-expected.txt
index 2af110c..48b0c88 100644
--- a/third_party/blink/web_tests/editing/pasteboard/paste-plaintext-user-select-none-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/paste-plaintext-user-select-none-expected.txt
@@ -10,5 +10,4 @@
 
 To test manually, copy "Test Passed" into clipboard, and paste in below box.
 
-
 Test Passed
diff --git a/third_party/blink/web_tests/editing/pasteboard/selection-paste-crash-expected.txt b/third_party/blink/web_tests/editing/pasteboard/selection-paste-crash-expected.txt
index fd3a6986..b5331323 100644
--- a/third_party/blink/web_tests/editing/pasteboard/selection-paste-crash-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/selection-paste-crash-expected.txt
@@ -1,3 +1 @@
 This test passes if middle mouse clicking in the rectangle below does not crash.
-
-
diff --git a/third_party/blink/web_tests/editing/pasteboard/smart-paste-in-text-control-expected.txt b/third_party/blink/web_tests/editing/pasteboard/smart-paste-in-text-control-expected.txt
index dbde6609..4e22c01 100644
--- a/third_party/blink/web_tests/editing/pasteboard/smart-paste-in-text-control-expected.txt
+++ b/third_party/blink/web_tests/editing/pasteboard/smart-paste-in-text-control-expected.txt
@@ -1,3 +1,2 @@
 This tests smart pasting in a text control. To manually test, double click the middle word in the text area below. Then cut and paste. It should result in the original text. The space before the middle word should not be lost.
-
 FAIL: Smart cutting and pasting do not result in the original text.
diff --git a/third_party/blink/web_tests/editing/selection/caret-after-keypress-expected.txt b/third_party/blink/web_tests/editing/selection/caret-after-keypress-expected.txt
index c9f18a73..3092e7c 100644
--- a/third_party/blink/web_tests/editing/selection/caret-after-keypress-expected.txt
+++ b/third_party/blink/web_tests/editing/selection/caret-after-keypress-expected.txt
@@ -41,4 +41,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/editing/selection/delete-word-granularity-text-control-expected.txt b/third_party/blink/web_tests/editing/selection/delete-word-granularity-text-control-expected.txt
index e9dd72c..a271b85 100644
--- a/third_party/blink/web_tests/editing/selection/delete-word-granularity-text-control-expected.txt
+++ b/third_party/blink/web_tests/editing/selection/delete-word-granularity-text-control-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/editing/selection/drag-text-delay-expected.txt b/third_party/blink/web_tests/editing/selection/drag-text-delay-expected.txt
index 447212b..fafd4b7 100644
--- a/third_party/blink/web_tests/editing/selection/drag-text-delay-expected.txt
+++ b/third_party/blink/web_tests/editing/selection/drag-text-delay-expected.txt
@@ -3,4 +3,3 @@
 To manually test, select "hello" and rapidly drag. You should see "hello world" on Mac and "worldhello" on all other platforms.
 
 hello world
-
diff --git a/third_party/blink/web_tests/editing/selection/extend-byline-withfloat-expected.txt b/third_party/blink/web_tests/editing/selection/extend-byline-withfloat-expected.txt
index e6d5eff..1dc6182 100644
--- a/third_party/blink/web_tests/editing/selection/extend-byline-withfloat-expected.txt
+++ b/third_party/blink/web_tests/editing/selection/extend-byline-withfloat-expected.txt
@@ -2,7 +2,7 @@
 
 between a rock and a hard rock cafe
 
-by rahcel (rahcel), 11 hours, 31 minutes ago.
+by rahcel (rahcel), 11 hours, 31 minutes ago. 
 
 Favorited by
 
diff --git a/third_party/blink/web_tests/editing/selection/focus-and-display-none-and-redisplay-expected.txt b/third_party/blink/web_tests/editing/selection/focus-and-display-none-and-redisplay-expected.txt
index f742444..e5cf457 100644
--- a/third_party/blink/web_tests/editing/selection/focus-and-display-none-and-redisplay-expected.txt
+++ b/third_party/blink/web_tests/editing/selection/focus-and-display-none-and-redisplay-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/editing/selection/focus-iframe-removal-crash-expected.txt b/third_party/blink/web_tests/editing/selection/focus-iframe-removal-crash-expected.txt
index a86b70b..b57defd4 100644
--- a/third_party/blink/web_tests/editing/selection/focus-iframe-removal-crash-expected.txt
+++ b/third_party/blink/web_tests/editing/selection/focus-iframe-removal-crash-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/editing/selection/paragraph-with-ruby-expected.txt b/third_party/blink/web_tests/editing/selection/paragraph-with-ruby-expected.txt
index f661299..834d7abe 100644
--- a/third_party/blink/web_tests/editing/selection/paragraph-with-ruby-expected.txt
+++ b/third_party/blink/web_tests/editing/selection/paragraph-with-ruby-expected.txt
@@ -1,6 +1,6 @@
 This is the paragraph before.
 
-This paragraph contains an annotated annotation word.
+This paragraph contains an annotatedannotation word.
 
 This is the paragraph after.
 
diff --git a/third_party/blink/web_tests/editing/selection/select-out-of-floated-contenteditable-expected.txt b/third_party/blink/web_tests/editing/selection/select-out-of-floated-contenteditable-expected.txt
index 4fcb9584..d0375b8 100644
--- a/third_party/blink/web_tests/editing/selection/select-out-of-floated-contenteditable-expected.txt
+++ b/third_party/blink/web_tests/editing/selection/select-out-of-floated-contenteditable-expected.txt
@@ -1,4 +1,4 @@
-Some text before the floats.
+Some text before the floats. 
 Drag from the middle.
 Some floated text in a div.
 Some text after the floats.
diff --git a/third_party/blink/web_tests/editing/selection/select-out-of-floated-input-expected.txt b/third_party/blink/web_tests/editing/selection/select-out-of-floated-input-expected.txt
index a3c313b..7f46b1ba 100644
--- a/third_party/blink/web_tests/editing/selection/select-out-of-floated-input-expected.txt
+++ b/third_party/blink/web_tests/editing/selection/select-out-of-floated-input-expected.txt
@@ -1,5 +1,4 @@
-Some text before the floats.
-
+Some text before the floats. 
 Some floated text in a div.
 Some text after the floats.
 
diff --git a/third_party/blink/web_tests/editing/selection/select-out-of-floated-textarea-expected.txt b/third_party/blink/web_tests/editing/selection/select-out-of-floated-textarea-expected.txt
index 31ea02e..ed3d7fd 100644
--- a/third_party/blink/web_tests/editing/selection/select-out-of-floated-textarea-expected.txt
+++ b/third_party/blink/web_tests/editing/selection/select-out-of-floated-textarea-expected.txt
@@ -1,5 +1,4 @@
-Some text before the floats.
-
+Some text before the floats. 
 Some floated text in a div.
 Some text after the floats.
 
diff --git a/third_party/blink/web_tests/editing/selection/stay-in-textarea-expected.txt b/third_party/blink/web_tests/editing/selection/stay-in-textarea-expected.txt
index bb9a896..930648a 100644
--- a/third_party/blink/web_tests/editing/selection/stay-in-textarea-expected.txt
+++ b/third_party/blink/web_tests/editing/selection/stay-in-textarea-expected.txt
@@ -1,7 +1,5 @@
 Before
 
-
-
 After
 
 Ensure that extending a selection beyond a textarea does not escape outside its shadow root.
diff --git a/third_party/blink/web_tests/editing/undo/5738768-expected.txt b/third_party/blink/web_tests/editing/undo/5738768-expected.txt
index 3c38cb30..7e76ebb 100644
--- a/third_party/blink/web_tests/editing/undo/5738768-expected.txt
+++ b/third_party/blink/web_tests/editing/undo/5738768-expected.txt
@@ -1,3 +1 @@
 This tests for a crash on Undo. You should see an empty input field below.
-
-
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json
index 3c59e9a..9f17fa6 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json
@@ -5671,12 +5671,6 @@
      {}
     ]
    ],
-   "pointerevents/pointerevent_capture_mouse-manual.html": [
-    [
-     "/pointerevents/pointerevent_capture_mouse-manual.html",
-     {}
-    ]
-   ],
    "pointerevents/pointerevent_capture_suppressing_mouse-manual.html": [
     [
      "/pointerevents/pointerevent_capture_suppressing_mouse-manual.html",
@@ -5767,24 +5761,6 @@
      {}
     ]
    ],
-   "pointerevents/pointerevent_pointermove-manual.html": [
-    [
-     "/pointerevents/pointerevent_pointermove-manual.html",
-     {}
-    ]
-   ],
-   "pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown-manual.html": [
-    [
-     "/pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown-manual.html",
-     {}
-    ]
-   ],
-   "pointerevents/pointerevent_pointermove_on_chorded_mouse_button-manual.html": [
-    [
-     "/pointerevents/pointerevent_pointermove_on_chorded_mouse_button-manual.html",
-     {}
-    ]
-   ],
    "pointerevents/pointerevent_pointerout_after_pointercancel_touch-manual.html": [
     [
      "/pointerevents/pointerevent_pointerout_after_pointercancel_touch-manual.html",
@@ -5845,12 +5821,6 @@
      {}
     ]
    ],
-   "pointerevents/pointerevent_setpointercapture_inactive_button_mouse-manual.html": [
-    [
-     "/pointerevents/pointerevent_setpointercapture_inactive_button_mouse-manual.html",
-     {}
-    ]
-   ],
    "pointerevents/pointerevent_setpointercapture_invalid_pointerid-manual.html": [
     [
      "/pointerevents/pointerevent_setpointercapture_invalid_pointerid-manual.html",
@@ -6355,12 +6325,6 @@
      {}
     ]
    ],
-   "uievents/mouse/mouse_buttons_back_forward-manual.html": [
-    [
-     "/uievents/mouse/mouse_buttons_back_forward-manual.html",
-     {}
-    ]
-   ],
    "uievents/mouse/mouseevent_move_button-manual.html": [
     [
      "/uievents/mouse/mouseevent_move_button-manual.html",
@@ -36281,6 +36245,42 @@
      {}
     ]
    ],
+   "css/css-contain/contain-layout-baseline-002.html": [
+    [
+     "/css/css-contain/contain-layout-baseline-002.html",
+     [
+      [
+       "/css/reference/ref-filled-green-100px-square.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-contain/contain-layout-baseline-003.html": [
+    [
+     "/css/css-contain/contain-layout-baseline-003.html",
+     [
+      [
+       "/css/reference/ref-filled-green-100px-square.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-contain/contain-layout-baseline-004.html": [
+    [
+     "/css/css-contain/contain-layout-baseline-004.html",
+     [
+      [
+       "/css/css-contain/reference/contain-layout-baseline-004-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-contain/contain-layout-breaks-001.html": [
     [
      "/css/css-contain/contain-layout-breaks-001.html",
@@ -61885,6 +61885,18 @@
      {}
     ]
    ],
+   "css/css-text/text-transform/text-transform-capitalize-033.html": [
+    [
+     "/css/css-text/text-transform/text-transform-capitalize-033.html",
+     [
+      [
+       "/css/css-text/text-transform/text-transform-capitalize-033-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-text/text-transform/text-transform-full-size-kana-001.html": [
     [
      "/css/css-text/text-transform/text-transform-full-size-kana-001.html",
@@ -77845,6 +77857,18 @@
      {}
     ]
    ],
+   "css/css-ui/text-overflow-ruby.html": [
+    [
+     "/css/css-ui/text-overflow-ruby.html",
+     [
+      [
+       "/css/css-ui/text-overflow-ruby-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-values/attr-color-invalid-cast.html": [
     [
      "/css/css-values/attr-color-invalid-cast.html",
@@ -92761,6 +92785,30 @@
      {}
     ]
    ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002.html": [
+    [
+     "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002.html",
+     [
+      [
+       "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html": [
     [
      "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001.html",
@@ -123242,6 +123290,41 @@
      {}
     ]
    ],
+   "css/css-break/parsing/box-decoration-break-valid-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-after-computed-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-after-valid-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-before-computed-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-before-valid-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-inside-computed-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-inside-valid-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "css/css-break/reference/widows-orphans-001-ref.html": [
     [
      {}
@@ -123652,11 +123735,21 @@
      {}
     ]
    ],
+   "css/css-contain/parsing/contain-computed-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "css/css-contain/reference/contain-baseline-ref.html": [
     [
      {}
     ]
    ],
+   "css/css-contain/reference/contain-layout-baseline-004-ref.html": [
+    [
+     {}
+    ]
+   ],
    "css/css-contain/reference/contain-layout-breaks-002-ref.html": [
     [
      {}
@@ -135962,6 +136055,16 @@
      {}
     ]
    ],
+   "css/css-multicol/parsing/column-fill-computed-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-fill-valid-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "css/css-multicol/reference/multicol-basic-005-ref.xht": [
     [
      {}
@@ -136502,6 +136605,26 @@
      {}
     ]
    ],
+   "css/css-position/parsing/inset-after-valid-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-before-valid-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-end-valid-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-start-valid-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "css/css-position/position-relative-table-left-ref.html": [
     [
      {}
@@ -140172,6 +140295,11 @@
      {}
     ]
    ],
+   "css/css-text/text-transform/text-transform-capitalize-033-ref.html": [
+    [
+     {}
+    ]
+   ],
    "css/css-text/text-transform/text-transform-fullwidth-002-ref.xht": [
     [
      {}
@@ -142477,21 +142605,11 @@
      {}
     ]
    ],
-   "css/css-typed-om/the-stylepropertymap/properties/fill-opacity-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "css/css-typed-om/the-stylepropertymap/properties/flex-basis-expected.txt": [
     [
      {}
     ]
    ],
-   "css/css-typed-om/the-stylepropertymap/properties/flood-opacity-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "css/css-typed-om/the-stylepropertymap/properties/font-language-override-expected.txt": [
     [
      {}
@@ -142667,11 +142785,6 @@
      {}
     ]
    ],
-   "css/css-typed-om/the-stylepropertymap/properties/stop-opacity-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "css/css-typed-om/the-stylepropertymap/properties/stroke-expected.txt": [
     [
      {}
@@ -142682,11 +142795,6 @@
      {}
     ]
    ],
-   "css/css-typed-om/the-stylepropertymap/properties/stroke-opacity-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "css/css-typed-om/the-stylepropertymap/properties/text-combine-upright-expected.txt": [
     [
      {}
@@ -144152,6 +144260,11 @@
      {}
     ]
    ],
+   "css/css-ui/text-overflow-ruby-ref.html": [
+    [
+     {}
+    ]
+   ],
    "css/css-values/META.yml": [
     [
      {}
@@ -148132,6 +148245,11 @@
      {}
     ]
    ],
+   "css/filter-effects/parsing/flood-opacity-valid-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "css/filter-effects/reference/filters-opacity-001-ref.html": [
     [
      {}
@@ -149552,6 +149670,16 @@
      {}
     ]
    ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002-ref.html": [
+    [
+     {}
+    ]
+   ],
    "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html": [
     [
      {}
@@ -151582,6 +151710,11 @@
      {}
     ]
    ],
+   "custom-elements/reactions/HTMLButtonElement-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "custom-elements/reactions/HTMLElement-expected.txt": [
     [
      {}
@@ -155717,6 +155850,31 @@
      {}
     ]
    ],
+   "fetch/content-type/README.md": [
+    [
+     {}
+    ]
+   ],
+   "fetch/content-type/resources/content-type.py": [
+    [
+     {}
+    ]
+   ],
+   "fetch/content-type/resources/content-types.json": [
+    [
+     {}
+    ]
+   ],
+   "fetch/content-type/resources/script-content-types.json": [
+    [
+     {}
+    ]
+   ],
+   "fetch/content-type/script.window-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "fetch/corb/OWNERS": [
     [
      {}
@@ -156992,21 +157150,6 @@
      {}
     ]
    ],
-   "hr-time/idlharness.any.serviceworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "hr-time/idlharness.any.sharedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "hr-time/idlharness.any.worker-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "hr-time/resources/now_frame.html": [
     [
      {}
@@ -164637,6 +164780,11 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/track/track-element/resources/align-positioning-bad.vtt": [
     [
      {}
@@ -168897,11 +169045,6 @@
      {}
     ]
    ],
-   "infrastructure/testdriver/actions/elementPosition-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "infrastructure/testdriver/send_keys-expected.txt": [
     [
      {}
@@ -169762,6 +169905,11 @@
      {}
     ]
    ],
+   "loading/resources/dummy.css": [
+    [
+     {}
+    ]
+   ],
    "longtask-timing/META.yml": [
     [
      {}
@@ -172417,6 +172565,11 @@
      {}
     ]
    ],
+   "payment-request/constructor_convert_method_data.https-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "payment-request/historical.https-expected.txt": [
     [
      {}
@@ -173082,6 +173235,11 @@
      {}
     ]
    ],
+   "referrer-policy/generic/subresource/shared-worker.py": [
+    [
+     {}
+    ]
+   ],
    "referrer-policy/generic/subresource/stylesheet.py": [
     [
      {}
@@ -173132,6 +173290,11 @@
      {}
     ]
    ],
+   "referrer-policy/generic/template/shared-worker.js.template": [
+    [
+     {}
+    ]
+   ],
    "referrer-policy/generic/template/spec_json.js.template": [
     [
      {}
@@ -173437,6 +173600,16 @@
      {}
     ]
    ],
+   "referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html.headers": [
+    [
+     {}
+    ]
+   ],
+   "referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html.headers": [
+    [
+     {}
+    ]
+   ],
    "referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html.headers": [
     [
      {}
@@ -173777,6 +173950,16 @@
      {}
     ]
    ],
+   "referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html.headers": [
+    [
+     {}
+    ]
+   ],
+   "referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html.headers": [
+    [
+     {}
+    ]
+   ],
    "referrer-policy/no-referrer/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html.headers": [
     [
      {}
@@ -174117,6 +174300,16 @@
      {}
     ]
    ],
+   "referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html.headers": [
+    [
+     {}
+    ]
+   ],
+   "referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html.headers": [
+    [
+     {}
+    ]
+   ],
    "referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html.headers": [
     [
      {}
@@ -174562,6 +174755,16 @@
      {}
     ]
    ],
+   "referrer-policy/origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html.headers": [
+    [
+     {}
+    ]
+   ],
+   "referrer-policy/origin/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html.headers": [
+    [
+     {}
+    ]
+   ],
    "referrer-policy/origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html.headers": [
     [
      {}
@@ -174902,6 +175105,16 @@
      {}
     ]
    ],
+   "referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html.headers": [
+    [
+     {}
+    ]
+   ],
+   "referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html.headers": [
+    [
+     {}
+    ]
+   ],
    "referrer-policy/same-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html.headers": [
     [
      {}
@@ -175197,6 +175410,16 @@
      {}
     ]
    ],
+   "referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-insecure.http.html.headers": [
+    [
+     {}
+    ]
+   ],
+   "referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-insecure.http.html.headers": [
+    [
+     {}
+    ]
+   ],
    "referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/same-insecure.http.html.headers": [
     [
      {}
@@ -175537,6 +175760,16 @@
      {}
     ]
    ],
+   "referrer-policy/strict-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html.headers": [
+    [
+     {}
+    ]
+   ],
+   "referrer-policy/strict-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html.headers": [
+    [
+     {}
+    ]
+   ],
    "referrer-policy/strict-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html.headers": [
     [
      {}
@@ -175877,6 +176110,16 @@
      {}
     ]
    ],
+   "referrer-policy/unsafe-url/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html.headers": [
+    [
+     {}
+    ]
+   ],
+   "referrer-policy/unsafe-url/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html.headers": [
+    [
+     {}
+    ]
+   ],
    "referrer-policy/unsafe-url/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html.headers": [
     [
      {}
@@ -176077,16 +176320,6 @@
      {}
     ]
    ],
-   "resource-timing/resource_timing_buffer_full_when_shrink_buffer_size-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "resource-timing/resource_timing_store_and_clear_during_callback-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "resource-timing/resources/TAOResponse.py": [
     [
      {}
@@ -176107,6 +176340,11 @@
      {}
     ]
    ],
+   "resource-timing/resources/buffer-full-utilities.js": [
+    [
+     {}
+    ]
+   ],
    "resource-timing/resources/empty.js": [
     [
      {}
@@ -179902,6 +180140,16 @@
      {}
     ]
    ],
+   "signed-exchange/resources/sxg-head-request.sxg": [
+    [
+     {}
+    ]
+   ],
+   "signed-exchange/resources/sxg-head-request.sxg.headers": [
+    [
+     {}
+    ]
+   ],
    "signed-exchange/resources/sxg-invalid-validity-url.sxg": [
     [
      {}
@@ -179992,6 +180240,11 @@
      {}
     ]
    ],
+   "storage/helpers.js": [
+    [
+     {}
+    ]
+   ],
    "storage/persist-permission-manual.https-expected.txt": [
     [
      {}
@@ -180012,11 +180265,6 @@
      {}
     ]
    ],
-   "streams/piping/abort-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/piping/abort.any-expected.txt": [
     [
      {}
@@ -180037,26 +180285,6 @@
      {}
     ]
    ],
-   "streams/piping/abort.dedicatedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/piping/abort.serviceworker.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/piping/abort.sharedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/piping/pipe-through-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/piping/pipe-through.any-expected.txt": [
     [
      {}
@@ -180077,26 +180305,6 @@
      {}
     ]
    ],
-   "streams/piping/pipe-through.dedicatedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/piping/pipe-through.serviceworker.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/piping/pipe-through.sharedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/brand-checks-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/readable-byte-streams/brand-checks.any-expected.txt": [
     [
      {}
@@ -180117,26 +180325,6 @@
      {}
     ]
    ],
-   "streams/readable-byte-streams/brand-checks.dedicatedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/brand-checks.serviceworker.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/brand-checks.sharedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/construct-byob-request-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/readable-byte-streams/construct-byob-request.any-expected.txt": [
     [
      {}
@@ -180157,26 +180345,6 @@
      {}
     ]
    ],
-   "streams/readable-byte-streams/construct-byob-request.dedicatedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/construct-byob-request.serviceworker.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/construct-byob-request.sharedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/constructor-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/readable-byte-streams/constructor.any-expected.txt": [
     [
      {}
@@ -180197,26 +180365,6 @@
      {}
     ]
    ],
-   "streams/readable-byte-streams/constructor.dedicatedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/constructor.serviceworker.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/constructor.sharedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/detached-buffers-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/readable-byte-streams/detached-buffers.any-expected.txt": [
     [
      {}
@@ -180237,26 +180385,6 @@
      {}
     ]
    ],
-   "streams/readable-byte-streams/detached-buffers.dedicatedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/detached-buffers.serviceworker.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/detached-buffers.sharedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/general-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/readable-byte-streams/general.any-expected.txt": [
     [
      {}
@@ -180277,26 +180405,6 @@
      {}
     ]
    ],
-   "streams/readable-byte-streams/general.dedicatedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/general.serviceworker.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/general.sharedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/properties-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/readable-byte-streams/properties.any-expected.txt": [
     [
      {}
@@ -180317,26 +180425,6 @@
      {}
     ]
    ],
-   "streams/readable-byte-streams/properties.dedicatedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/properties.serviceworker.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-byte-streams/properties.sharedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-streams/general-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/readable-streams/general.any-expected.txt": [
     [
      {}
@@ -180357,21 +180445,6 @@
      {}
     ]
    ],
-   "streams/readable-streams/general.dedicatedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-streams/general.serviceworker.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
-   "streams/readable-streams/general.sharedworker-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "streams/resources/constructor-ordering.js": [
     [
      {}
@@ -180397,6 +180470,26 @@
      {}
     ]
    ],
+   "streams/writable-streams/properties.any-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "streams/writable-streams/properties.any.serviceworker-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "streams/writable-streams/properties.any.sharedworker-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "streams/writable-streams/properties.any.worker-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "subresource-integrity/META.yml": [
     [
      {}
@@ -180862,6 +180955,11 @@
      {}
     ]
    ],
+   "svg/pservers/parsing/stop-opacity-valid-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "svg/pservers/reftests/meshgradient-basic-001-ref.png": [
     [
      {}
@@ -203072,6 +203170,114 @@
      {}
     ]
    ],
+   "css/css-break/parsing/box-decoration-break-computed.html": [
+    [
+     "/css/css-break/parsing/box-decoration-break-computed.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/box-decoration-break-invalid.html": [
+    [
+     "/css/css-break/parsing/box-decoration-break-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/box-decoration-break-valid.html": [
+    [
+     "/css/css-break/parsing/box-decoration-break-valid.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-after-computed.html": [
+    [
+     "/css/css-break/parsing/break-after-computed.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-after-invalid.html": [
+    [
+     "/css/css-break/parsing/break-after-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-after-valid.html": [
+    [
+     "/css/css-break/parsing/break-after-valid.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-before-computed.html": [
+    [
+     "/css/css-break/parsing/break-before-computed.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-before-invalid.html": [
+    [
+     "/css/css-break/parsing/break-before-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-before-valid.html": [
+    [
+     "/css/css-break/parsing/break-before-valid.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-inside-computed.html": [
+    [
+     "/css/css-break/parsing/break-inside-computed.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-inside-invalid.html": [
+    [
+     "/css/css-break/parsing/break-inside-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/break-inside-valid.html": [
+    [
+     "/css/css-break/parsing/break-inside-valid.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/orphans-computed.html": [
+    [
+     "/css/css-break/parsing/orphans-computed.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/orphans-invalid.html": [
+    [
+     "/css/css-break/parsing/orphans-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/orphans-valid.html": [
+    [
+     "/css/css-break/parsing/orphans-valid.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/widows-computed.html": [
+    [
+     "/css/css-break/parsing/widows-computed.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/widows-invalid.html": [
+    [
+     "/css/css-break/parsing/widows-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-break/parsing/widows-valid.html": [
+    [
+     "/css/css-break/parsing/widows-valid.html",
+     {}
+    ]
+   ],
    "css/css-cascade/all-prop-initial-xml.html": [
     [
      "/css/css-cascade/all-prop-initial-xml.html",
@@ -203176,6 +203382,24 @@
      {}
     ]
    ],
+   "css/css-contain/parsing/contain-computed.html": [
+    [
+     "/css/css-contain/parsing/contain-computed.html",
+     {}
+    ]
+   ],
+   "css/css-contain/parsing/contain-invalid.html": [
+    [
+     "/css/css-contain/parsing/contain-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-contain/parsing/contain-valid.html": [
+    [
+     "/css/css-contain/parsing/contain-valid.html",
+     {}
+    ]
+   ],
    "css/css-device-adapt/idlharness.html": [
     [
      "/css/css-device-adapt/idlharness.html",
@@ -206052,6 +206276,174 @@
      {}
     ]
    ],
+   "css/css-multicol/parsing/column-count-computed.html": [
+    [
+     "/css/css-multicol/parsing/column-count-computed.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-count-invalid.html": [
+    [
+     "/css/css-multicol/parsing/column-count-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-count-valid.html": [
+    [
+     "/css/css-multicol/parsing/column-count-valid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-fill-computed.html": [
+    [
+     "/css/css-multicol/parsing/column-fill-computed.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-fill-invalid.html": [
+    [
+     "/css/css-multicol/parsing/column-fill-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-fill-valid.html": [
+    [
+     "/css/css-multicol/parsing/column-fill-valid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-gap-computed.html": [
+    [
+     "/css/css-multicol/parsing/column-gap-computed.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-gap-invalid.html": [
+    [
+     "/css/css-multicol/parsing/column-gap-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-gap-valid.html": [
+    [
+     "/css/css-multicol/parsing/column-gap-valid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-rule-color-computed.html": [
+    [
+     "/css/css-multicol/parsing/column-rule-color-computed.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-rule-color-invalid.html": [
+    [
+     "/css/css-multicol/parsing/column-rule-color-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-rule-color-valid.html": [
+    [
+     "/css/css-multicol/parsing/column-rule-color-valid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-rule-invalid.html": [
+    [
+     "/css/css-multicol/parsing/column-rule-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-rule-style-computed.html": [
+    [
+     "/css/css-multicol/parsing/column-rule-style-computed.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-rule-style-invalid.html": [
+    [
+     "/css/css-multicol/parsing/column-rule-style-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-rule-style-valid.html": [
+    [
+     "/css/css-multicol/parsing/column-rule-style-valid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-rule-valid.html": [
+    [
+     "/css/css-multicol/parsing/column-rule-valid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-rule-width-computed.html": [
+    [
+     "/css/css-multicol/parsing/column-rule-width-computed.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-rule-width-invalid.html": [
+    [
+     "/css/css-multicol/parsing/column-rule-width-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-rule-width-valid.html": [
+    [
+     "/css/css-multicol/parsing/column-rule-width-valid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-span-computed.html": [
+    [
+     "/css/css-multicol/parsing/column-span-computed.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-span-invalid.html": [
+    [
+     "/css/css-multicol/parsing/column-span-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-span-valid.html": [
+    [
+     "/css/css-multicol/parsing/column-span-valid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-width-computed.html": [
+    [
+     "/css/css-multicol/parsing/column-width-computed.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-width-invalid.html": [
+    [
+     "/css/css-multicol/parsing/column-width-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/column-width-valid.html": [
+    [
+     "/css/css-multicol/parsing/column-width-valid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/columns-invalid.html": [
+    [
+     "/css/css-multicol/parsing/columns-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-multicol/parsing/columns-valid.html": [
+    [
+     "/css/css-multicol/parsing/columns-valid.html",
+     {}
+    ]
+   ],
    "css/css-multicol/zero-column-width-computed-style.html": [
     [
      "/css/css-multicol/zero-column-width-computed-style.html",
@@ -206100,6 +206492,186 @@
      {}
     ]
    ],
+   "css/css-position/parsing/bottom-computed.html": [
+    [
+     "/css/css-position/parsing/bottom-computed.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/bottom-invalid.html": [
+    [
+     "/css/css-position/parsing/bottom-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/bottom-valid.html": [
+    [
+     "/css/css-position/parsing/bottom-valid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-after-computed.html": [
+    [
+     "/css/css-position/parsing/inset-after-computed.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-after-invalid.html": [
+    [
+     "/css/css-position/parsing/inset-after-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-after-valid.html": [
+    [
+     "/css/css-position/parsing/inset-after-valid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-before-computed.html": [
+    [
+     "/css/css-position/parsing/inset-before-computed.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-before-invalid.html": [
+    [
+     "/css/css-position/parsing/inset-before-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-before-valid.html": [
+    [
+     "/css/css-position/parsing/inset-before-valid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-end-computed.html": [
+    [
+     "/css/css-position/parsing/inset-end-computed.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-end-invalid.html": [
+    [
+     "/css/css-position/parsing/inset-end-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-end-valid.html": [
+    [
+     "/css/css-position/parsing/inset-end-valid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-start-computed.html": [
+    [
+     "/css/css-position/parsing/inset-start-computed.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-start-invalid.html": [
+    [
+     "/css/css-position/parsing/inset-start-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/inset-start-valid.html": [
+    [
+     "/css/css-position/parsing/inset-start-valid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/left-computed.html": [
+    [
+     "/css/css-position/parsing/left-computed.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/left-invalid.html": [
+    [
+     "/css/css-position/parsing/left-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/left-valid.html": [
+    [
+     "/css/css-position/parsing/left-valid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/position-computed.html": [
+    [
+     "/css/css-position/parsing/position-computed.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/position-invalid.html": [
+    [
+     "/css/css-position/parsing/position-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/position-valid.html": [
+    [
+     "/css/css-position/parsing/position-valid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/right-computed.html": [
+    [
+     "/css/css-position/parsing/right-computed.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/right-invalid.html": [
+    [
+     "/css/css-position/parsing/right-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/right-valid.html": [
+    [
+     "/css/css-position/parsing/right-valid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/top-computed.html": [
+    [
+     "/css/css-position/parsing/top-computed.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/top-invalid.html": [
+    [
+     "/css/css-position/parsing/top-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/top-valid.html": [
+    [
+     "/css/css-position/parsing/top-valid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/z-index-computed.html": [
+    [
+     "/css/css-position/parsing/z-index-computed.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/z-index-invalid.html": [
+    [
+     "/css/css-position/parsing/z-index-invalid.html",
+     {}
+    ]
+   ],
+   "css/css-position/parsing/z-index-valid.html": [
+    [
+     "/css/css-position/parsing/z-index-valid.html",
+     {}
+    ]
+   ],
    "css/css-position/position-sticky-bottom.html": [
     [
      "/css/css-position/position-sticky-bottom.html",
@@ -206640,6 +207212,18 @@
      {}
     ]
    ],
+   "css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html": [
+    [
+     "/css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html",
+     {}
+    ]
+   ],
+   "css/css-shadow-parts/invalidation-change-part-name-idl-setter.html": [
+    [
+     "/css/css-shadow-parts/invalidation-change-part-name-idl-setter.html",
+     {}
+    ]
+   ],
    "css/css-shadow-parts/invalidation-change-part-name.html": [
     [
      "/css/css-shadow-parts/invalidation-change-part-name.html",
@@ -206652,6 +207236,12 @@
      {}
     ]
    ],
+   "css/css-shadow-parts/part-name-idl.html": [
+    [
+     "/css/css-shadow-parts/part-name-idl.html",
+     {}
+    ]
+   ],
    "css/css-shadow-parts/simple.html": [
     [
      "/css/css-shadow-parts/simple.html",
@@ -213562,6 +214152,24 @@
      {}
     ]
    ],
+   "css/filter-effects/parsing/flood-opacity-computed.svg": [
+    [
+     "/css/filter-effects/parsing/flood-opacity-computed.svg",
+     {}
+    ]
+   ],
+   "css/filter-effects/parsing/flood-opacity-invalid.svg": [
+    [
+     "/css/filter-effects/parsing/flood-opacity-invalid.svg",
+     {}
+    ]
+   ],
+   "css/filter-effects/parsing/flood-opacity-valid.svg": [
+    [
+     "/css/filter-effects/parsing/flood-opacity-valid.svg",
+     {}
+    ]
+   ],
    "css/filter-effects/parsing/lighting-color-computed.html": [
     [
      "/css/filter-effects/parsing/lighting-color-computed.html",
@@ -214232,6 +214840,18 @@
      {}
     ]
    ],
+   "css/selectors/invalidation/defined.html": [
+    [
+     "/css/selectors/invalidation/defined.html",
+     {}
+    ]
+   ],
+   "css/selectors/invalidation/enabled-disabled.html": [
+    [
+     "/css/selectors/invalidation/enabled-disabled.html",
+     {}
+    ]
+   ],
    "css/selectors/invalidation/first-child-last-child.html": [
     [
      "/css/selectors/invalidation/first-child-last-child.html",
@@ -214568,6 +215188,12 @@
      {}
     ]
    ],
+   "custom-elements/reactions/HTMLButtonElement.html": [
+    [
+     "/custom-elements/reactions/HTMLButtonElement.html",
+     {}
+    ]
+   ],
    "custom-elements/reactions/HTMLElement.html": [
     [
      "/custom-elements/reactions/HTMLElement.html",
@@ -227916,6 +228542,18 @@
      {}
     ]
    ],
+   "fetch/content-type/response.window.js": [
+    [
+     "/fetch/content-type/response.window.html",
+     {}
+    ]
+   ],
+   "fetch/content-type/script.window.js": [
+    [
+     "/fetch/content-type/script.window.html",
+     {}
+    ]
+   ],
    "fetch/corb/img-mime-types-coverage.tentative.sub.html": [
     [
      "/fetch/corb/img-mime-types-coverage.tentative.sub.html",
@@ -228489,7 +229127,9 @@
    "geolocation-API/getCurrentPosition_IDL.https.html": [
     [
      "/geolocation-API/getCurrentPosition_IDL.https.html",
-     {}
+     {
+      "timeout": "long"
+     }
     ]
    ],
    "geolocation-API/getCurrentPosition_TypeError.html": [
@@ -233220,6 +233860,12 @@
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html": [
+    [
+     "/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html",
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/ready-states/autoplay-with-slow-text-tracks.html": [
     [
      "/html/semantics/embedded-content/media-elements/ready-states/autoplay-with-slow-text-tracks.html",
@@ -242274,6 +242920,36 @@
      {}
     ]
    ],
+   "loading/preloader-css-import-no-quote.tentative.html": [
+    [
+     "/loading/preloader-css-import-no-quote.tentative.html",
+     {}
+    ]
+   ],
+   "loading/preloader-css-import-no-semicolon.tentative.html": [
+    [
+     "/loading/preloader-css-import-no-semicolon.tentative.html",
+     {}
+    ]
+   ],
+   "loading/preloader-css-import-no-space.tentative.html": [
+    [
+     "/loading/preloader-css-import-no-space.tentative.html",
+     {}
+    ]
+   ],
+   "loading/preloader-css-import-single-quote.tentative.html": [
+    [
+     "/loading/preloader-css-import-single-quote.tentative.html",
+     {}
+    ]
+   ],
+   "loading/preloader-css-import.tentative.html": [
+    [
+     "/loading/preloader-css-import.tentative.html",
+     {}
+    ]
+   ],
    "longtask-timing/idlharness.window.js": [
     [
      "/longtask-timing/idlharness.window.html",
@@ -256196,6 +256872,12 @@
      {}
     ]
    ],
+   "payment-request/constructor_convert_method_data.https.html": [
+    [
+     "/payment-request/constructor_convert_method_data.https.html",
+     {}
+    ]
+   ],
    "payment-request/historical.https.html": [
     [
      "/payment-request/historical.https.html",
@@ -256608,6 +257290,14 @@
      {}
     ]
    ],
+   "pointerevents/pointerevent_capture_mouse.html": [
+    [
+     "/pointerevents/pointerevent_capture_mouse.html",
+     {
+      "testdriver": true
+     }
+    ]
+   ],
    "pointerevents/pointerevent_constructor.html": [
     [
      "/pointerevents/pointerevent_constructor.html",
@@ -256620,6 +257310,50 @@
      {}
     ]
    ],
+   "pointerevents/pointerevent_pointermove.html": [
+    [
+     "/pointerevents/pointerevent_pointermove.html",
+     {
+      "testdriver": true
+     }
+    ]
+   ],
+   "pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown.html": [
+    [
+     "/pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown.html",
+     {
+      "testdriver": true
+     }
+    ]
+   ],
+   "pointerevents/pointerevent_pointermove_on_chorded_mouse_button.html": [
+    [
+     "/pointerevents/pointerevent_pointermove_on_chorded_mouse_button.html",
+     {
+      "testdriver": true
+     }
+    ]
+   ],
+   "pointerevents/pointerevent_root_computed_style.html": [
+    [
+     "/pointerevents/pointerevent_root_computed_style.html",
+     {}
+    ]
+   ],
+   "pointerevents/pointerevent_root_hit_test.html": [
+    [
+     "/pointerevents/pointerevent_root_hit_test.html",
+     {}
+    ]
+   ],
+   "pointerevents/pointerevent_setpointercapture_inactive_button_mouse.html": [
+    [
+     "/pointerevents/pointerevent_setpointercapture_inactive_button_mouse.html",
+     {
+      "testdriver": true
+     }
+    ]
+   ],
    "pointerevents/pointerevent_touch-action-illegal.html": [
     [
      "/pointerevents/pointerevent_touch-action-illegal.html",
@@ -256662,6 +257396,12 @@
      {}
     ]
    ],
+   "preload/dynamic-adding-preload-imagesrcset.tentative.html": [
+    [
+     "/preload/dynamic-adding-preload-imagesrcset.tentative.html",
+     {}
+    ]
+   ],
    "preload/dynamic-adding-preload-nonce.html": [
     [
      "/preload/dynamic-adding-preload-nonce.html",
@@ -257722,6 +258462,18 @@
      {}
     ]
    ],
+   "referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html": [
+    [
+     "/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html": [
+    [
+     "/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html": [
     [
      "/referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html",
@@ -258130,6 +258882,18 @@
      {}
     ]
    ],
+   "referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html": [
+    [
+     "/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html": [
+    [
+     "/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html": [
     [
      "/referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html",
@@ -258778,6 +259542,18 @@
      {}
     ]
    ],
+   "referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html": [
+    [
+     "/referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html": [
+    [
+     "/referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/no-referrer/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html": [
     [
      "/referrer-policy/no-referrer/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html",
@@ -259186,6 +259962,18 @@
      {}
     ]
    ],
+   "referrer-policy/no-referrer/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html": [
+    [
+     "/referrer-policy/no-referrer/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/no-referrer/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html": [
+    [
+     "/referrer-policy/no-referrer/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/no-referrer/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html": [
     [
      "/referrer-policy/no-referrer/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html",
@@ -259912,6 +260700,18 @@
      {}
     ]
    ],
+   "referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html": [
+    [
+     "/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html": [
+    [
+     "/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html": [
     [
      "/referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html",
@@ -260446,6 +261246,18 @@
      {}
     ]
    ],
+   "referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html": [
+    [
+     "/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html": [
+    [
+     "/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html": [
     [
      "/referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html",
@@ -261220,6 +262032,18 @@
      {}
     ]
    ],
+   "referrer-policy/origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html": [
+    [
+     "/referrer-policy/origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/origin/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html": [
+    [
+     "/referrer-policy/origin/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html": [
     [
      "/referrer-policy/origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html",
@@ -261628,6 +262452,18 @@
      {}
     ]
    ],
+   "referrer-policy/origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html": [
+    [
+     "/referrer-policy/origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html": [
+    [
+     "/referrer-policy/origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html": [
     [
      "/referrer-policy/origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html",
@@ -262234,6 +263070,18 @@
      {}
     ]
    ],
+   "referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html": [
+    [
+     "/referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html": [
+    [
+     "/referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/same-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html": [
     [
      "/referrer-policy/same-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html",
@@ -262576,6 +263424,18 @@
      {}
     ]
    ],
+   "referrer-policy/same-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html": [
+    [
+     "/referrer-policy/same-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/same-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html": [
+    [
+     "/referrer-policy/same-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/same-origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html": [
     [
      "/referrer-policy/same-origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html",
@@ -263158,6 +264018,18 @@
      {}
     ]
    ],
+   "referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-insecure.http.html": [
+    [
+     "/referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-insecure.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-insecure.http.html": [
+    [
+     "/referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-insecure.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/same-insecure.http.html": [
     [
      "/referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/same-insecure.http.html",
@@ -263566,6 +264438,18 @@
      {}
     ]
    ],
+   "referrer-policy/strict-origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/same-insecure.http.html": [
+    [
+     "/referrer-policy/strict-origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/same-insecure.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/strict-origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/same-insecure.http.html": [
+    [
+     "/referrer-policy/strict-origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/same-insecure.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/strict-origin-when-cross-origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/same-insecure.http.html": [
     [
      "/referrer-policy/strict-origin-when-cross-origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/same-insecure.http.html",
@@ -264214,6 +265098,18 @@
      {}
     ]
    ],
+   "referrer-policy/strict-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html": [
+    [
+     "/referrer-policy/strict-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/strict-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html": [
+    [
+     "/referrer-policy/strict-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/strict-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html": [
     [
      "/referrer-policy/strict-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html",
@@ -264622,6 +265518,18 @@
      {}
     ]
    ],
+   "referrer-policy/strict-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html": [
+    [
+     "/referrer-policy/strict-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/strict-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html": [
+    [
+     "/referrer-policy/strict-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/strict-origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html": [
     [
      "/referrer-policy/strict-origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html",
@@ -265270,6 +266178,18 @@
      {}
     ]
    ],
+   "referrer-policy/unsafe-url/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html": [
+    [
+     "/referrer-policy/unsafe-url/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/unsafe-url/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html": [
+    [
+     "/referrer-policy/unsafe-url/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/unsafe-url/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html": [
     [
      "/referrer-policy/unsafe-url/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html",
@@ -265678,6 +266598,18 @@
      {}
     ]
    ],
+   "referrer-policy/unsafe-url/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html": [
+    [
+     "/referrer-policy/unsafe-url/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/unsafe-url/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html": [
+    [
+     "/referrer-policy/unsafe-url/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/unsafe-url/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html": [
     [
      "/referrer-policy/unsafe-url/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html",
@@ -266326,6 +267258,18 @@
      {}
     ]
    ],
+   "referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html": [
+    [
+     "/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html": [
+    [
+     "/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html": [
     [
      "/referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html",
@@ -266734,6 +267678,18 @@
      {}
     ]
    ],
+   "referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html": [
+    [
+     "/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html",
+     {}
+    ]
+   ],
+   "referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html": [
+    [
+     "/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html",
+     {}
+    ]
+   ],
    "referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html": [
     [
      "/referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html",
@@ -267010,6 +267966,72 @@
      {}
     ]
    ],
+   "resource-timing/buffer-full-add-after-full-event.html": [
+    [
+     "/resource-timing/buffer-full-add-after-full-event.html",
+     {}
+    ]
+   ],
+   "resource-timing/buffer-full-add-entries-during-callback-that-drop.html": [
+    [
+     "/resource-timing/buffer-full-add-entries-during-callback-that-drop.html",
+     {}
+    ]
+   ],
+   "resource-timing/buffer-full-add-entries-during-callback.html": [
+    [
+     "/resource-timing/buffer-full-add-entries-during-callback.html",
+     {}
+    ]
+   ],
+   "resource-timing/buffer-full-add-then-clear.html": [
+    [
+     "/resource-timing/buffer-full-add-then-clear.html",
+     {}
+    ]
+   ],
+   "resource-timing/buffer-full-decrease-buffer-during-callback.html": [
+    [
+     "/resource-timing/buffer-full-decrease-buffer-during-callback.html",
+     {}
+    ]
+   ],
+   "resource-timing/buffer-full-increase-buffer-during-callback.html": [
+    [
+     "/resource-timing/buffer-full-increase-buffer-during-callback.html",
+     {}
+    ]
+   ],
+   "resource-timing/buffer-full-inspect-buffer-during-callback.html": [
+    [
+     "/resource-timing/buffer-full-inspect-buffer-during-callback.html",
+     {}
+    ]
+   ],
+   "resource-timing/buffer-full-set-to-current-buffer.html": [
+    [
+     "/resource-timing/buffer-full-set-to-current-buffer.html",
+     {}
+    ]
+   ],
+   "resource-timing/buffer-full-store-and-clear-during-callback.html": [
+    [
+     "/resource-timing/buffer-full-store-and-clear-during-callback.html",
+     {}
+    ]
+   ],
+   "resource-timing/buffer-full-then-increased.html": [
+    [
+     "/resource-timing/buffer-full-then-increased.html",
+     {}
+    ]
+   ],
+   "resource-timing/buffer-full-when-populate-entries.html": [
+    [
+     "/resource-timing/buffer-full-when-populate-entries.html",
+     {}
+    ]
+   ],
    "resource-timing/clear_resource_timing_functionality.html": [
     [
      "/resource-timing/clear_resource_timing_functionality.html",
@@ -267194,12 +268216,6 @@
      {}
     ]
    ],
-   "resource-timing/resource_timing_buffer_full_when_populate_entries.html": [
-    [
-     "/resource-timing/resource_timing_buffer_full_when_populate_entries.html",
-     {}
-    ]
-   ],
    "resource-timing/resource_timing_buffer_full_when_shrink_buffer_size.html": [
     [
      "/resource-timing/resource_timing_buffer_full_when_shrink_buffer_size.html",
@@ -267224,12 +268240,6 @@
      {}
     ]
    ],
-   "resource-timing/resource_timing_store_and_clear_during_callback.html": [
-    [
-     "/resource-timing/resource_timing_store_and_clear_during_callback.html",
-     {}
-    ]
-   ],
    "resource-timing/single-entry-per-resource.html": [
     [
      "/resource-timing/single-entry-per-resource.html",
@@ -269774,6 +270784,12 @@
      {}
     ]
    ],
+   "signed-exchange/sxg-head-request.tentative.html": [
+    [
+     "/signed-exchange/sxg-head-request.tentative.html",
+     {}
+    ]
+   ],
    "signed-exchange/sxg-invalid-validity-url.tentative.html": [
     [
      "/signed-exchange/sxg-invalid-validity-url.tentative.html",
@@ -269898,6 +270914,16 @@
      {}
     ]
    ],
+   "storage/estimate-usage-details-indexeddb.https.tentative.any.js": [
+    [
+     "/storage/estimate-usage-details-indexeddb.https.tentative.any.html",
+     {}
+    ],
+    [
+     "/storage/estimate-usage-details-indexeddb.https.tentative.any.worker.html",
+     {}
+    ]
+   ],
    "storage/idlharness.https.any.js": [
     [
      "/storage/idlharness.https.any.html",
@@ -271310,6 +272336,12 @@
      {}
     ]
    ],
+   "svg/painting/parsing/fill-opacity-computed.svg": [
+    [
+     "/svg/painting/parsing/fill-opacity-computed.svg",
+     {}
+    ]
+   ],
    "svg/painting/parsing/fill-opacity-invalid.svg": [
     [
      "/svg/painting/parsing/fill-opacity-invalid.svg",
@@ -271478,6 +272510,12 @@
      {}
     ]
    ],
+   "svg/painting/parsing/stroke-opacity-computed.svg": [
+    [
+     "/svg/painting/parsing/stroke-opacity-computed.svg",
+     {}
+    ]
+   ],
    "svg/painting/parsing/stroke-opacity-invalid.svg": [
     [
      "/svg/painting/parsing/stroke-opacity-invalid.svg",
@@ -271574,6 +272612,24 @@
      {}
     ]
    ],
+   "svg/pservers/parsing/stop-opacity-computed.svg": [
+    [
+     "/svg/pservers/parsing/stop-opacity-computed.svg",
+     {}
+    ]
+   ],
+   "svg/pservers/parsing/stop-opacity-invalid.svg": [
+    [
+     "/svg/pservers/parsing/stop-opacity-invalid.svg",
+     {}
+    ]
+   ],
+   "svg/pservers/parsing/stop-opacity-valid.svg": [
+    [
+     "/svg/pservers/parsing/stop-opacity-valid.svg",
+     {}
+    ]
+   ],
    "svg/scripted/text-attrs-dxdy-have-length.svg": [
     [
      "/svg/scripted/text-attrs-dxdy-have-length.svg",
@@ -272192,6 +273248,14 @@
      {}
     ]
    ],
+   "uievents/mouse/mouse_buttons_back_forward.html": [
+    [
+     "/uievents/mouse/mouse_buttons_back_forward.html",
+     {
+      "testdriver": true
+     }
+    ]
+   ],
    "uievents/order-of-events/focus-events/focus-automated-blink-webkit.html": [
     [
      "/uievents/order-of-events/focus-events/focus-automated-blink-webkit.html",
@@ -294568,11 +295632,11 @@
    "support"
   ],
   "FileAPI/url/sandboxed-iframe-expected.txt": [
-   "41e6cc0a0838a59acfde4d3957a266d03dda2b4f",
+   "eaee6bfed693f6784503a4f3435d7b28926dd483",
    "support"
   ],
   "FileAPI/url/sandboxed-iframe.html": [
-   "3eca08da8a43f6b7cc984dcc2adfaef9acbac53f",
+   "9a1aa9fb7af915ebc7f704e5457d522abb70a049",
    "testharness"
   ],
   "FileAPI/url/unicode-origin.sub.html": [
@@ -294812,15 +295876,15 @@
    "testharness"
   ],
   "IndexedDB/idbcursor_advance_index2.htm": [
-   "8df0af0d2335036463bae6d5e4be75e2bc8ee48e",
+   "77b812e180a6cf2f922439d99818f846b2783b4d",
    "testharness"
   ],
   "IndexedDB/idbcursor_advance_index3.htm": [
-   "ca5e0da8eaef1e0b342fafb4abec0703c01570d6",
+   "b41427f960adc57ca14a3ca2c28903eaa207b72e",
    "testharness"
   ],
   "IndexedDB/idbcursor_advance_index5.htm": [
-   "a9b9977d0e680098e46b7c69fcf65ea19d4166e6",
+   "88b4ed88919ef8635f1bebde1bfff39e577c4f0e",
    "testharness"
   ],
   "IndexedDB/idbcursor_advance_index6.htm": [
@@ -294876,11 +295940,11 @@
    "testharness"
   ],
   "IndexedDB/idbcursor_continue_index5.htm": [
-   "20db8d0d8330ca2eed4ba15934b57bde50dba8f6",
+   "101d5db81746250901a6052fea488042a0c8e2b1",
    "testharness"
   ],
   "IndexedDB/idbcursor_continue_index6.htm": [
-   "9182b02f1492b17851857bdcbca3d706de46c4f9",
+   "0040ca72137e6adbff9b90c73f857ff73b277b83",
    "testharness"
   ],
   "IndexedDB/idbcursor_continue_index7.htm": [
@@ -294892,7 +295956,7 @@
    "testharness"
   ],
   "IndexedDB/idbcursor_continue_invalid.htm": [
-   "9b4d7b70bb674f75d25c6262b3ff0efe41abf738",
+   "bd22cfecf9a98979521d8885e5536dab7723d0f1",
    "testharness"
   ],
   "IndexedDB/idbcursor_continue_objectstore.htm": [
@@ -294960,23 +296024,23 @@
    "testharness"
   ],
   "IndexedDB/idbcursor_iterating.htm": [
-   "f67265aa8556d9647e51d64c92c7bfcf4cb8edd9",
+   "b555d7447e17b1996a559928d3466c38199a5c70",
    "testharness"
   ],
   "IndexedDB/idbcursor_iterating_index.htm": [
-   "4b0fbba0937bd98bc825d2875fa73a3c20b5ef31",
+   "950fa77c9463ae944fca00ac98598711e5de1b06",
    "testharness"
   ],
   "IndexedDB/idbcursor_iterating_index2.htm": [
-   "689b891527827e22c1bf2c8d56ac5b420d8bcca6",
+   "9110a2e85b5e8e5915b97937e1b3f1823471e540",
    "testharness"
   ],
   "IndexedDB/idbcursor_iterating_objectstore.htm": [
-   "8a9dcfa107fa19f3b2ada3c727c04ba03bc00caf",
+   "4d54de8eac80ab371a8ff751d933e5673e2b0212",
    "testharness"
   ],
   "IndexedDB/idbcursor_iterating_objectstore2.htm": [
-   "992d0ea425658ee29cc429ed572eec15d8563fc0",
+   "299d4c1cd3f75a495fb31c0415d93e4d1afea6d8",
    "testharness"
   ],
   "IndexedDB/idbcursor_update_index.htm": [
@@ -295024,7 +296088,7 @@
    "testharness"
   ],
   "IndexedDB/idbcursor_update_objectstore4.htm": [
-   "cb35b103509833079e706cf0aaf81f2bcdda2f86",
+   "07209e55bb2b095d020494b9cc4e5ce5249bc075",
    "testharness"
   ],
   "IndexedDB/idbcursor_update_objectstore5.htm": [
@@ -295076,7 +296140,7 @@
    "testharness"
   ],
   "IndexedDB/idbdatabase_createObjectStore10-1000ends.htm": [
-   "747a655ecb76ed2f2ee8179e038c971ea846dfd4",
+   "dad6fd3a933f544252c88eb7b58c3cf75cddce7d",
    "testharness"
   ],
   "IndexedDB/idbdatabase_createObjectStore10-emptyname.htm": [
@@ -295108,7 +296172,7 @@
    "testharness"
   ],
   "IndexedDB/idbdatabase_createObjectStore7.htm": [
-   "9833c5336961a874c8b0dfdeda396650c1689ac5",
+   "37b4e8ede005685367c712b11052243d7196d7eb",
    "testharness"
   ],
   "IndexedDB/idbdatabase_createObjectStore8-parameters.htm": [
@@ -295132,7 +296196,7 @@
    "testharness"
   ],
   "IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm": [
-   "5332205db7ce030c8f4dc17f34e3033983c17653",
+   "cc59f9d2025d73c05f02276e902b5d3f96c70882",
    "testharness"
   ],
   "IndexedDB/idbdatabase_transaction.htm": [
@@ -295148,7 +296212,7 @@
    "testharness"
   ],
   "IndexedDB/idbdatabase_transaction4.htm": [
-   "2ba36feee7087f897a9061e605e9ba3a59906519",
+   "ca3369f7bd0d6cc5adb76aaa47a0305c620e7430",
    "testharness"
   ],
   "IndexedDB/idbdatabase_transaction5.htm": [
@@ -295208,7 +296272,7 @@
    "testharness"
   ],
   "IndexedDB/idbfactory_deleteDatabase3.htm": [
-   "7299bfb5673558ca19fa61113cdfa4796d8bed91",
+   "ebc55dd6f2849e5b35bfa7440341a5bc0a45332d",
    "testharness"
   ],
   "IndexedDB/idbfactory_deleteDatabase4.htm": [
@@ -295220,11 +296284,11 @@
    "testharness"
   ],
   "IndexedDB/idbfactory_open10.htm": [
-   "0a9a12d8dfd9ac1d2a0a24f55579e124ef1631cd",
+   "9767f268eab6e7d48154b393df9d11e2b4b93d3e",
    "testharness"
   ],
   "IndexedDB/idbfactory_open11.htm": [
-   "6a77b13b0883e3b0c98ada994f31dd1ba172ad1d",
+   "ae7f0e243ae3a3a62560e14ed7b4cab14f0f44ab",
    "testharness"
   ],
   "IndexedDB/idbfactory_open12.htm": [
@@ -295272,7 +296336,7 @@
    "testharness"
   ],
   "IndexedDB/idbindex-multientry-arraykeypath.htm": [
-   "31ae61cfc42794d014ee2ec4aad3059db28f9e6a",
+   "e99c8ad99853c8940de72500c0ca083c1fc16fda",
    "testharness"
   ],
   "IndexedDB/idbindex-multientry-big.htm": [
@@ -295280,7 +296344,7 @@
    "testharness"
   ],
   "IndexedDB/idbindex-multientry.htm": [
-   "6b5b06cf807c7cc205b08413f381441a180196ad",
+   "ff880550a49e29cf3758364a3fdd2b4f862291f9",
    "testharness"
   ],
   "IndexedDB/idbindex-objectStore-SameObject.html": [
@@ -295396,7 +296460,7 @@
    "testharness"
   ],
   "IndexedDB/idbindex_indexNames.htm": [
-   "023903f19f72dbf099ac3232e672bfaca73bf8e1",
+   "f80c4c1379032c5fe08dc4795c18d6ae4768622c",
    "testharness"
   ],
   "IndexedDB/idbindex_openCursor.htm": [
@@ -295624,27 +296688,27 @@
    "testharness"
   ],
   "IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm": [
-   "5156e61e65f89af830bff2814aec023abc695f7e",
+   "727ddd2f084acc402b37f417b703e617f2638f4a",
    "testharness"
   ],
   "IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm": [
-   "937ae58c3b3f7176a1217f80f19d54b2a3a14d7f",
+   "5d6d7b4cb5cb3ed0f8777c9841bbe9631c0d04b7",
    "testharness"
   ],
   "IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm": [
-   "14ddb924ffee36919cfcb59ca95a7fb264bc3620",
+   "f8fa9ee272b77564acfa67173366c6b989045368",
    "testharness"
   ],
   "IndexedDB/idbobjectstore_createIndex6-event_order.htm": [
-   "a636226968e5d55bd730bec47fd30d9d49746f24",
+   "302bb86c2b39306c31674bbe0dcd7b1b742dc85b",
    "testharness"
   ],
   "IndexedDB/idbobjectstore_createIndex7-event_order.htm": [
-   "8d2725a9f0e3310b003d4fad24ae33588e4b9775",
+   "b8bc9c515cb198d6dea3305e52292c1d4e7397ea",
    "testharness"
   ],
   "IndexedDB/idbobjectstore_createIndex8-valid_keys.htm": [
-   "ea90f50dde1e9d3b734328065076ab4e7a3b1d31",
+   "25841f19dac6f86325d913fe7fb7a44e8b966b6c",
    "testharness"
   ],
   "IndexedDB/idbobjectstore_createIndex9-emptyname.htm": [
@@ -295684,7 +296748,7 @@
    "testharness"
   ],
   "IndexedDB/idbobjectstore_deleted.htm": [
-   "c26145c1d5cea51197e827f8f94ed66b2bd3d023",
+   "4a5c0cca2b7d61fbbd80822dafdba4ada7d7b0d3",
    "testharness"
   ],
   "IndexedDB/idbobjectstore_get.htm": [
@@ -295832,7 +296896,7 @@
    "testharness"
   ],
   "IndexedDB/idbtransaction-oncomplete.htm": [
-   "e2cad729397ddf89bf80537e93d3bffcc6ce5ccb",
+   "647678a5fbb1ce1dbe3a5d7a28aa630dc668218f",
    "testharness"
   ],
   "IndexedDB/idbtransaction.htm": [
@@ -295840,7 +296904,7 @@
    "testharness"
   ],
   "IndexedDB/idbtransaction_abort.htm": [
-   "4300e2f01c80ee81df79b3d181ab673e3c9b130c",
+   "8f19bc7993f468836158a736a487b1813fd35c6f",
    "testharness"
   ],
   "IndexedDB/idbtransaction_objectStoreNames.html": [
@@ -295848,7 +296912,7 @@
    "testharness"
   ],
   "IndexedDB/idbversionchangeevent.htm": [
-   "e776f14c629942c7e7e527efe41d89fcb61e18df",
+   "e7ffecabd04fd553d31c896c6e82ec199c012c7f",
    "testharness"
   ],
   "IndexedDB/idbworker.js": [
@@ -295908,7 +296972,7 @@
    "testharness"
   ],
   "IndexedDB/keygenerator-constrainterror.htm": [
-   "205785f3bd739465cbbad8e657802ef015f35936",
+   "2caad10a5bc901f58194998c84348b4476601121",
    "testharness"
   ],
   "IndexedDB/keygenerator-explicit.html": [
@@ -295920,7 +296984,7 @@
    "testharness"
   ],
   "IndexedDB/keygenerator-overflow.htm": [
-   "a7bc09fc8d50c57d82f9db6663bf640a2be70d9b",
+   "67f809d78f293461b80784e0438f92e93d25d7b5",
    "testharness"
   ],
   "IndexedDB/keygenerator.htm": [
@@ -296000,7 +297064,7 @@
    "testharness"
   ],
   "IndexedDB/request_bubble-and-capture.htm": [
-   "f43fd10a34fa31c9910598dd6678c0654129cc77",
+   "21d72d75a6fa9389c05e968f3e9eebc386063e51",
    "testharness"
   ],
   "IndexedDB/string-list-ordering.htm": [
@@ -296044,7 +297108,7 @@
    "testharness"
   ],
   "IndexedDB/transaction-lifetime-blocked.htm": [
-   "a6ef34b19cb304a873b72837ff7d8a1fbda958a1",
+   "79ba82f9baf8d4865705504d417bca5b3599b8b7",
    "testharness"
   ],
   "IndexedDB/transaction-lifetime-empty.html": [
@@ -296052,15 +297116,15 @@
    "testharness"
   ],
   "IndexedDB/transaction-lifetime.htm": [
-   "9c66c54c40fc3c9ab8c2b12008bcbf630dac6d15",
+   "28836448aca6925b4860f85b52c6c0dbac0214c9",
    "testharness"
   ],
   "IndexedDB/transaction-requestqueue.htm": [
-   "081ea2e19a1b23344922a88fe1479cc5f238d8d8",
+   "9f28e81ea8a65013f4ba9a1992aaff8598418f5f",
    "testharness"
   ],
   "IndexedDB/transaction_bubble-and-capture.htm": [
-   "ff48fb48234bfe93a5254cdb48f6c6ba18b7835c",
+   "bffa9307ccf3c7738639eb243cbf2d3ae984cb5d",
    "testharness"
   ],
   "IndexedDB/upgrade-transaction-deactivation-timing.html": [
@@ -302540,11 +303604,11 @@
    "support"
   ],
   "cookies/http-state/attribute-tests.html": [
-   "1d2141d38c48d13e0f9da0937920c49f6d88a915",
+   "8cb820564f455ea545ce0124bb477a211141bc5d",
    "testharness"
   ],
   "cookies/http-state/charset-tests.html": [
-   "9d9ef1bb08790ea6fec389325bfcd4607064f98c",
+   "45470004dafb0e5741bc908879942a4ba13a1a80",
    "testharness"
   ],
   "cookies/http-state/chromium-tests-expected.txt": [
@@ -302552,11 +303616,11 @@
    "support"
   ],
   "cookies/http-state/chromium-tests.html": [
-   "d9e1d28623f5d6ef64815793dd9ecf4df23072dd",
+   "30296db431d20812c23e5c1700548450161c4412",
    "testharness"
   ],
   "cookies/http-state/comma-tests.html": [
-   "f71bb8d9610439b26339ea8dc7460ff0ceb7fb85",
+   "c36f1b3f1bb08b315add382339e9b7ac4e6fa90f",
    "testharness"
   ],
   "cookies/http-state/domain-tests-expected.txt": [
@@ -302564,7 +303628,7 @@
    "support"
   ],
   "cookies/http-state/domain-tests.html": [
-   "85c8cd00a447cbd653869af9922caf858d4b058a",
+   "8ad9a3ead878ee4cf3692409d0c3c2805d594ef6",
    "testharness"
   ],
   "cookies/http-state/general-tests-expected.txt": [
@@ -302572,7 +303636,7 @@
    "support"
   ],
   "cookies/http-state/general-tests.html": [
-   "1e63043ae1111a7a4791d28d7d1d6675f7e9fefd",
+   "c8b7ea4ecb1c1203ad23afa5a6436693d4b125f6",
    "testharness"
   ],
   "cookies/http-state/mozilla-tests-expected.txt": [
@@ -302580,7 +303644,7 @@
    "support"
   ],
   "cookies/http-state/mozilla-tests.html": [
-   "01a5645b140282dec33c67e78aa2519037b5b45c",
+   "9408f332a946b7b25d49dad169bc2c533c494455",
    "testharness"
   ],
   "cookies/http-state/name-tests-expected.txt": [
@@ -302588,7 +303652,7 @@
    "support"
   ],
   "cookies/http-state/name-tests.html": [
-   "9dd2781f2357c53c59ebdee2c5973d068ecf40e3",
+   "adc550b9bb99871aa5e118271e2ef5b7ac750667",
    "testharness"
   ],
   "cookies/http-state/ordering-tests-expected.txt": [
@@ -302596,7 +303660,7 @@
    "support"
   ],
   "cookies/http-state/ordering-tests.html": [
-   "53cfae452be37c3383501341f912946ce9e8774c",
+   "888f350178ac3cedd6555ebc2e0ab8061f1413d3",
    "testharness"
   ],
   "cookies/http-state/path-tests-expected.txt": [
@@ -302604,11 +303668,11 @@
    "support"
   ],
   "cookies/http-state/path-tests.html": [
-   "464f39becd9e6b00e7a90dc89064d160f1e8b789",
+   "b30d8362252c59b318b00669c0c542c78b429594",
    "testharness"
   ],
   "cookies/http-state/resources/all-tests.html.py-str": [
-   "37d630fef4fadf1f20289ca64d3f93dd4f5f2404",
+   "abbb4552671ce0d77a9337902ef2a59d1de3b9fb",
    "support"
   ],
   "cookies/http-state/resources/cookie-http-state-template.js": [
@@ -302620,7 +303684,7 @@
    "support"
   ],
   "cookies/http-state/resources/debugging-single-test.html.py-str": [
-   "40d9809a4bc1815b2603a117554221fa446a7782",
+   "43ada7d330c0a459af8f308cf1b18097ced62294",
    "support"
   ],
   "cookies/http-state/resources/iframe-content-pushing.js": [
@@ -304404,7 +305468,7 @@
    "support"
   ],
   "cookies/http-state/value-tests.html": [
-   "cb09034ae8500ecf54294a0f4e58ee3c26af68bb",
+   "8e4c4a32517bcd3ef844a4eb8a6704a955e622cf",
    "testharness"
   ],
   "cookies/meta-blocked.html": [
@@ -321928,7 +322992,7 @@
    "reftest"
   ],
   "css/css-backgrounds/border-image-repeat_repeatnegx_none_50px.html": [
-   "4303a11af05b88a4c6fe2f81eb3f3cf4ca2beba4",
+   "9a7c8e1cfe5eeffbe35b2a9bfd317011483ec43f",
    "testharness"
   ],
   "css/css-backgrounds/border-image-round-and-stretch.html": [
@@ -323435,6 +324499,106 @@
    "d3a4018cd809fc09eb68c1b25f4dda4736e64131",
    "reftest"
   ],
+  "css/css-break/parsing/box-decoration-break-computed.html": [
+   "86c7edba88ca35f4de5761d3379ed5bb5eae0a23",
+   "testharness"
+  ],
+  "css/css-break/parsing/box-decoration-break-invalid.html": [
+   "6ae127782016c133a49d6df20ce1360e086bfb9d",
+   "testharness"
+  ],
+  "css/css-break/parsing/box-decoration-break-valid-expected.txt": [
+   "172bdaec9a7301e657cc3e539dfaf2a0864923a8",
+   "support"
+  ],
+  "css/css-break/parsing/box-decoration-break-valid.html": [
+   "b52d44393c796ddf876118c696165164c12ea91d",
+   "testharness"
+  ],
+  "css/css-break/parsing/break-after-computed-expected.txt": [
+   "e26991ea443bd471029cab225cf88d3d61156214",
+   "support"
+  ],
+  "css/css-break/parsing/break-after-computed.html": [
+   "a62160e425a35865cc6d6d418368f1f1880ac368",
+   "testharness"
+  ],
+  "css/css-break/parsing/break-after-invalid.html": [
+   "d46131b8bce931258538a5634ec39a6ca9d92a38",
+   "testharness"
+  ],
+  "css/css-break/parsing/break-after-valid-expected.txt": [
+   "38682b8b82e6fc2386c353a329dac6e25da867ce",
+   "support"
+  ],
+  "css/css-break/parsing/break-after-valid.html": [
+   "8f7370979be3f84e344de7e75d76ec122bd9d5d0",
+   "testharness"
+  ],
+  "css/css-break/parsing/break-before-computed-expected.txt": [
+   "de032acf957e564ae149a0d4afe16f6bf6215157",
+   "support"
+  ],
+  "css/css-break/parsing/break-before-computed.html": [
+   "229ab4fd8a5ebb292395b0c3c695659944f8b9a1",
+   "testharness"
+  ],
+  "css/css-break/parsing/break-before-invalid.html": [
+   "f8ea49f2f96babbdf0b84e3806103f713a4dc177",
+   "testharness"
+  ],
+  "css/css-break/parsing/break-before-valid-expected.txt": [
+   "61b33a7deca2dcf111a69afe551d0a15fb2af6df",
+   "support"
+  ],
+  "css/css-break/parsing/break-before-valid.html": [
+   "8f38d90f807e4008b8d5e1988c602dc52fb87fbf",
+   "testharness"
+  ],
+  "css/css-break/parsing/break-inside-computed-expected.txt": [
+   "790446e827add3ffbf915051e8ef25d04205a3c5",
+   "support"
+  ],
+  "css/css-break/parsing/break-inside-computed.html": [
+   "fe36c24e07b3f59ca97a07c6d8170e7da6e5d148",
+   "testharness"
+  ],
+  "css/css-break/parsing/break-inside-invalid.html": [
+   "6cf90b76dc43c859e280805404be84feb47f5ea1",
+   "testharness"
+  ],
+  "css/css-break/parsing/break-inside-valid-expected.txt": [
+   "2818d4d7b0ce38430c434f1bd7476c5c82346ed2",
+   "support"
+  ],
+  "css/css-break/parsing/break-inside-valid.html": [
+   "49b4e5c8ec29f9a81ca55db5bceccd674f77c335",
+   "testharness"
+  ],
+  "css/css-break/parsing/orphans-computed.html": [
+   "c0438c6911f8eeb1d6b2a2db135f94479d0cc04c",
+   "testharness"
+  ],
+  "css/css-break/parsing/orphans-invalid.html": [
+   "e27fd6b29d36d848bc273673fec9b0499b81bcb9",
+   "testharness"
+  ],
+  "css/css-break/parsing/orphans-valid.html": [
+   "996b911af870d1a9dde985bde872ae1dcca0f2c0",
+   "testharness"
+  ],
+  "css/css-break/parsing/widows-computed.html": [
+   "3ef1d1d4016df44b9b43e6b0b69cf96d9d70370c",
+   "testharness"
+  ],
+  "css/css-break/parsing/widows-invalid.html": [
+   "1fa3ea7055db1c385d1acd1f23faa3bea28bb368",
+   "testharness"
+  ],
+  "css/css-break/parsing/widows-valid.html": [
+   "3930f1b4fb63af8721170c71f9632571e3f2ba67",
+   "testharness"
+  ],
   "css/css-break/reference/widows-orphans-001-ref.html": [
    "06108ac800c19c68841f2a0e8867fb05e868c1ab",
    "support"
@@ -324627,6 +325791,18 @@
    "ed2471a62614bf961cf2cd9441256ac02d3d6f6b",
    "reftest"
   ],
+  "css/css-contain/contain-layout-baseline-002.html": [
+   "9b86afa9ae9ae391fdc24b74b9cdcce39df88da1",
+   "reftest"
+  ],
+  "css/css-contain/contain-layout-baseline-003.html": [
+   "d4f8c738787c6a4f1b6e096c5dcd599604281fc9",
+   "reftest"
+  ],
+  "css/css-contain/contain-layout-baseline-004.html": [
+   "df3f5782354ea437e66341aae93100f1872ba447",
+   "reftest"
+  ],
   "css/css-contain/contain-layout-breaks-001.html": [
    "a85cf2c6c8e00f1d21fa5a63da81eff8148f3d71",
    "reftest"
@@ -324640,11 +325816,11 @@
    "reftest"
   ],
   "css/css-contain/contain-layout-cell-001.html": [
-   "fa1af0eee6848a34c61f47861c22d9efb56ab059",
+   "25ee53ba29852795c84df5dd7008757cad1f95d2",
    "reftest"
   ],
   "css/css-contain/contain-layout-cell-002.html": [
-   "331a0e6519b0af23ba91355584f0c37dfcf6a88e",
+   "8c511e3ee2c2c2337c46a4bab9cbda0af7d642cb",
    "reftest"
   ],
   "css/css-contain/contain-layout-flexbox-001.html": [
@@ -325095,6 +326271,22 @@
    "07378a29f39db8bdf100aa04c60cb23f556d962b",
    "testharness"
   ],
+  "css/css-contain/parsing/contain-computed-expected.txt": [
+   "4b2f1cf60e1f144507858ef549aa5e0d803565e5",
+   "support"
+  ],
+  "css/css-contain/parsing/contain-computed.html": [
+   "18720b74195fed58c7f3cb5d9f2edf7298f305be",
+   "testharness"
+  ],
+  "css/css-contain/parsing/contain-invalid.html": [
+   "4be918e80cd4b0c5c8bb24055ac7365b50091d4b",
+   "testharness"
+  ],
+  "css/css-contain/parsing/contain-valid.html": [
+   "0e97e8d994ed0fcf861dfc067d2481fb4ecbeb33",
+   "testharness"
+  ],
   "css/css-contain/quote-scoping-001.html": [
    "8c38e45b1ace138cbb795c77fdece555967e043d",
    "reftest"
@@ -325115,6 +326307,10 @@
    "1fdecb1c33149af52c48c105bce8ad91904bad44",
    "support"
   ],
+  "css/css-contain/reference/contain-layout-baseline-004-ref.html": [
+   "d0c7788fc18533343ee3830d96161f04ccb5d406",
+   "support"
+  ],
   "css/css-contain/reference/contain-layout-breaks-002-ref.html": [
    "c68bee1d0aa4f9201fb6e48cc25199f373128ca8",
    "support"
@@ -326196,11 +327392,11 @@
    "reftest"
   ],
   "css/css-flexbox/display_flex_exist.html": [
-   "4044da39bb0399c11c98b5749097a1fef2d8a46d",
+   "97090fbbeaff4394c015c471a213face27a43823",
    "testharness"
   ],
   "css/css-flexbox/display_inline-flex_exist.html": [
-   "cc2087e5dc7420b4dd30861bbce9efd98f93318e",
+   "fe318dae16f62b32b58bb2ad3ecba0900ee55837",
    "testharness"
   ],
   "css/css-flexbox/dynamic-bsize-change-ref.html": [
@@ -328572,7 +329768,7 @@
    "reftest"
   ],
   "css/css-flexbox/order_value.html": [
-   "ecf6a035ff1afca416e4fa798427e53b6073f929",
+   "ca9af99b939f77835933ccc76de5185b656f5977",
    "testharness"
   ],
   "css/css-flexbox/parsing/flex-basis-invalid.html": [
@@ -342495,6 +343691,126 @@
    "b087f56ac6e06d7e11d719976ae66459c97722d7",
    "reftest"
   ],
+  "css/css-multicol/parsing/column-count-computed.html": [
+   "354b953b0829467ae0da1d3d5dbff55bf0748431",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-count-invalid.html": [
+   "4d76cdd85a348e3471c5d95d3c52269bdd3fdebf",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-count-valid.html": [
+   "f1d00e75d0aa7ec466b4317035cb4589d84413be",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-fill-computed-expected.txt": [
+   "14df333dba2e4c37c2e09b40461fa0844715b0cb",
+   "support"
+  ],
+  "css/css-multicol/parsing/column-fill-computed.html": [
+   "cc39c51a3ac2c1921600e023c6cca1838289b614",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-fill-invalid.html": [
+   "f055e9958bb3507c5e1b67d8dd155c5b840183c2",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-fill-valid-expected.txt": [
+   "4388bba6f06130c35c79c487aa2da60c61fb5c29",
+   "support"
+  ],
+  "css/css-multicol/parsing/column-fill-valid.html": [
+   "ad5913d0bc0e77a8aa6e2937d5eebf47a348391a",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-gap-computed.html": [
+   "60f5cf06fd41c151a123c4da8e28da3cb5cd036d",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-gap-invalid.html": [
+   "8ec92df6c4be54f272c1bfffd8f71ad8372aca45",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-gap-valid.html": [
+   "96ae68ee08813462c0eb9cb0d33d765fad376e0d",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-rule-color-computed.html": [
+   "f04f6b6780001261bf73562aa6a5765c1fd1e1e5",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-rule-color-invalid.html": [
+   "015defb7560038b03fc4d5f18a04a1d0e094a03d",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-rule-color-valid.html": [
+   "99ad7adbdca81c9498606b8eb4a76ccea52e4bf4",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-rule-invalid.html": [
+   "e9945ec77404f4d453eda7f7e90c771f993336ca",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-rule-style-computed.html": [
+   "6a74b7b911cbb4c5463dec45e59d6950743f8925",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-rule-style-invalid.html": [
+   "db367c273f4f2e4bb59893d56388f119cb90ea40",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-rule-style-valid.html": [
+   "6f79c0a16877709e658bd7d8d84bfd1a437ffba7",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-rule-valid.html": [
+   "473d8f075cab288a4232648e7bdbe8f301ba80ac",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-rule-width-computed.html": [
+   "f4b335764f2f000e0eae6861e1c7c47987645043",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-rule-width-invalid.html": [
+   "0bdbbecb8cada68b8243566b265029ee98c55571",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-rule-width-valid.html": [
+   "1be37fc75719bff11aba26b31d74b601552e4bc9",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-span-computed.html": [
+   "7c5417b195c8fb7f33c9f2613ec52d43e7110efd",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-span-invalid.html": [
+   "c412922f0536c818280b39624c00a462251a183f",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-span-valid.html": [
+   "005b8c31b962c53a68d075b7fac8d29750b397d8",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-width-computed.html": [
+   "48dd692bc3b798fd8f0877869a283219b9fd1ab9",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-width-invalid.html": [
+   "207a78e8ccc75ebed6d6316c383800c20c97f634",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/column-width-valid.html": [
+   "e35a6ebf32721834498d649b80f4f45a8737260f",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/columns-invalid.html": [
+   "c84fb6cacef292b572dfef918fa3836b01280966",
+   "testharness"
+  ],
+  "css/css-multicol/parsing/columns-valid.html": [
+   "fff7cdd4aff0be3e18b9226ba962f3cbdac41ecf",
+   "testharness"
+  ],
   "css/css-multicol/reference/multicol-basic-005-ref.xht": [
    "a46863c62fd206df8760819412a495fa05defed8",
    "support"
@@ -343415,6 +344731,142 @@
    "d75b28c1e0aa2698fe0c73965f4e7d1f06b16547",
    "testharness"
   ],
+  "css/css-position/parsing/bottom-computed.html": [
+   "150b6d44e63a2687e0e1030f7a5913de4d7f8f96",
+   "testharness"
+  ],
+  "css/css-position/parsing/bottom-invalid.html": [
+   "6ed6fdd6d4b5331d334eda3c83412d99ca9cf1f8",
+   "testharness"
+  ],
+  "css/css-position/parsing/bottom-valid.html": [
+   "7a20bd722b1d5b90727975f277995a06c3645a18",
+   "testharness"
+  ],
+  "css/css-position/parsing/inset-after-computed.html": [
+   "1a324ed5e088b1877a67e3240aa4b6fd73a7371f",
+   "testharness"
+  ],
+  "css/css-position/parsing/inset-after-invalid.html": [
+   "3fccd7320063ffc50cd938fdf1056a998002e0be",
+   "testharness"
+  ],
+  "css/css-position/parsing/inset-after-valid-expected.txt": [
+   "bd51a0f7ccf7540823c6424273e96ccb274908dc",
+   "support"
+  ],
+  "css/css-position/parsing/inset-after-valid.html": [
+   "27734a59e69a0a9b0498c9af2932e21b8e18784e",
+   "testharness"
+  ],
+  "css/css-position/parsing/inset-before-computed.html": [
+   "3df39d4053b7bdc129c3d2cbc0c9e97570d267dc",
+   "testharness"
+  ],
+  "css/css-position/parsing/inset-before-invalid.html": [
+   "133afc23fb9aacac1b5e71a559978d69550f43ef",
+   "testharness"
+  ],
+  "css/css-position/parsing/inset-before-valid-expected.txt": [
+   "f38396deadc01f5c44865a4e904017d277525444",
+   "support"
+  ],
+  "css/css-position/parsing/inset-before-valid.html": [
+   "a802ddb1b48edade7ee1538e6061b488a56b7a54",
+   "testharness"
+  ],
+  "css/css-position/parsing/inset-end-computed.html": [
+   "5455a2bacc6a480578644890c58e5bdabc02e4a9",
+   "testharness"
+  ],
+  "css/css-position/parsing/inset-end-invalid.html": [
+   "b0e66bb7c24f6c0a5f349789c3abdfcf1c4dcd5b",
+   "testharness"
+  ],
+  "css/css-position/parsing/inset-end-valid-expected.txt": [
+   "0309ccd354def7fcd2e22072de786d6b9a3362c4",
+   "support"
+  ],
+  "css/css-position/parsing/inset-end-valid.html": [
+   "2271ae645544f6e7b83615b4c1b62246c5d199c9",
+   "testharness"
+  ],
+  "css/css-position/parsing/inset-start-computed.html": [
+   "0eea5ddb97b75dfe40307c5d656637dfa81d21b4",
+   "testharness"
+  ],
+  "css/css-position/parsing/inset-start-invalid.html": [
+   "2f7a9496ba87af211fe2734ca8f83ccef40a2a87",
+   "testharness"
+  ],
+  "css/css-position/parsing/inset-start-valid-expected.txt": [
+   "8a4eefd23f0970738d30bb464a168c9b3baccd9f",
+   "support"
+  ],
+  "css/css-position/parsing/inset-start-valid.html": [
+   "e74b205ffbc62252023bc6561c536d76879b0702",
+   "testharness"
+  ],
+  "css/css-position/parsing/left-computed.html": [
+   "fe0014660068da4f1fa884471292093456f74dcc",
+   "testharness"
+  ],
+  "css/css-position/parsing/left-invalid.html": [
+   "d4308e400d24560de46907187db98babfb94f910",
+   "testharness"
+  ],
+  "css/css-position/parsing/left-valid.html": [
+   "2d5e364aa97a5120d7ffd4a6481625dd594cd984",
+   "testharness"
+  ],
+  "css/css-position/parsing/position-computed.html": [
+   "46a6426033ef48a9c0f403c802c3a622b8d236ec",
+   "testharness"
+  ],
+  "css/css-position/parsing/position-invalid.html": [
+   "441cb036d1fcd134a019e2c4c229694366fd7950",
+   "testharness"
+  ],
+  "css/css-position/parsing/position-valid.html": [
+   "67e08bfc8b80edcd2a5822c0c70404de7909a9b4",
+   "testharness"
+  ],
+  "css/css-position/parsing/right-computed.html": [
+   "e16a9150700b423871520920e6b71c9a8411d24d",
+   "testharness"
+  ],
+  "css/css-position/parsing/right-invalid.html": [
+   "23be4a0ced42a80817271d1237dfc6b7cdc0e854",
+   "testharness"
+  ],
+  "css/css-position/parsing/right-valid.html": [
+   "5ddaa4d5f99dc4e2dde20e71125f0d91e9291038",
+   "testharness"
+  ],
+  "css/css-position/parsing/top-computed.html": [
+   "b4debb17446208858f986b1b49d37a7a312c22e4",
+   "testharness"
+  ],
+  "css/css-position/parsing/top-invalid.html": [
+   "47907fea9fb01a555c7a80076dcb82a9d5143bc9",
+   "testharness"
+  ],
+  "css/css-position/parsing/top-valid.html": [
+   "212daaf16273f2a9d040dcc9df14ed83394912a2",
+   "testharness"
+  ],
+  "css/css-position/parsing/z-index-computed.html": [
+   "594a011f3e60b64277ee7275716385aed5918ed9",
+   "testharness"
+  ],
+  "css/css-position/parsing/z-index-invalid.html": [
+   "ceb7448dd0b87b3b41c54d450b31cf86e539d455",
+   "testharness"
+  ],
+  "css/css-position/parsing/z-index-valid.html": [
+   "3d1ffa01507dfd8397d8ae6b52766dfadfebee1c",
+   "testharness"
+  ],
   "css/css-position/position-relative-table-left-ref.html": [
    "7c1193b80007d8e7f89b35400a6d2ea2266cb3ac",
    "support"
@@ -344516,43 +345968,55 @@
    "support"
   ],
   "css/css-shadow-parts/all-hosts.html": [
-   "e6646c08433972704baeb836fa27b7dece5fe915",
+   "218535dcbab541a9c277b0c9dccec7c335093c09",
    "testharness"
   ],
   "css/css-shadow-parts/chaining-invalid-selector.html": [
-   "11309329008de69399902e918b0b7671e62d5d3e",
+   "cb34a7b4609cac7162b480f26f8ff4abc373191b",
    "testharness"
   ],
   "css/css-shadow-parts/complex-matching.html": [
-   "575edabcc4589d51616221010816b44bb7f7ee12",
+   "f8f063d850fcaa8b405f25e8b8eeee93c9664941",
    "testharness"
   ],
   "css/css-shadow-parts/complex-non-matching.html": [
-   "036713faf0f693aaa9c375dac41c6767290673db",
+   "6e5bc69c5d2378d6a9a93e76e5cb84e18566737a",
    "testharness"
   ],
   "css/css-shadow-parts/different-host.html": [
-   "c8b5f86327a9df4950faa3bbbc0dca44c43b6297",
+   "7fe9744af9584c07ffff6c408574002896e8c134",
    "testharness"
   ],
   "css/css-shadow-parts/host-stylesheet.html": [
-   "ee8f4e72742b4e097321c7fa9a1ef984f130d9e6",
+   "2e65c4b1b57bd9959c68e85e11b442c67f2c5a42",
    "testharness"
   ],
   "css/css-shadow-parts/inner-host.html": [
-   "8c8cec75531f6d5f2de2f7695e3636a71e132dea",
+   "2dfd4b0510a758c73bf8ac8291088d39077578d7",
+   "testharness"
+  ],
+  "css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html": [
+   "2f9fffb86eacb088365fc592e31c58238e8321dc",
+   "testharness"
+  ],
+  "css/css-shadow-parts/invalidation-change-part-name-idl-setter.html": [
+   "52af22af7695157709836e0174655d04dcfccf94",
    "testharness"
   ],
   "css/css-shadow-parts/invalidation-change-part-name.html": [
-   "7e7a310f6b0cf2d6de93a97ffe73ae043f9c8fa1",
+   "47630d956f9bf3053ec3ed8a2d04223bdd8720a9",
    "testharness"
   ],
   "css/css-shadow-parts/invalidation-complex-selector.html": [
-   "e1f10e57dc9a2e2060af6a23223fca29d6279c9c",
+   "5b1fd800790c4e14ec8fbc34bd24eb6c2eb31ab0",
+   "testharness"
+  ],
+  "css/css-shadow-parts/part-name-idl.html": [
+   "fc3282a6e944950548eeda66a78d453ec1a552f3",
    "testharness"
   ],
   "css/css-shadow-parts/simple.html": [
-   "3733669130126221568ec7794666a6c19e54109d",
+   "a7f17d9670b137995b0dfc6f43221e16b988376d",
    "testharness"
   ],
   "css/css-shadow-parts/support/shadow-helper.js": [
@@ -350635,6 +352099,14 @@
    "6032c9bd781c3440934f008c8260f6ad639d4fd6",
    "reftest"
   ],
+  "css/css-text/text-transform/text-transform-capitalize-033-ref.html": [
+   "5af9912b28f0fb976bb93a4405800ccc2d36b959",
+   "support"
+  ],
+  "css/css-text/text-transform/text-transform-capitalize-033.html": [
+   "8bc66177f658c30e04f5b3da4f16537e28530996",
+   "reftest"
+  ],
   "css/css-text/text-transform/text-transform-full-size-kana-001.html": [
    "70584ef3893574addb04d2bb014910329c92c5c0",
    "reftest"
@@ -358092,7 +359564,7 @@
    "testharness"
   ],
   "css/css-transitions/transitions-animatable-properties-01.html": [
-   "534f81839ac875ff6b5c5c7b17784258d7a8932c",
+   "39dd073f929fa59abb52bc7b4b4644a351670ad2",
    "testharness"
   ],
   "css/css-transitions/zero-duration-multiple-transition.html": [
@@ -358855,10 +360327,6 @@
    "6a8fd7b5a42f0a5ae3e09043c195058d97ae03ea",
    "support"
   ],
-  "css/css-typed-om/the-stylepropertymap/properties/fill-opacity-expected.txt": [
-   "e3020ef8ea74f2949daabcc2128e257f677dd6f2",
-   "support"
-  ],
   "css/css-typed-om/the-stylepropertymap/properties/fill-opacity.html": [
    "0985ac64e0dad13baf3a824f413f5b306f6c8140",
    "testharness"
@@ -358915,10 +360383,6 @@
    "bb3ddc9fc9aeb948d47cf87ed20dbb123cfbfd52",
    "testharness"
   ],
-  "css/css-typed-om/the-stylepropertymap/properties/flood-opacity-expected.txt": [
-   "1057d5dfa46c6907ab87feba57948a6b106ac3ec",
-   "support"
-  ],
   "css/css-typed-om/the-stylepropertymap/properties/flood-opacity.html": [
    "15824c7103408373e304cabe15802c0257005499",
    "testharness"
@@ -359439,10 +360903,6 @@
    "83dcf0218a0cf8903ae066bb14c04032a65fa3dd",
    "testharness"
   ],
-  "css/css-typed-om/the-stylepropertymap/properties/stop-opacity-expected.txt": [
-   "ce16f2fef0a232d00b0860b8e289b86539ba17f3",
-   "support"
-  ],
   "css/css-typed-om/the-stylepropertymap/properties/stop-opacity.html": [
    "5ce713415d4197ff8875c155d5b956e150741025",
    "testharness"
@@ -359475,10 +360935,6 @@
    "2c2e01c589150450b94ee855946c329dd69dadae",
    "testharness"
   ],
-  "css/css-typed-om/the-stylepropertymap/properties/stroke-opacity-expected.txt": [
-   "2f152c1b58bd4ba5f6fdb7b7b90c866156bffd87",
-   "support"
-  ],
   "css/css-typed-om/the-stylepropertymap/properties/stroke-opacity.html": [
    "6b9e0b5a01ca58eb3bf0ff8dcd8d39a177bcf2eb",
    "testharness"
@@ -362239,6 +363695,14 @@
    "a8795599ec3cdfe71090b06e1a6ad19941dd21b1",
    "support"
   ],
+  "css/css-ui/text-overflow-ruby-ref.html": [
+   "ae5267aa9ef6ef2e5a3ddb90542b01cdffc02585",
+   "support"
+  ],
+  "css/css-ui/text-overflow-ruby.html": [
+   "c8abebb7206b57444051937c171b2884ec750403",
+   "reftest"
+  ],
   "css/css-ui/text-overflow.html": [
    "50af0313de5fd78476c92155161c5d2b35519e3f",
    "manual"
@@ -370855,6 +372319,22 @@
    "9d733495cc967bf698a7d0de766b5db02e8e5e0d",
    "testharness"
   ],
+  "css/filter-effects/parsing/flood-opacity-computed.svg": [
+   "cfbc242f33beef4d061546e016e4854e52fb24fb",
+   "testharness"
+  ],
+  "css/filter-effects/parsing/flood-opacity-invalid.svg": [
+   "ac21f8d8fbd593c266bc34bab15e94e857564f44",
+   "testharness"
+  ],
+  "css/filter-effects/parsing/flood-opacity-valid-expected.txt": [
+   "01b8a62475bdf78c1d150d89331815574cd90075",
+   "support"
+  ],
+  "css/filter-effects/parsing/flood-opacity-valid.svg": [
+   "ea7ab2a8f3c0d9a7c521bde70a86ac1be8338098",
+   "testharness"
+  ],
   "css/filter-effects/parsing/lighting-color-computed.html": [
    "8c3f6f5c5417d9b1ff582e1cd661e6b258e05869",
    "testharness"
@@ -372015,6 +373495,14 @@
    "3bda52c91db1c088cfb8a98d417d80bf1c2a2e59",
    "testharness"
   ],
+  "css/selectors/invalidation/defined.html": [
+   "064a350286885a7305fc49233856b41d1e6b3782",
+   "testharness"
+  ],
+  "css/selectors/invalidation/enabled-disabled.html": [
+   "bac3067d009e69f60fedca91de54f06438e54b3e",
+   "testharness"
+  ],
   "css/selectors/invalidation/first-child-last-child.html": [
    "4a2ed4570e83e74d1b5375a08285ef11b2bcde6a",
    "testharness"
@@ -374407,6 +375895,22 @@
    "4ec3bcee6fdf7d46f076ddf460c8081d9b19e8ee",
    "reftest"
   ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001-ref.html": [
+   "e1a478acd6937ec554f6098e729c6f710e6107f5",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001.html": [
+   "b023cfdf96d64f8c374709a992ca2343d56133db",
+   "reftest"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002-ref.html": [
+   "d4095fd987b83596f4884b77e87a759d506bda9b",
+   "support"
+  ],
+  "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002.html": [
+   "eb791427c0c8e6716122bc7957ed5c68c80be52a",
+   "reftest"
+  ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html": [
    "629cb939e01329ae1f9613876f050777b1d5b011",
    "support"
@@ -374544,15 +376048,15 @@
    "support"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html": [
-   "20272cff8ff20b4330a8fb987a31ef62a93358c0",
+   "0ed82ff8fc5b8adaeef2bfd973cd79973b8f4fa6",
    "reftest"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001-ref.html": [
-   "0cb421bae9509f28975df9eda775fe9667c8efa7",
+   "efadf9b5df49ca45f829208c03dc0feb875c74f1",
    "support"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001.html": [
-   "015d33ecc490ea82a92ef71961a644cd2650f47c",
+   "b29ef0f3848d0c4bc75b4c74d08a7f3bd5914206",
    "reftest"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001-ref.html": [
@@ -374564,7 +376068,7 @@
    "reftest"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002-ref.html": [
-   "31ca88312da778b688138e3313e4bde43ec93554",
+   "198e8e12acc247b3230460c39ce606d25e7bd119",
    "support"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002.html": [
@@ -374576,7 +376080,7 @@
    "support"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001.html": [
-   "1866dfd230b71189d9bc7d89665cd36ea917f05a",
+   "72ab97043b7b9fd20d21442c29c61492e040bbb7",
    "reftest"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-grid-001-ref.html": [
@@ -374584,7 +376088,7 @@
    "support"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-grid-001.html": [
-   "a85b0a3138def29659fee120966850905628fe43",
+   "c81fa1fa1db1e270921cb39131e419c6982fa4bd",
    "reftest"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001-ref.html": [
@@ -374620,11 +376124,11 @@
    "reftest"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003-ref.html": [
-   "07b3e5e9b6bdc7aa90b258f5cef236c39cba0b8f",
+   "af927aa268fcd21db147201bcd95f9e0d0c108be",
    "support"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003.html": [
-   "d2d13786460394396d8b1f7b98e59bfac6d0f1d5",
+   "447e3cc98dd78c4c5789c66e74e46ff37f25dd4e",
    "reftest"
   ],
   "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-table-caption-001-ref.html": [
@@ -378587,6 +380091,14 @@
    "c6eeb1dce90b2a3ffe099cba80e64d71f2741f81",
    "testharness"
   ],
+  "custom-elements/reactions/HTMLButtonElement-expected.txt": [
+   "f1de8330029fd7afc25ffa5eac30451e113a236f",
+   "support"
+  ],
+  "custom-elements/reactions/HTMLButtonElement.html": [
+   "90390108b42155b2e5fcd5984d3a43a3ad1f9f6b",
+   "testharness"
+  ],
   "custom-elements/reactions/HTMLElement-expected.txt": [
    "3445b7d68c1963c0e1d0c6e4fc938090f5ea7fe3",
    "support"
@@ -378712,7 +380224,7 @@
    "testharness"
   ],
   "custom-elements/reactions/resources/reactions.js": [
-   "43ce4fd7ad83ec4066abffa28b3581f1685d1f93",
+   "6ac7ab838d9ac82e994fc4b963815103c4e35063",
    "support"
   ],
   "custom-elements/reactions/with-exceptions-expected.txt": [
@@ -378976,7 +380488,7 @@
    "testharness"
   ],
   "dom/events/Event-timestamp-safe-resolution.html": [
-   "5009c8a4ec0760c63284160a39dbdfea8acc3b8c",
+   "24f2dec93c5ae8563206367d917411c64b051efd",
    "testharness"
   ],
   "dom/events/Event-type-empty.html": [
@@ -383424,7 +384936,7 @@
    "support"
   ],
   "encrypted-media/scripts/waiting-for-a-key.js": [
-   "fee70e24ae0313713cb19529383ca271eb3befea",
+   "fdfb855677f384472668abb5d70b55158406f256",
    "support"
   ],
   "encrypted-media/util/clearkey-messagehandler.js": [
@@ -383624,7 +385136,7 @@
    "testharness"
   ],
   "eventsource/event-data.html": [
-   "8f74a01783515052ecf2f39a7c13b7057dcc6203",
+   "3751f8e7b1cf938c3248bdeddd0f85d2cf68c6a7",
    "testharness"
   ],
   "eventsource/eventsource-close.htm": [
@@ -383744,7 +385256,7 @@
    "testharness"
   ],
   "eventsource/format-field-retry-bogus.htm": [
-   "0cdf9b4f186ef344de84bfb5be2ed0dfa012470a",
+   "56d3ff4562bc65df9643e6b697dd8c6aae0d3c90",
    "testharness"
   ],
   "eventsource/format-field-retry-empty.htm": [
@@ -383752,7 +385264,7 @@
    "testharness"
   ],
   "eventsource/format-field-retry.htm": [
-   "133794f6290f3d7092e50c2cb6ac7dd2b6b32b04",
+   "5f2fe7b433009b766b0d845472dfe22c45c927d6",
    "testharness"
   ],
   "eventsource/format-field-unknown.htm": [
@@ -384156,7 +385668,7 @@
    "support"
   ],
   "feature-policy/feature-policy-header-policy-allowed-for-some.https.sub.html": [
-   "cce2fdb1b9f7d3ef3157a7e8045562f25f5ec6e9",
+   "ade5dda4d9ddb879b007c6efef22b2757ced5743",
    "testharness"
   ],
   "feature-policy/feature-policy-header-policy-allowed-for-some.https.sub.html.sub.headers": [
@@ -384164,7 +385676,7 @@
    "support"
   ],
   "feature-policy/feature-policy-header-policy-declined.https.sub.html": [
-   "b148df17caf1aba4bd76fef508e0e338add34df8",
+   "531c919aa03536770d80f59f0c21a922040aaddb",
    "testharness"
   ],
   "feature-policy/feature-policy-header-policy-declined.https.sub.html.sub.headers": [
@@ -385639,6 +387151,34 @@
    "385ea556d7a1da0d9a0507ec3633550e4bd82060",
    "support"
   ],
+  "fetch/content-type/README.md": [
+   "3a9d1bd7266baaaaf74c29954debcd0187511ca4",
+   "support"
+  ],
+  "fetch/content-type/resources/content-type.py": [
+   "0b5e93b937c293250b33ae2cb2e5cbe43e381a86",
+   "support"
+  ],
+  "fetch/content-type/resources/content-types.json": [
+   "9578fc503cf73707488b81e027f6ab5ddf7c5983",
+   "support"
+  ],
+  "fetch/content-type/resources/script-content-types.json": [
+   "b8a843bcd82ed48966e4ceacc8f46a520877a017",
+   "support"
+  ],
+  "fetch/content-type/response.window.js": [
+   "746f51c9bb511841e1edcb25db7afa8e5efd44b1",
+   "testharness"
+  ],
+  "fetch/content-type/script.window-expected.txt": [
+   "d2ddfa3ce70059a01fe1dcc2cdc806828e6f397c",
+   "support"
+  ],
+  "fetch/content-type/script.window.js": [
+   "88584ce9c21be273745d5774a13e25bbdc2e74ab",
+   "testharness"
+  ],
   "fetch/corb/OWNERS": [
    "42d5155b66317b0067f81189e31a9168d13ca2f0",
    "support"
@@ -387068,7 +388608,7 @@
    "support"
   ],
   "geolocation-API/getCurrentPosition_IDL.https.html": [
-   "2a85505b84323539b0f0dbb06f855dffd1fc7e8c",
+   "75426fc3b99d8663243e58ab9bbf0336a02a346c",
    "testharness"
   ],
   "geolocation-API/getCurrentPosition_TypeError.html": [
@@ -387351,18 +388891,6 @@
    "4e266c09e3358034e6fac6fb282bbeb138e4278a",
    "testharness"
   ],
-  "hr-time/idlharness.any.serviceworker-expected.txt": [
-   "ae191c139243f1c35d3edc7c92871ceb02a78051",
-   "support"
-  ],
-  "hr-time/idlharness.any.sharedworker-expected.txt": [
-   "ae191c139243f1c35d3edc7c92871ceb02a78051",
-   "support"
-  ],
-  "hr-time/idlharness.any.worker-expected.txt": [
-   "ae191c139243f1c35d3edc7c92871ceb02a78051",
-   "support"
-  ],
   "hr-time/monotonic-clock.any.js": [
    "f7f254557f4296f8e69757eb9ed3ac11a05d3a33",
    "testharness"
@@ -397675,6 +399203,14 @@
    "2670b0dd8132f685e03196c424ccad018f881f33",
    "testharness"
   ],
+  "html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional-expected.txt": [
+   "4a8ba5d4149a7adf629d2247af5d727ae2332413",
+   "support"
+  ],
+  "html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html": [
+   "c009f55bfcad3efe7bb8681b048f23f757ba8e03",
+   "testharness"
+  ],
   "html/semantics/embedded-content/media-elements/ready-states/autoplay-with-slow-text-tracks.html": [
    "cf1b98c2bceafb32652da39197a4da31d7ea9694",
    "testharness"
@@ -406923,10 +408459,6 @@
    "ea7973a62e0ee9cdc874879fd844b2309e944e61",
    "testharness"
   ],
-  "infrastructure/testdriver/actions/elementPosition-expected.txt": [
-   "3233727aea105501f08df1a732c61ea46a53fae9",
-   "support"
-  ],
   "infrastructure/testdriver/actions/elementPosition.html": [
    "145852e7b51bd0cdc9e7b4ef5ebddcbf1c0235c5",
    "testharness"
@@ -407436,7 +408968,7 @@
    "support"
   ],
   "interfaces/reporting.idl": [
-   "8e88663a700cdb1cdca490048c63ea1e6023b9dc",
+   "ef20b9844699b65bc51b8a78fc7ae5ba9fd6496f",
    "support"
   ],
   "interfaces/requestidlecallback.idl": [
@@ -407456,7 +408988,7 @@
    "support"
   ],
   "interfaces/scroll-animations.idl": [
-   "bb0fde4747dffc37c15a9e1c656114ab3aa67920",
+   "21013919a5d9d8cc0181e9f9b7637d0212409681",
    "support"
   ],
   "interfaces/secure-contexts.idl": [
@@ -407496,7 +409028,7 @@
    "support"
   ],
   "interfaces/uievents.idl": [
-   "ba618d7c373bf80c108f4c02996ad0db454f1236",
+   "b00f7badb90b307c45c86e15b4213d91dcc088de",
    "support"
   ],
   "interfaces/url.idl": [
@@ -407847,6 +409379,30 @@
    "c3ff66bc0cf7877f16523d14586dec60cad88925",
    "support"
   ],
+  "loading/preloader-css-import-no-quote.tentative.html": [
+   "b83632df2c6ee4d2ddfa294c093cd6a0b56b3e53",
+   "testharness"
+  ],
+  "loading/preloader-css-import-no-semicolon.tentative.html": [
+   "827978fa41fb8136a03d49ade04226ae2dc972a6",
+   "testharness"
+  ],
+  "loading/preloader-css-import-no-space.tentative.html": [
+   "389415682ddda054d6cee5a3c990d8d247d7c342",
+   "testharness"
+  ],
+  "loading/preloader-css-import-single-quote.tentative.html": [
+   "f475dc100bd15f2daa94fbdc433eda0491069876",
+   "testharness"
+  ],
+  "loading/preloader-css-import.tentative.html": [
+   "d09daff59bca0f508ca5fd740710fc5cc8a40e5d",
+   "testharness"
+  ],
+  "loading/resources/dummy.css": [
+   "30ff5636e245c14e50145821bc5763c849c6beec",
+   "support"
+  ],
   "longtask-timing/META.yml": [
    "91c07f9fd3f3097367f2ad87a2ebb0d98b11d4e2",
    "support"
@@ -409140,7 +410696,7 @@
    "testharness"
   ],
   "mimesniff/mime-types/parsing.any-expected.txt": [
-   "9232787911ff92b548365bd19e1c9bf585953ec0",
+   "2ab64f87862b63420ce00e1ff221762c56572d17",
    "support"
   ],
   "mimesniff/mime-types/parsing.any.js": [
@@ -409148,7 +410704,7 @@
    "testharness"
   ],
   "mimesniff/mime-types/parsing.any.worker-expected.txt": [
-   "9232787911ff92b548365bd19e1c9bf585953ec0",
+   "2ab64f87862b63420ce00e1ff221762c56572d17",
    "support"
   ],
   "mimesniff/mime-types/resources/generated-mime-types.json": [
@@ -409164,7 +410720,7 @@
    "support"
   ],
   "mimesniff/mime-types/resources/mime-types.json": [
-   "64654b90d5aca0832c645e6e17bd79ee47cd9937",
+   "e3cf13d113502c81f2655e6e5d9c4ad67700c4db",
    "support"
   ],
   "mixed-content/META.yml": [
@@ -418752,7 +420308,7 @@
    "testharness"
   ],
   "orientation-event/free-fall-manual.html": [
-   "eaec7eb09cc66227e6f18e63ff594b65b46a57bd",
+   "c71f61fa696050da421e7c3311716bf63b978c71",
    "manual"
   ],
   "orientation-event/horizontal-surface-manual-expected.txt": [
@@ -418776,11 +420332,11 @@
    "testharness"
   ],
   "orientation-event/screen-upmost-manual.html": [
-   "87ad62c58633768262144ed582931b7167948605",
+   "560c3e3a1f6bde251197585843263dcd1fc8ed6d",
    "manual"
   ],
   "orientation-event/screen-upright-manual.html": [
-   "0896a3810641a3b301c4b31ba5fc5a486a7587a1",
+   "8a1b6d27da83cab9c734f78bff11985127a5e48c",
    "manual"
   ],
   "orientation-event/t001-manual.html": [
@@ -419328,7 +420884,7 @@
    "support"
   ],
   "payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html": [
-   "ec0aa96dddb46b26617064ab54e9d02e2a588cbb",
+   "feaaef66adf8a433868d33bcf722525af6c0d2ba",
    "testharness"
   ],
   "payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html": [
@@ -419451,6 +421007,14 @@
    "f08491150ac7ee6d69520a936eb2868d60393c57",
    "manual"
   ],
+  "payment-request/constructor_convert_method_data.https-expected.txt": [
+   "5f66fe453a86632ab9e6ace0e6e46d2b83eed7f7",
+   "support"
+  ],
+  "payment-request/constructor_convert_method_data.https.html": [
+   "56866b43a481e738c844537cb9c355e9638a29fa",
+   "testharness"
+  ],
   "payment-request/historical.https-expected.txt": [
    "4dbafb7749ea64069e1fef206604284ddde93505",
    "support"
@@ -419935,9 +421499,9 @@
    "0de4d55ed13ed67229cc4a6a0f77635fad815d01",
    "manual"
   ],
-  "pointerevents/pointerevent_capture_mouse-manual.html": [
-   "ee31e225722a2c9af1bfffef3b6746e12510cd2c",
-   "manual"
+  "pointerevents/pointerevent_capture_mouse.html": [
+   "d8d54db6ba302eff8e2df5c5fe13c209b3183a55",
+   "testharness"
   ],
   "pointerevents/pointerevent_capture_suppressing_mouse-manual.html": [
    "127b07a9ee0c36004e2a5c1113b01c18633672d4",
@@ -420007,17 +421571,17 @@
    "bb6dcc4236b0cc5183855275d85208db6460a5cb",
    "manual"
   ],
-  "pointerevents/pointerevent_pointermove-manual.html": [
-   "cf1a1ee4ee852e94cef7010fd2f2351e974d23b9",
-   "manual"
+  "pointerevents/pointerevent_pointermove.html": [
+   "4b168439a4ee1455e5a5960b48a0c3192e767edf",
+   "testharness"
   ],
-  "pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown-manual.html": [
-   "b43d59f4f6e822f3d03d25b17015cd50d332ed7b",
-   "manual"
+  "pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown.html": [
+   "46bfe40b69e0d3726ef522870e0b1172fa6d50eb",
+   "testharness"
   ],
-  "pointerevents/pointerevent_pointermove_on_chorded_mouse_button-manual.html": [
-   "8bade63554d69d479f7cf3ba4ca2b8b5b1b75a5d",
-   "manual"
+  "pointerevents/pointerevent_pointermove_on_chorded_mouse_button.html": [
+   "f65512832c8fa78a461562a41755e617159dc521",
+   "testharness"
   ],
   "pointerevents/pointerevent_pointerout_after_pointercancel_touch-manual.html": [
    "1888591a7c2b2d18bbfff9395845426e3a5baffb",
@@ -420047,6 +421611,14 @@
    "24fe40d5834b71247d19ce9aa0d35ceb74ca52fa",
    "manual"
   ],
+  "pointerevents/pointerevent_root_computed_style.html": [
+   "c3034d475eee8c58ed1b079fce9466925c5d0379",
+   "testharness"
+  ],
+  "pointerevents/pointerevent_root_hit_test.html": [
+   "b09dfafe69d78985545453b4207d41353362defd",
+   "testharness"
+  ],
   "pointerevents/pointerevent_sequence_at_implicit_release_on_click-manual.html": [
    "0b93c847ed216653891d00cf55b5b00e41424b50",
    "manual"
@@ -420059,9 +421631,9 @@
    "9e9646525fad99c841fee7233fd1989682fd131d",
    "manual"
   ],
-  "pointerevents/pointerevent_setpointercapture_inactive_button_mouse-manual.html": [
-   "b3e8debb7169a4307c597c1320384ab3cc51b17c",
-   "manual"
+  "pointerevents/pointerevent_setpointercapture_inactive_button_mouse.html": [
+   "7d0b00d47bc276dbba5ae3076bfbed0a912ea327",
+   "testharness"
   ],
   "pointerevents/pointerevent_setpointercapture_invalid_pointerid-manual.html": [
    "e2b143fe4a57c1585d96ec4ee29aa82ed0ae4dba",
@@ -420303,6 +421875,10 @@
    "dc2b4693cf11fe224e599b97ba8556894a9e0240",
    "testharness"
   ],
+  "preload/dynamic-adding-preload-imagesrcset.tentative.html": [
+   "be8f0afcd5bdcc7daa61fa2666220780acf37ebf",
+   "testharness"
+  ],
   "preload/dynamic-adding-preload-nonce.html": [
    "10dae6b99586450367852cf5bb006d8511cf2865",
    "testharness"
@@ -420336,11 +421912,11 @@
    "support"
   ],
   "preload/link-header-preload-srcset.tentative.html": [
-   "0a364b25a00bffcb47b0fa30c3ab0f8bfed221be",
+   "70d34e525c1feb541fefd277f1ae06a6a5888a08",
    "testharness"
   ],
   "preload/link-header-preload-srcset.tentative.html.headers": [
-   "b29f725c804c0602855badf711f453f9fa307985",
+   "1e4e9b85cac9a70ef01c994631402a5d452cad98",
    "support"
   ],
   "preload/link-header-preload.html": [
@@ -420992,7 +422568,7 @@
    "testharness"
   ],
   "referrer-policy/generic/common.js": [
-   "4a3befefc590353906b690d62ff130f3302b86eb",
+   "f9bbe42b914c46822ec8b74aacd849789723dd72",
    "support"
   ],
   "referrer-policy/generic/iframe-inheritance.html": [
@@ -421044,7 +422620,7 @@
    "support"
   ],
   "referrer-policy/generic/referrer-policy-test-case.js": [
-   "f19407157d6125642da948ebe7bd1c80c4418777",
+   "4641683cd850da86279dcd062aaf868d346aa2bd",
    "support"
   ],
   "referrer-policy/generic/sandboxed-iframe-with-opaque-origin.html": [
@@ -421111,6 +422687,10 @@
    "efa1a955d466ef14e95f62734f2a2a7841fd67ed",
    "support"
   ],
+  "referrer-policy/generic/subresource/shared-worker.py": [
+   "66b6e66c6e30294da0bec0dffdd9025ae8fba9ac",
+   "support"
+  ],
   "referrer-policy/generic/subresource/stylesheet.py": [
    "54378216774e49ba564e393b4d1f879ae2d14763",
    "support"
@@ -421151,6 +422731,10 @@
    "e2edf21819dff6afc8a4f5816a0be58f987341ff",
    "support"
   ],
+  "referrer-policy/generic/template/shared-worker.js.template": [
+   "c3f109e4a90edd65cfa26d14dbe4e4252087b37c",
+   "support"
+  ],
   "referrer-policy/generic/template/spec_json.js.template": [
    "e4cbd03425968819d773460335404584d9d375fc",
    "support"
@@ -421747,6 +423331,22 @@
    "f2152da955f3295aec2ac05adc2357ac7629cf7b",
    "support"
   ],
+  "referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html": [
+   "ab381f0c907d7ca2fa231780ff099c41286c36cc",
+   "testharness"
+  ],
+  "referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html.headers": [
+   "f2152da955f3295aec2ac05adc2357ac7629cf7b",
+   "support"
+  ],
+  "referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html": [
+   "d0b3f5affb19c6eb7978472c8ca8228011746f84",
+   "testharness"
+  ],
+  "referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html.headers": [
+   "f2152da955f3295aec2ac05adc2357ac7629cf7b",
+   "support"
+  ],
   "referrer-policy/no-referrer-when-downgrade/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html": [
    "b900876cb4ab163e8aa9c957f22d47bc8d2ef08a",
    "testharness"
@@ -422103,6 +423703,14 @@
    "134267bb13c920ca0ccf360e8311c4566082f84e",
    "testharness"
   ],
+  "referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html": [
+   "f7b4c6c37e6977624da21cb5ac59c962fe4004cd",
+   "testharness"
+  ],
+  "referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html": [
+   "dce5baf64e0a7261950ef12879e135b73125b732",
+   "testharness"
+  ],
   "referrer-policy/no-referrer-when-downgrade/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html": [
    "ff6b14d5a845795b058f6fe1b398446eedeed6cb",
    "testharness"
@@ -422723,6 +424331,22 @@
    "9b531426e5ab952b03e88b378feb5672a1e5eb4e",
    "support"
   ],
+  "referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html": [
+   "636bf3735b1cf7edd969e0b9d07501d9c827be1a",
+   "testharness"
+  ],
+  "referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html.headers": [
+   "9b531426e5ab952b03e88b378feb5672a1e5eb4e",
+   "support"
+  ],
+  "referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html": [
+   "38473b34702d43a771695c4b1ec78301b82c11cd",
+   "testharness"
+  ],
+  "referrer-policy/no-referrer/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html.headers": [
+   "9b531426e5ab952b03e88b378feb5672a1e5eb4e",
+   "support"
+  ],
   "referrer-policy/no-referrer/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html": [
    "e0d3bd0faf8ab80a11cf37f6823d68e000d913c5",
    "testharness"
@@ -423079,6 +424703,14 @@
    "954dede4acf594a3f537067e8f714da70f4a9887",
    "testharness"
   ],
+  "referrer-policy/no-referrer/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html": [
+   "d2fc88f0bf9bac5922869797ba2a40151bcdac5f",
+   "testharness"
+  ],
+  "referrer-policy/no-referrer/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html": [
+   "6da08e2e0e1e0ab911f052f33f1a0260472dbe56",
+   "testharness"
+  ],
   "referrer-policy/no-referrer/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html": [
    "b9ac0adff0d2afe568e745c864a691eb61f584bf",
    "testharness"
@@ -423751,6 +425383,22 @@
    "9ce1de38843b358434a917f1c992c99d0c7fd9fb",
    "support"
   ],
+  "referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html": [
+   "bac83829eb5306f3b6acae6e6b6766cded85e401",
+   "testharness"
+  ],
+  "referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html.headers": [
+   "9ce1de38843b358434a917f1c992c99d0c7fd9fb",
+   "support"
+  ],
+  "referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html": [
+   "b6fe7805564b889759d3463154b7b60f98bad887",
+   "testharness"
+  ],
+  "referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html.headers": [
+   "9ce1de38843b358434a917f1c992c99d0c7fd9fb",
+   "support"
+  ],
   "referrer-policy/origin-when-cross-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html": [
    "1ae15983f6cded0f6ea669d1451b0f2982503537",
    "testharness"
@@ -424275,6 +425923,14 @@
    "9be9f24e6ee59335216c47796fa5c45e33b2035a",
    "testharness"
   ],
+  "referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html": [
+   "8a7bdc29a40e52dae754495179da2ac6556f7dac",
+   "testharness"
+  ],
+  "referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html": [
+   "4618f8eb3e52289dc1d5c15a43c2559e2ca667c9",
+   "testharness"
+  ],
   "referrer-policy/origin-when-cross-origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html": [
    "3bd6428d32721941e361e3fbc00e11e67a500fcc",
    "testharness"
@@ -424979,6 +426635,22 @@
    "306a53536ac57625957da5cf4ff55e4124276617",
    "support"
   ],
+  "referrer-policy/origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html": [
+   "82ee6907051a78e79b72118508deb88820372a14",
+   "testharness"
+  ],
+  "referrer-policy/origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html.headers": [
+   "306a53536ac57625957da5cf4ff55e4124276617",
+   "support"
+  ],
+  "referrer-policy/origin/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html": [
+   "333f687308a71aa32ec84c0fe1ad081b732c3f24",
+   "testharness"
+  ],
+  "referrer-policy/origin/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html.headers": [
+   "306a53536ac57625957da5cf4ff55e4124276617",
+   "support"
+  ],
   "referrer-policy/origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html": [
    "be0f44caff62cb22853b8a008be45709b5d19560",
    "testharness"
@@ -425335,6 +427007,14 @@
    "ee9ad9993775fd3d1865dceae1930c25b02ec9eb",
    "testharness"
   ],
+  "referrer-policy/origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html": [
+   "09ccab6e19f29b97ddf967ad68824a55fb08565e",
+   "testharness"
+  ],
+  "referrer-policy/origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html": [
+   "36e0f5d34f4698d67bcd66282fa1d30895c4be4c",
+   "testharness"
+  ],
   "referrer-policy/origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html": [
    "69a8c2c1d09d37559c8447f5fe7803bb3ed135b9",
    "testharness"
@@ -425927,6 +427607,22 @@
    "309da8091a927735fec71fbd4af9acb39eb3a964",
    "support"
   ],
+  "referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html": [
+   "84f4c4707ed09329f26b5751cf508a4b7243519b",
+   "testharness"
+  ],
+  "referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html.headers": [
+   "309da8091a927735fec71fbd4af9acb39eb3a964",
+   "support"
+  ],
+  "referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html": [
+   "e7d9438c14b43d23476c35a69f5a49fe92981d8f",
+   "testharness"
+  ],
+  "referrer-policy/same-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html.headers": [
+   "309da8091a927735fec71fbd4af9acb39eb3a964",
+   "support"
+  ],
   "referrer-policy/same-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html": [
    "5f8f6c1e79275c66e419d5e01b0679a8b284d722",
    "testharness"
@@ -426195,6 +427891,14 @@
    "8eaeb5cd8de90306c8661889c227a43facb39a9c",
    "testharness"
   ],
+  "referrer-policy/same-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/same-origin-insecure.http.html": [
+   "548025dafc32a8bdeb8abd176455cb79022929d5",
+   "testharness"
+  ],
+  "referrer-policy/same-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/same-origin-insecure.http.html": [
+   "d6e828c54d516a3d331ee6a3317ef2b567117df0",
+   "testharness"
+  ],
   "referrer-policy/same-origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/same-origin-insecure.http.html": [
    "2e459e3d0592b65788e22636f383239429c1795f",
    "testharness"
@@ -426236,11 +427940,11 @@
    "testharness"
   ],
   "referrer-policy/spec.src.json": [
-   "e67b8c53a94bb227f09f19ea21f588f086e01975",
+   "f96eaf594e5c7404b654c4f378f8d80de6e6b427",
    "support"
   ],
   "referrer-policy/spec_json.js": [
-   "5377df740f757bd8ebfe3a4e893afc8edfe193a6",
+   "32a32fbc35d8579b7a34ca26b5003290ca45d882",
    "support"
   ],
   "referrer-policy/strict-origin-when-cross-origin/attr-referrer/cross-origin/http-http/a-tag/no-redirect/cross-insecure.http.html": [
@@ -426779,6 +428483,22 @@
    "d74467b0af6f7dda8bee9107a37e9c14661a9054",
    "support"
   ],
+  "referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-insecure.http.html": [
+   "ae16346f3adfaed3558324ace8420607966de5ae",
+   "testharness"
+  ],
+  "referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/same-insecure.http.html.headers": [
+   "d74467b0af6f7dda8bee9107a37e9c14661a9054",
+   "support"
+  ],
+  "referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-insecure.http.html": [
+   "118bb0a3c4543e4ddb24d4a7e20668e0dbee943f",
+   "testharness"
+  ],
+  "referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/same-insecure.http.html.headers": [
+   "d74467b0af6f7dda8bee9107a37e9c14661a9054",
+   "support"
+  ],
   "referrer-policy/strict-origin-when-cross-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/same-insecure.http.html": [
    "df71263b21b8dddb35cf19d5e8ec03a16a2f056d",
    "testharness"
@@ -427135,6 +428855,14 @@
    "882de7e13decbe2f9178a16be01d8c09c4beb67c",
    "testharness"
   ],
+  "referrer-policy/strict-origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/same-insecure.http.html": [
+   "a567c338861197fe93f9249faddc4bfb6f16efb2",
+   "testharness"
+  ],
+  "referrer-policy/strict-origin-when-cross-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/same-insecure.http.html": [
+   "ede59d3c13de50b4ca08b891a13f5085ddac4730",
+   "testharness"
+  ],
   "referrer-policy/strict-origin-when-cross-origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/same-insecure.http.html": [
    "e9b7a295ab937e2010b67367d5487a870d795db7",
    "testharness"
@@ -427755,6 +429483,22 @@
    "07af8e286fd7431890f78f10b9e8a0f4b106b5cc",
    "support"
   ],
+  "referrer-policy/strict-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html": [
+   "1be3aa77d065d6697f22fe8d6e74928f9846c79d",
+   "testharness"
+  ],
+  "referrer-policy/strict-origin/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html.headers": [
+   "07af8e286fd7431890f78f10b9e8a0f4b106b5cc",
+   "support"
+  ],
+  "referrer-policy/strict-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html": [
+   "ea834022713c137d9ef6bb52aa988333dc236332",
+   "testharness"
+  ],
+  "referrer-policy/strict-origin/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html.headers": [
+   "07af8e286fd7431890f78f10b9e8a0f4b106b5cc",
+   "support"
+  ],
   "referrer-policy/strict-origin/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html": [
    "1b30f714d08d52c368c6a8c5d92ca4a44d733759",
    "testharness"
@@ -428111,6 +429855,14 @@
    "8bf116b873f45fbdfb8d5b81c61d7c6c24a4dedd",
    "testharness"
   ],
+  "referrer-policy/strict-origin/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html": [
+   "aa874fda92229898498764e80416c4d852c791d3",
+   "testharness"
+  ],
+  "referrer-policy/strict-origin/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html": [
+   "056494df00baded9cecc24668dc3124e3e6cdbd4",
+   "testharness"
+  ],
   "referrer-policy/strict-origin/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html": [
    "7d18b730ec3fc8dcd165afe86660efda1c9faa50",
    "testharness"
@@ -428731,6 +430483,22 @@
    "c67e521584390fb6c068bcb1a814d73ed9543570",
    "support"
   ],
+  "referrer-policy/unsafe-url/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html": [
+   "53cfed58c20a08d8d1fb375b5dd45c35da96230c",
+   "testharness"
+  ],
+  "referrer-policy/unsafe-url/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html.headers": [
+   "c67e521584390fb6c068bcb1a814d73ed9543570",
+   "support"
+  ],
+  "referrer-policy/unsafe-url/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html": [
+   "4621243bb65a04bc04e4a04b0b805757adbbb7f9",
+   "testharness"
+  ],
+  "referrer-policy/unsafe-url/http-rp/same-origin/http-http/shared-worker/no-redirect/generic.http.html.headers": [
+   "c67e521584390fb6c068bcb1a814d73ed9543570",
+   "support"
+  ],
   "referrer-policy/unsafe-url/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html": [
    "7882c1319c11d2cee81787d1d9b86cbe2294d1f9",
    "testharness"
@@ -429087,6 +430855,14 @@
    "18cd15910ac434065a0595c964ac8f8bff5e9a20",
    "testharness"
   ],
+  "referrer-policy/unsafe-url/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/generic.http.html": [
+   "6fb87153b289115bc7b8769590a131daddb9c140",
+   "testharness"
+  ],
+  "referrer-policy/unsafe-url/meta-referrer/same-origin/http-http/shared-worker/no-redirect/generic.http.html": [
+   "f1f759257f6380f2ac01e202927300783bfa676e",
+   "testharness"
+  ],
   "referrer-policy/unsafe-url/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/generic.http.html": [
    "7a763d011c7544948794388d3872708a6b03dc06",
    "testharness"
@@ -429519,6 +431295,14 @@
    "e6c6432c015f5f4ab5d987bf68d7415fc5e9b3f5",
    "testharness"
   ],
+  "referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html": [
+   "f5b7e511b3622712564d0bca03dcc2131b983ffd",
+   "testharness"
+  ],
+  "referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html": [
+   "526e24ac4c9efeab0a6dbe15693a9b4827318055",
+   "testharness"
+  ],
   "referrer-policy/unset-referrer-policy/http-rp/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html": [
    "686d4feab2f2c84c8bccb587da23f8c5509c8d7c",
    "testharness"
@@ -429791,6 +431575,14 @@
    "5a66ee358306d08eda6d9ff4a089efcc7acb7fc2",
    "testharness"
   ],
+  "referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/keep-origin-redirect/insecure-protocol.http.html": [
+   "a32157dca017c4df12157a8242eaffb6db4cf5fe",
+   "testharness"
+  ],
+  "referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/shared-worker/no-redirect/insecure-protocol.http.html": [
+   "7031f36f36f85e57642249f5c84d8f9c9f9cb088",
+   "testharness"
+  ],
   "referrer-policy/unset-referrer-policy/meta-referrer/same-origin/http-http/worker-request/keep-origin-redirect/insecure-protocol.http.html": [
    "6500c7f756c0ccafba428c8c386081cf7d5b524c",
    "testharness"
@@ -429916,7 +431708,7 @@
    "support"
   ],
   "reporting/idlharness.window-expected.txt": [
-   "ced2a2ec51baa21478f6dc848947d81a8b617d96",
+   "99905f17a3c270638d312766a9cf5574dae976f5",
    "support"
   ],
   "reporting/idlharness.window.js": [
@@ -430043,6 +431835,50 @@
    "a17a3e9c1a2ffe5770a6536433c9d075ae94d252",
    "support"
   ],
+  "resource-timing/buffer-full-add-after-full-event.html": [
+   "07897b5d28dfb281463dc49dc5481d2a1de187b5",
+   "testharness"
+  ],
+  "resource-timing/buffer-full-add-entries-during-callback-that-drop.html": [
+   "d61d2af05c6730c57703e7ba9482067689e78fbb",
+   "testharness"
+  ],
+  "resource-timing/buffer-full-add-entries-during-callback.html": [
+   "b37c47b23fb5026480683594b964ee712abbe708",
+   "testharness"
+  ],
+  "resource-timing/buffer-full-add-then-clear.html": [
+   "710852ced55f716a348cc9e6865d7a8b7048a46a",
+   "testharness"
+  ],
+  "resource-timing/buffer-full-decrease-buffer-during-callback.html": [
+   "e6de33ded1b73345a763692a1bac9138c8f208de",
+   "testharness"
+  ],
+  "resource-timing/buffer-full-increase-buffer-during-callback.html": [
+   "b46d2d65690a886837b8ea7621f3926081552d97",
+   "testharness"
+  ],
+  "resource-timing/buffer-full-inspect-buffer-during-callback.html": [
+   "d46d4692a55b9cbef1aa5f882f38887e1f7940e9",
+   "testharness"
+  ],
+  "resource-timing/buffer-full-set-to-current-buffer.html": [
+   "1e5486ec2cdfc442876ba1f5b2c524985e70e5b5",
+   "testharness"
+  ],
+  "resource-timing/buffer-full-store-and-clear-during-callback.html": [
+   "f0791cba6b39fb4b7e1af09077772f1ee3b42744",
+   "testharness"
+  ],
+  "resource-timing/buffer-full-then-increased.html": [
+   "2265077fc15a277c3352da215fa5ac8a276c60aa",
+   "testharness"
+  ],
+  "resource-timing/buffer-full-when-populate-entries.html": [
+   "00d2ae0e4426f4644f70e921751fffc327de46d6",
+   "testharness"
+  ],
   "resource-timing/clear_resource_timing_functionality.html": [
    "eaf21b483ccd6ec63bcb8dc87c9e19a4305bf43d",
    "testharness"
@@ -430160,7 +431996,7 @@
    "testharness"
   ],
   "resource-timing/resource_timing.worker.js": [
-   "92687f0f7b62b92e414d0e8a900faac570735c9d",
+   "dafd2e9af602ed535acc84fb7088b70a23c64608",
    "testharness"
   ],
   "resource-timing/resource_timing_TAO_cross_origin_redirect.html": [
@@ -430171,14 +432007,6 @@
    "ce745237c0657c7045b00d9c7b8e71770ed490fc",
    "testharness"
   ],
-  "resource-timing/resource_timing_buffer_full_when_populate_entries.html": [
-   "3e62b199a32b1cb7ff5eafc7fc690b379409b660",
-   "testharness"
-  ],
-  "resource-timing/resource_timing_buffer_full_when_shrink_buffer_size-expected.txt": [
-   "b24e19055988c995d7f76e003ccce71ff197700d",
-   "support"
-  ],
   "resource-timing/resource_timing_buffer_full_when_shrink_buffer_size.html": [
    "e42c19d05e081ec3673606b4f0d686f0e69e65d8",
    "testharness"
@@ -430195,14 +432023,6 @@
    "d9fbf944f6c65b7a247b4764ee39e6aa33bc465d",
    "testharness"
   ],
-  "resource-timing/resource_timing_store_and_clear_during_callback-expected.txt": [
-   "3a2148c54d7964d1b80d7d7c0c156e1d68f90ca0",
-   "support"
-  ],
-  "resource-timing/resource_timing_store_and_clear_during_callback.html": [
-   "218fc0c2bcd5f987c2aee511bb66fd338476215f",
-   "testharness"
-  ],
   "resource-timing/resources/TAOResponse.py": [
    "fefc75b7b7fc68872b36f56bcb0fa59dd41d2918",
    "support"
@@ -430219,6 +432039,10 @@
    "820f8cace2143bfc45c0c301e84b6c29b8630068",
    "support"
   ],
+  "resource-timing/resources/buffer-full-utilities.js": [
+   "b143da7b325f0ad24a2f9ad67db7ba31d0aa912c",
+   "support"
+  ],
   "resource-timing/resources/empty.js": [
    "3b44754e301ded90e559f6343df641e476803542",
    "support"
@@ -430540,7 +432364,7 @@
    "support"
   ],
   "resources/testdriver-actions.js": [
-   "ddec3c44af093a800542a12e8cffc26dbd6af15b",
+   "43d8b1df00ae4c2f36114f58695a5314dbd41d60",
    "support"
   ],
   "resources/testdriver-vendor.js.headers": [
@@ -430548,7 +432372,7 @@
    "support"
   ],
   "resources/testdriver.js": [
-   "e0741e8d61d4d67c99ccbfc860f65e796c44c78a",
+   "ea380dbd3c32def105c1483230e91e9c7e979b27",
    "support"
   ],
   "resources/testdriver.js.headers": [
@@ -433768,7 +435592,7 @@
    "support"
   ],
   "service-workers/service-worker/resources/performance-timeline-worker.js": [
-   "a752b436524e628959e35c9de73e15ccc7dd783f",
+   "cac327c34bf9df184913c561b584b038f3504c94",
    "support"
   ],
   "service-workers/service-worker/resources/postmessage-blob-url.js": [
@@ -435084,7 +436908,7 @@
    "support"
   ],
   "signed-exchange/resources/generate-test-sxgs.sh": [
-   "355272922479a896ac91a9a3247e816218d4a41e",
+   "6336ba3f797386a81ecc8168f9d5e98ea798152b",
    "support"
   ],
   "signed-exchange/resources/inner-url.html": [
@@ -435099,6 +436923,14 @@
    "ab188e54e05ba06476ee3ebad276bd411474a0b8",
    "support"
   ],
+  "signed-exchange/resources/sxg-head-request.sxg": [
+   "9d09647481c18a0cf8c77af198b2eff15c950b96",
+   "support"
+  ],
+  "signed-exchange/resources/sxg-head-request.sxg.headers": [
+   "ab188e54e05ba06476ee3ebad276bd411474a0b8",
+   "support"
+  ],
   "signed-exchange/resources/sxg-invalid-validity-url.sxg": [
    "3266e7e7040e878b2371c412d12a84b232f58860",
    "support"
@@ -435131,6 +436963,10 @@
    "6d9c9c552325c197ae3354d180ab439872b0c118",
    "testharness"
   ],
+  "signed-exchange/sxg-head-request.tentative.html": [
+   "83b427b6cf19bff8e8c482a3cba7a899dcbe6e73",
+   "testharness"
+  ],
   "signed-exchange/sxg-invalid-validity-url.tentative.html": [
    "7264e48b8b7a508213c2e7290a274d318ad29872",
    "testharness"
@@ -435267,6 +437103,14 @@
    "090f004b8514bc9c99e8f85f9e8f9073dff2a263",
    "testharness"
   ],
+  "storage/estimate-usage-details-indexeddb.https.tentative.any.js": [
+   "c854d5b8848638d11563a48348e7c3393ff58459",
+   "testharness"
+  ],
+  "storage/helpers.js": [
+   "fbc746a30b6dfa6d00fc2db747c78ec09a7beefc",
+   "support"
+  ],
   "storage/idlharness.https.any.js": [
    "0ce4d5a0c8fccf07f6908a7a9ac9ac5ab5df6624",
    "testharness"
@@ -435327,10 +437171,6 @@
    "00cba3cdc6cdd786da95de184e635a749eb40199",
    "testharness"
   ],
-  "streams/piping/abort-expected.txt": [
-   "9be5a3523a6e6762fc88e1df2842a7eed0a5dd99",
-   "support"
-  ],
   "streams/piping/abort.any-expected.txt": [
    "9be5a3523a6e6762fc88e1df2842a7eed0a5dd99",
    "support"
@@ -435351,18 +437191,6 @@
    "9be5a3523a6e6762fc88e1df2842a7eed0a5dd99",
    "support"
   ],
-  "streams/piping/abort.dedicatedworker-expected.txt": [
-   "9be5a3523a6e6762fc88e1df2842a7eed0a5dd99",
-   "support"
-  ],
-  "streams/piping/abort.serviceworker.https-expected.txt": [
-   "ae06f6c99e7b19965f8c0f9661e4017170ef0c9a",
-   "support"
-  ],
-  "streams/piping/abort.sharedworker-expected.txt": [
-   "9be5a3523a6e6762fc88e1df2842a7eed0a5dd99",
-   "support"
-  ],
   "streams/piping/close-propagation-backward.any.js": [
    "90f6412641f7e74fd2dbe1b31a614f0fe49dba6d",
    "testharness"
@@ -435391,40 +437219,24 @@
    "cd7cd5aa5cf7cd8807a2bdad4a4ac520ca98a68b",
    "testharness"
   ],
-  "streams/piping/pipe-through-expected.txt": [
-   "2ab7aeb3229f8612d31b1162633960e75c3b88a1",
-   "support"
-  ],
   "streams/piping/pipe-through.any-expected.txt": [
-   "2ab7aeb3229f8612d31b1162633960e75c3b88a1",
+   "3b3c021f4e79825ec48907f4622b97f4f9d70a57",
    "support"
   ],
   "streams/piping/pipe-through.any.js": [
-   "c259513b2b362c6b70b363701a7e5077891f8e5d",
+   "2b896f515180556c7f0862868fdd6f970c54b9cf",
    "testharness"
   ],
   "streams/piping/pipe-through.any.serviceworker-expected.txt": [
-   "2ab7aeb3229f8612d31b1162633960e75c3b88a1",
+   "3b3c021f4e79825ec48907f4622b97f4f9d70a57",
    "support"
   ],
   "streams/piping/pipe-through.any.sharedworker-expected.txt": [
-   "2ab7aeb3229f8612d31b1162633960e75c3b88a1",
+   "3b3c021f4e79825ec48907f4622b97f4f9d70a57",
    "support"
   ],
   "streams/piping/pipe-through.any.worker-expected.txt": [
-   "2ab7aeb3229f8612d31b1162633960e75c3b88a1",
-   "support"
-  ],
-  "streams/piping/pipe-through.dedicatedworker-expected.txt": [
-   "2ab7aeb3229f8612d31b1162633960e75c3b88a1",
-   "support"
-  ],
-  "streams/piping/pipe-through.serviceworker.https-expected.txt": [
-   "872e065e5a7496dbf18bb7167b9084f48b0ebccc",
-   "support"
-  ],
-  "streams/piping/pipe-through.sharedworker-expected.txt": [
-   "2ab7aeb3229f8612d31b1162633960e75c3b88a1",
+   "3b3c021f4e79825ec48907f4622b97f4f9d70a57",
    "support"
   ],
   "streams/piping/then-interception.any.js": [
@@ -435435,10 +437247,6 @@
    "8cb342920a48f7675afb68c87761c6817020715c",
    "testharness"
   ],
-  "streams/readable-byte-streams/brand-checks-expected.txt": [
-   "6a71eee5e76abc5e919d5d7be8f5a4f54d11665d",
-   "support"
-  ],
   "streams/readable-byte-streams/brand-checks.any-expected.txt": [
    "6a71eee5e76abc5e919d5d7be8f5a4f54d11665d",
    "support"
@@ -435459,22 +437267,6 @@
    "6a71eee5e76abc5e919d5d7be8f5a4f54d11665d",
    "support"
   ],
-  "streams/readable-byte-streams/brand-checks.dedicatedworker-expected.txt": [
-   "6a71eee5e76abc5e919d5d7be8f5a4f54d11665d",
-   "support"
-  ],
-  "streams/readable-byte-streams/brand-checks.serviceworker.https-expected.txt": [
-   "5bb50fd962897608a49b4c9fecc542ff5be77afa",
-   "support"
-  ],
-  "streams/readable-byte-streams/brand-checks.sharedworker-expected.txt": [
-   "6a71eee5e76abc5e919d5d7be8f5a4f54d11665d",
-   "support"
-  ],
-  "streams/readable-byte-streams/construct-byob-request-expected.txt": [
-   "1bb3c16f4ae8c0e12901704ee316137bf4ace45a",
-   "support"
-  ],
   "streams/readable-byte-streams/construct-byob-request.any-expected.txt": [
    "c640a4fbd293b00c538aad36bacbe2bef7e00550",
    "support"
@@ -435495,22 +437287,6 @@
    "c640a4fbd293b00c538aad36bacbe2bef7e00550",
    "support"
   ],
-  "streams/readable-byte-streams/construct-byob-request.dedicatedworker-expected.txt": [
-   "c640a4fbd293b00c538aad36bacbe2bef7e00550",
-   "support"
-  ],
-  "streams/readable-byte-streams/construct-byob-request.serviceworker.https-expected.txt": [
-   "a92ddfd79e595c8dbe25a85515cf738da8f451e8",
-   "support"
-  ],
-  "streams/readable-byte-streams/construct-byob-request.sharedworker-expected.txt": [
-   "c640a4fbd293b00c538aad36bacbe2bef7e00550",
-   "support"
-  ],
-  "streams/readable-byte-streams/constructor-expected.txt": [
-   "30c626c457cb672266c6a7c9f42b7fed607a231c",
-   "support"
-  ],
   "streams/readable-byte-streams/constructor.any-expected.txt": [
    "30c626c457cb672266c6a7c9f42b7fed607a231c",
    "support"
@@ -435531,22 +437307,6 @@
    "30c626c457cb672266c6a7c9f42b7fed607a231c",
    "support"
   ],
-  "streams/readable-byte-streams/constructor.dedicatedworker-expected.txt": [
-   "30c626c457cb672266c6a7c9f42b7fed607a231c",
-   "support"
-  ],
-  "streams/readable-byte-streams/constructor.serviceworker.https-expected.txt": [
-   "75ef00fd900bb370e048f47b52b022dd3e43741d",
-   "support"
-  ],
-  "streams/readable-byte-streams/constructor.sharedworker-expected.txt": [
-   "30c626c457cb672266c6a7c9f42b7fed607a231c",
-   "support"
-  ],
-  "streams/readable-byte-streams/detached-buffers-expected.txt": [
-   "6a3e32b47785d530c0ca984c89b2b46283b2f8cc",
-   "support"
-  ],
   "streams/readable-byte-streams/detached-buffers.any-expected.txt": [
    "6a3e32b47785d530c0ca984c89b2b46283b2f8cc",
    "support"
@@ -435567,22 +437327,6 @@
    "6a3e32b47785d530c0ca984c89b2b46283b2f8cc",
    "support"
   ],
-  "streams/readable-byte-streams/detached-buffers.dedicatedworker-expected.txt": [
-   "6a3e32b47785d530c0ca984c89b2b46283b2f8cc",
-   "support"
-  ],
-  "streams/readable-byte-streams/detached-buffers.serviceworker.https-expected.txt": [
-   "3307db6d9055739461ef5d78d56ab8142c8e6986",
-   "support"
-  ],
-  "streams/readable-byte-streams/detached-buffers.sharedworker-expected.txt": [
-   "6a3e32b47785d530c0ca984c89b2b46283b2f8cc",
-   "support"
-  ],
-  "streams/readable-byte-streams/general-expected.txt": [
-   "3644dc004fa47db958411e161dad89cda64237cb",
-   "support"
-  ],
   "streams/readable-byte-streams/general.any-expected.txt": [
    "3644dc004fa47db958411e161dad89cda64237cb",
    "support"
@@ -435603,22 +437347,6 @@
    "3644dc004fa47db958411e161dad89cda64237cb",
    "support"
   ],
-  "streams/readable-byte-streams/general.dedicatedworker-expected.txt": [
-   "3644dc004fa47db958411e161dad89cda64237cb",
-   "support"
-  ],
-  "streams/readable-byte-streams/general.serviceworker.https-expected.txt": [
-   "de4f914e08af83499efbf0267a726a87d155a884",
-   "support"
-  ],
-  "streams/readable-byte-streams/general.sharedworker-expected.txt": [
-   "3644dc004fa47db958411e161dad89cda64237cb",
-   "support"
-  ],
-  "streams/readable-byte-streams/properties-expected.txt": [
-   "83c737bef4a9018ba1b6298fe7eb0e3c3dc38119",
-   "support"
-  ],
   "streams/readable-byte-streams/properties.any-expected.txt": [
    "83c737bef4a9018ba1b6298fe7eb0e3c3dc38119",
    "support"
@@ -435639,18 +437367,6 @@
    "83c737bef4a9018ba1b6298fe7eb0e3c3dc38119",
    "support"
   ],
-  "streams/readable-byte-streams/properties.dedicatedworker-expected.txt": [
-   "83c737bef4a9018ba1b6298fe7eb0e3c3dc38119",
-   "support"
-  ],
-  "streams/readable-byte-streams/properties.serviceworker.https-expected.txt": [
-   "abf808a890ebc9d99a6993d8c89a4262bce07029",
-   "support"
-  ],
-  "streams/readable-byte-streams/properties.sharedworker-expected.txt": [
-   "83c737bef4a9018ba1b6298fe7eb0e3c3dc38119",
-   "support"
-  ],
   "streams/readable-streams/bad-strategies.any.js": [
    "9582b29c81117c0e78b27a745a237677fdb15634",
    "testharness"
@@ -435687,40 +437403,24 @@
    "c3353acfba1842e5a95f5568362fc21b68a37916",
    "testharness"
   ],
-  "streams/readable-streams/general-expected.txt": [
-   "4b5d005cbcd0d5d940e85b21cc0dc555127603e6",
-   "support"
-  ],
   "streams/readable-streams/general.any-expected.txt": [
-   "4b5d005cbcd0d5d940e85b21cc0dc555127603e6",
+   "6cc846a00e4c8154673595e380cb90416e9c0dd2",
    "support"
   ],
   "streams/readable-streams/general.any.js": [
-   "21b1812ea3f135422e154f0065da90b665b8d479",
+   "5e8a4af76c4671984484a9f5775de29cbc2935af",
    "testharness"
   ],
   "streams/readable-streams/general.any.serviceworker-expected.txt": [
-   "4b5d005cbcd0d5d940e85b21cc0dc555127603e6",
+   "6cc846a00e4c8154673595e380cb90416e9c0dd2",
    "support"
   ],
   "streams/readable-streams/general.any.sharedworker-expected.txt": [
-   "4b5d005cbcd0d5d940e85b21cc0dc555127603e6",
+   "6cc846a00e4c8154673595e380cb90416e9c0dd2",
    "support"
   ],
   "streams/readable-streams/general.any.worker-expected.txt": [
-   "4b5d005cbcd0d5d940e85b21cc0dc555127603e6",
-   "support"
-  ],
-  "streams/readable-streams/general.dedicatedworker-expected.txt": [
-   "4b5d005cbcd0d5d940e85b21cc0dc555127603e6",
-   "support"
-  ],
-  "streams/readable-streams/general.serviceworker.https-expected.txt": [
-   "084a1bec11036f1c910bc7e8d3a72b4817f18e4a",
-   "support"
-  ],
-  "streams/readable-streams/general.sharedworker-expected.txt": [
-   "4b5d005cbcd0d5d940e85b21cc0dc555127603e6",
+   "6cc846a00e4c8154673595e380cb90416e9c0dd2",
    "support"
   ],
   "streams/readable-streams/patched-global.any.js": [
@@ -435780,7 +437480,7 @@
    "testharness"
   ],
   "streams/transform-streams/general.any.js": [
-   "533797b9d1ad3a2971b719cf9b672587ad6c1bc6",
+   "0b012a91a90f3adce8d3a5702fedd942b132a91c",
    "testharness"
   ],
   "streams/transform-streams/lipfuzz.any.js": [
@@ -435848,13 +437548,29 @@
    "testharness"
   ],
   "streams/writable-streams/general.any.js": [
-   "ddf616ef867226df68154e9dfe1f2deb3243be54",
+   "6ddae1f8a3e9dda92224d08344d5c5ffb1ae3dbc",
    "testharness"
   ],
+  "streams/writable-streams/properties.any-expected.txt": [
+   "3628bffe0d657c9dfeb41d38e91179b85206acbd",
+   "support"
+  ],
   "streams/writable-streams/properties.any.js": [
    "fe798a7d8f4045e72541d8434b52203361906f23",
    "testharness"
   ],
+  "streams/writable-streams/properties.any.serviceworker-expected.txt": [
+   "3628bffe0d657c9dfeb41d38e91179b85206acbd",
+   "support"
+  ],
+  "streams/writable-streams/properties.any.sharedworker-expected.txt": [
+   "3628bffe0d657c9dfeb41d38e91179b85206acbd",
+   "support"
+  ],
+  "streams/writable-streams/properties.any.worker-expected.txt": [
+   "3628bffe0d657c9dfeb41d38e91179b85206acbd",
+   "support"
+  ],
   "streams/writable-streams/reentrant-strategy.any.js": [
    "c8c59370a76dd4a58a7d5149520fe1bf0a954d56",
    "testharness"
@@ -436423,6 +438139,10 @@
    "1feb867c3ab9e83f96e0566b53c75aa3dccb0653",
    "testharness"
   ],
+  "svg/painting/parsing/fill-opacity-computed.svg": [
+   "aa24d3efe8130053ae174a343c074743805794c0",
+   "testharness"
+  ],
   "svg/painting/parsing/fill-opacity-invalid.svg": [
    "86726c6ad088a52e7f80f19cb11c9ab04571764f",
    "testharness"
@@ -436551,6 +438271,10 @@
    "36fd81d29cdf22ca8be540f7d58ac9d4273b1177",
    "testharness"
   ],
+  "svg/painting/parsing/stroke-opacity-computed.svg": [
+   "58cb144935a378e25644c40bc5b372799a88e792",
+   "testharness"
+  ],
   "svg/painting/parsing/stroke-opacity-invalid.svg": [
    "af1a954b47491b53fb84881da0dd40e0b40b047d",
    "testharness"
@@ -436735,6 +438459,22 @@
    "297f8ede687a28a12ced98a4b89051dd9ddf5090",
    "testharness"
   ],
+  "svg/pservers/parsing/stop-opacity-computed.svg": [
+   "cb0f8295ce4777a91c26c66995a2b11c5d03b43c",
+   "testharness"
+  ],
+  "svg/pservers/parsing/stop-opacity-invalid.svg": [
+   "eae9343d1472c215dc237f1dbd1c8e15bc50708b",
+   "testharness"
+  ],
+  "svg/pservers/parsing/stop-opacity-valid-expected.txt": [
+   "b8e8d535f06ade29aec919ff70bfc97838112d1d",
+   "support"
+  ],
+  "svg/pservers/parsing/stop-opacity-valid.svg": [
+   "73516f62c15232a2a0409e3ca75684bff3fc92d7",
+   "testharness"
+  ],
   "svg/pservers/reftests/meshgradient-basic-001-ref.png": [
    "691bff6244cd0abe046536efc0a100329b62d407",
    "support"
@@ -437999,9 +439739,9 @@
    "f36fadb697b0f0338ae12535b55809c45e3644bb",
    "manual"
   ],
-  "uievents/mouse/mouse_buttons_back_forward-manual.html": [
-   "aa4e944b95cb2e0932ffa042c3f47ec1ccaf4653",
-   "manual"
+  "uievents/mouse/mouse_buttons_back_forward.html": [
+   "787abac44472960844b5b3eda3955134f17240a8",
+   "testharness"
   ],
   "uievents/mouse/mouseevent_move_button-manual.html": [
    "ff5eaba6983baff64ebd9afc7465b0c8e2ac151f",
@@ -441684,11 +443424,11 @@
    "support"
   ],
   "webrtc-quic/RTCQuicStream-helper.js": [
-   "a87668f5a21eebd64f810029330989c5be10f037",
+   "9563e53d84240ce51e7219b712d6d6fede3cb1ce",
    "support"
   ],
   "webrtc-quic/RTCQuicStream.https.html": [
-   "08c3a54a950830573761950b76bb420067de86b6",
+   "1e242985630fb812db73bfe4b69cc90fc150934f",
    "testharness"
   ],
   "webrtc-quic/RTCQuicTransport-helper.js": [
@@ -441780,7 +443520,7 @@
    "support"
   ],
   "webrtc/RTCDTMFSender-insertDTMF.https.html": [
-   "8a6d6456f3a9e000a898906cccdccc76102c4e59",
+   "8ac144bab9286fbaa560272ae9c1ca7965090532",
    "testharness"
   ],
   "webrtc/RTCDTMFSender-ontonechange-long.https.html": [
@@ -442024,7 +443764,7 @@
    "support"
   ],
   "webrtc/RTCPeerConnection-removeTrack.https.html": [
-   "c98dbdbd8f3fa0501131a9a59ddc8982d340ebae",
+   "a955db6895ad1727f1c13a3b8e1ee5f1e8c7c37c",
    "testharness"
   ],
   "webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt": [
@@ -442116,7 +443856,7 @@
    "support"
   ],
   "webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html": [
-   "c9d2d1282c7b2190f80506becebc48e32b3dc009",
+   "aa3f93e235e3408bba55548de226e76327ce40f5",
    "testharness"
   ],
   "webrtc/RTCPeerConnection-setRemoteDescription.html": [
@@ -442128,7 +443868,7 @@
    "support"
   ],
   "webrtc/RTCPeerConnection-track-stats.https.html": [
-   "3809530b74cac30b9f66398eaa59a97af0f81736",
+   "9ad679272b57e4d77ed4d2ceea3c1283e2e0eacd",
    "testharness"
   ],
   "webrtc/RTCPeerConnection-transceivers.https-expected.txt": [
@@ -442228,7 +443968,7 @@
    "support"
   ],
   "webrtc/RTCRtpReceiver-getStats.https.html": [
-   "05ca9f3c90b652a4c46a0395bf2ad1a6eb44e15f",
+   "7cd598393708b501e0b3dbd49d31eda8230dae88",
    "testharness"
   ],
   "webrtc/RTCRtpReceiver-getSynchronizationSources.https-expected.txt": [
@@ -442424,11 +444164,11 @@
    "support"
   ],
   "webrtc/simplecall-no-ssrcs.https.html": [
-   "877791052824d9d5bf6b9718a4f4adc1d98c8742",
+   "d79f6af3d69aca0fc653a3e821eab4019eeda198",
    "testharness"
   ],
   "webrtc/simplecall.https.html": [
-   "681c42d4cd855dcf53543a7add231d2665c381a9",
+   "291437a526582d13db6e04fa39c152ce9ed5859a",
    "testharness"
   ],
   "webrtc/tools/README.md": [
@@ -448840,7 +450580,7 @@
    "support"
   ],
   "xhr/abort-during-upload.htm": [
-   "9fbc8b9bbb473fa3b605759516e8e0493ce5e098",
+   "9732791d953c6e497df6627d86e4a1ee179cb6a3",
    "testharness"
   ],
   "xhr/abort-event-abort.htm": [
@@ -449444,7 +451184,7 @@
    "testharness"
   ],
   "xhr/overridemimetype-blob-expected.txt": [
-   "e180f4a0b2fa3514337e1615008e64da427215f2",
+   "8a5fe9320b7556c9686d8f29a29d3d0f433ac8f3",
    "support"
   ],
   "xhr/overridemimetype-blob.html": [
@@ -450228,7 +451968,7 @@
    "testharness"
   ],
   "xhr/send-redirect-bogus.htm": [
-   "a46fc1d339e485fb03d4a2d866a61d71a3f9e0bd",
+   "ad50b56f4a0c59f46edd51fc74d15af11c211187",
    "testharness"
   ],
   "xhr/send-redirect-infinite-sync.htm": [
@@ -450396,7 +452136,7 @@
    "testharness"
   ],
   "xhr/timeout-cors-async.htm": [
-   "35e2a30ba2f51aaa6b3ba21603869db156decd5b",
+   "74397ba8c406ee19d3c250e518f4d1a54101a0f3",
    "testharness"
   ],
   "xhr/timeout-multiple-fetches.html": [
diff --git a/third_party/blink/web_tests/external/wpt/FileAPI/url/sandboxed-iframe-expected.txt b/third_party/blink/web_tests/external/wpt/FileAPI/url/sandboxed-iframe-expected.txt
index 41e6cc0..eaee6bf 100644
--- a/third_party/blink/web_tests/external/wpt/FileAPI/url/sandboxed-iframe-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/FileAPI/url/sandboxed-iframe-expected.txt
@@ -5,6 +5,9 @@
 PASS Origin of Blob URL matches our origin
 PASS Blob URL parses correctly
 PASS Origin of Blob URL matches our origin for Files
+PASS Blob URLs can be used in <script> tags
+FAIL Blob URLs can be used in iframes, and are treated same origin Blocked a frame with origin "null" from accessing a cross-origin frame.
+FAIL Blob URL fragment is implemented. Blocked a frame with origin "null" from accessing a cross-origin frame.
 PASS Blob URLs can be used in XHR
 PASS XHR with a fragment should succeed
 PASS XHR of a revoked URL should fail
diff --git a/third_party/blink/web_tests/external/wpt/FileAPI/url/sandboxed-iframe.html b/third_party/blink/web_tests/external/wpt/FileAPI/url/sandboxed-iframe.html
index 3eca08da..9a1aa9f 100644
--- a/third_party/blink/web_tests/external/wpt/FileAPI/url/sandboxed-iframe.html
+++ b/third_party/blink/web_tests/external/wpt/FileAPI/url/sandboxed-iframe.html
@@ -11,9 +11,9 @@
 const iframe_scripts = [
   'resources/fetch-tests.js',
   'url-format.any.js',
+  'url-in-tags.window.js',
   'url-with-xhr.any.js',
   'url-with-fetch.any.js',
-  'url-with-tags.window.js',
 ];
 
 let html = '<!doctype html>\n<meta charset="utf-8">\n<body>\n';
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_advance_index2.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_advance_index2.htm
index 8df0af0..77b812e1 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_advance_index2.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_advance_index2.htm
@@ -10,7 +10,7 @@
 <script>
 
     var db,
-      t = async_test(document.title),
+      t = async_test(),
       records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" },
                   { pKey: "primaryKey_1", iKey: "indexKey_1" } ];
 
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_advance_index3.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_advance_index3.htm
index ca5e0da..b41427f 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_advance_index3.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_advance_index3.htm
@@ -10,7 +10,7 @@
 <script type="text/javascript">
 
     var db,
-      t = async_test(document.title),
+      t = async_test(),
       records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" },
                   { pKey: "primaryKey_1", iKey: "indexKey_1" } ];
 
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_advance_index5.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_advance_index5.htm
index a9b9977..88b4ed88 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_advance_index5.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_advance_index5.htm
@@ -11,7 +11,7 @@
 <script>
     var db,
       count = 0,
-      t = async_test(document.title),
+      t = async_test(),
       records = [ { pKey: "primaryKey_0",   iKey: "indexKey_0" },
                   { pKey: "primaryKey_1",   iKey: "indexKey_1" },
                   { pKey: "primaryKey_1-2", iKey: "indexKey_1" } ],
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_continue_index5.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_continue_index5.htm
index 20db8d0..101d5db 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_continue_index5.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_continue_index5.htm
@@ -11,7 +11,7 @@
 <script>
 
     var db,
-      t = async_test(document.title),
+      t = async_test(),
       records = [ { pKey: "primaryKey_0",   iKey: "indexKey_0" },
                   { pKey: "primaryKey_1",   iKey: "indexKey_1" },
                   { pKey: "primaryKey_1-2", iKey: "indexKey_1" },
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_continue_index6.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_continue_index6.htm
index 9182b02..0040ca7 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_continue_index6.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_continue_index6.htm
@@ -11,7 +11,7 @@
 <script>
 
     var db,
-      t = async_test(document.title),
+      t = async_test(),
       records = [ { pKey: "primaryKey_0",   iKey: "indexKey_0" },
                   { pKey: "primaryKey_1",   iKey: "indexKey_1" },
                   { pKey: "primaryKey_1-2", iKey: "indexKey_1" },
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_continue_invalid.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_continue_invalid.htm
index 9b4d7b7..bd22cfec 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_continue_invalid.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_continue_invalid.htm
@@ -8,7 +8,7 @@
 <script>
 
     var db,
-      t = async_test(document.title);
+      t = async_test();
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating.htm
index f67265a..b555d744 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating.htm
@@ -8,7 +8,7 @@
 <script>
     var db,
       count = 0,
-      t = async_test(document.title);
+      t = async_test();
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_index.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_index.htm
index 4b0fbba..950fa77c 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_index.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_index.htm
@@ -8,7 +8,7 @@
 <script>
     var db,
       count = 0,
-      t = async_test(document.title),
+      t = async_test(),
       records = [ { pKey: "primaryKey_0", obj: { iKey: "iKey_0" }},
                   { pKey: "primaryKey_1", obj: { iKey: "iKey_1" }},
                   { pKey: "primaryKey_2", obj: { iKey: "iKey_2" }} ],
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_index2.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_index2.htm
index 689b8915..9110a2e 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_index2.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_index2.htm
@@ -8,7 +8,7 @@
 <script>
     var db,
       count = 0,
-      t = async_test(document.title),
+      t = async_test(),
       records = [ { pKey: "primaryKey_0", obj: { iKey: "iKey_0" }},
                   { pKey: "primaryKey_2", obj: { iKey: "iKey_2" }} ],
 
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_objectstore.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_objectstore.htm
index 8a9dcfa1..4d54de8 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_objectstore.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_objectstore.htm
@@ -8,7 +8,7 @@
 <script>
     var db,
       count = 0,
-      t = async_test(document.title),
+      t = async_test(),
       records = [ { pKey: "primaryKey_0" },
                   { pKey: "primaryKey_1" },
                   { pKey: "primaryKey_2" } ],
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_objectstore2.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_objectstore2.htm
index 992d0ea4..299d4c1 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_objectstore2.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_iterating_objectstore2.htm
@@ -8,7 +8,7 @@
 <script>
     var db,
       count = 0,
-      t = async_test(document.title),
+      t = async_test(),
       records = [ { pKey: "primaryKey_0" },
                   { pKey: "primaryKey_2" } ],
       expected_records = [ { pKey: "primaryKey_0" },
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_update_objectstore4.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_update_objectstore4.htm
index cb35b10..07209e55 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_update_objectstore4.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbcursor_update_objectstore4.htm
@@ -8,7 +8,7 @@
 <script>
 
     var db,
-      t = async_test(document.title)
+      t = async_test()
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_createObjectStore10-1000ends.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_createObjectStore10-1000ends.htm
index 747a655..dad6fd3 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_createObjectStore10-1000ends.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_createObjectStore10-1000ends.htm
@@ -7,7 +7,7 @@
 
 <script>
 var db,
-    t = async_test(document.title),
+    t = async_test(),
     open_rq = createdb(t)
 
 open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_createObjectStore7.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_createObjectStore7.htm
index 9833c53..37b4e8ed 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_createObjectStore7.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_createObjectStore7.htm
@@ -7,7 +7,7 @@
 
 <script>
 
-var t = async_test(document.title),
+var t = async_test(),
     open_rq = createdb(t)
 
 open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm
index 5332205d..cc59f9d 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm
@@ -8,7 +8,7 @@
 
 <script>
 
-var t = async_test(document.title),
+var t = async_test(),
     keys = [],
     open_rq = createdb(t)
 
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_transaction4.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_transaction4.htm
index 2ba36fee..ca3369f 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_transaction4.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbdatabase_transaction4.htm
@@ -7,7 +7,7 @@
 
 <script>
     var db,
-      t = async_test(document.title),
+      t = async_test(),
       open_rq = createdb(t);
 
     open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbfactory_deleteDatabase3.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbfactory_deleteDatabase3.htm
index 7299bfb..ebc55dd 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbfactory_deleteDatabase3.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbfactory_deleteDatabase3.htm
@@ -9,7 +9,7 @@
 
 <script>
     var db
-    var open_rq = createdb(async_test(document.title), undefined, 9)
+    var open_rq = createdb(async_test(), undefined, 9)
 
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbfactory_open10.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbfactory_open10.htm
index 0a9a12d..9767f26 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbfactory_open10.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbfactory_open10.htm
@@ -7,7 +7,7 @@
 
 <script>
     var db, db2;
-    var open_rq = createdb(async_test(document.title), undefined, 9);
+    var open_rq = createdb(async_test(), undefined, 9);
 
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbfactory_open11.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbfactory_open11.htm
index 6a77b13..ae7f0e2 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbfactory_open11.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbfactory_open11.htm
@@ -8,7 +8,7 @@
 <script>
     var db;
     var count_done = 0;
-    var open_rq = createdb(async_test(document.title));
+    var open_rq = createdb(async_test());
 
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbindex-multientry-arraykeypath.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbindex-multientry-arraykeypath.htm
index 31ae61cf..e99c8ad 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbindex-multientry-arraykeypath.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbindex-multientry-arraykeypath.htm
@@ -9,7 +9,7 @@
 <script src="support.js"></script>
 
 <script>
-    createdb(async_test(document.title)).onupgradeneeded = function(e) {
+    createdb(async_test()).onupgradeneeded = function(e) {
         var store = e.target.result.createObjectStore("store");
 
         assert_throws('InvalidAccessError', function() {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbindex-multientry.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbindex-multientry.htm
index 6b5b06cf..ff880550 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbindex-multientry.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbindex-multientry.htm
@@ -12,7 +12,7 @@
     var db,
         expected_keys = [1, 2, 2, 3, 3];
 
-    var open_rq = createdb(async_test(document.title))
+    var open_rq = createdb(async_test())
 
     open_rq.onupgradeneeded = function(e) {
         db = e.target.result;
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbindex_indexNames.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbindex_indexNames.htm
index 023903f19..f80c4c13 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbindex_indexNames.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbindex_indexNames.htm
@@ -8,7 +8,7 @@
 
 <script>
     var db,
-      t = async_test(document.title);
+      t = async_test();
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm
index 5156e61..727ddd2 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm
@@ -9,7 +9,7 @@
 
 <script>
     var db, aborted,
-      t = async_test(document.title)
+      t = async_test()
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm
index 937ae58c..5d6d7b4c 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm
@@ -9,7 +9,7 @@
 <script>
     var db,
       events = [],
-      t = async_test(document.title)
+      t = async_test()
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm
index 14ddb92..f8fa9ee 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm
@@ -8,7 +8,7 @@
 
 <script>
     var db, aborted,
-      t = async_test(document.title)
+      t = async_test()
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex6-event_order.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex6-event_order.htm
index a6362269..302bb86 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex6-event_order.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex6-event_order.htm
@@ -16,7 +16,7 @@
 
     var db,
       events = [],
-      t = async_test(document.title)
+      t = async_test()
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex7-event_order.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex7-event_order.htm
index 8d2725a..b8bc9c5 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex7-event_order.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex7-event_order.htm
@@ -18,7 +18,7 @@
 
     var db,
       events = [],
-      t = async_test(document.title)
+      t = async_test()
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex8-valid_keys.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex8-valid_keys.htm
index ea90f50d..25841f1 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex8-valid_keys.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_createIndex8-valid_keys.htm
@@ -9,7 +9,7 @@
 
 <script>
     var db,
-      t = async_test(document.title),
+      t = async_test(),
       now = new Date(),
       mar18 = new Date(1111111111111),
       ar = ["Yay", 2, -Infinity],
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_deleted.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_deleted.htm
index c26145c..4a5c0cc 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_deleted.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbobjectstore_deleted.htm
@@ -11,7 +11,7 @@
 <script>
     var db,
       add_success = false,
-      t = async_test(document.title)
+      t = async_test()
 
     var open_rq = createdb(t);
     open_rq.onupgradeneeded = function(e) {
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbtransaction-oncomplete.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbtransaction-oncomplete.htm
index e2cad72..647678a 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbtransaction-oncomplete.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbtransaction-oncomplete.htm
@@ -7,7 +7,7 @@
 
 <script>
     var db, store,
-      t = async_test(document.title),
+      t = async_test(),
       open_rq = createdb(t),
       stages = [];
 
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbtransaction_abort.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbtransaction_abort.htm
index 4300e2f..8f19bc7 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbtransaction_abort.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbtransaction_abort.htm
@@ -8,7 +8,7 @@
 
 <script>
     var db, aborted,
-      t = async_test(document.title),
+      t = async_test(),
       record = { indexedProperty: "bar" };
 
     var open_rq = createdb(t);
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/idbversionchangeevent.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/idbversionchangeevent.htm
index e776f14c..e7ffecab 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/idbversionchangeevent.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/idbversionchangeevent.htm
@@ -13,7 +13,7 @@
 <script>
 
     var db,
-        t = async_test(document.title);
+        t = async_test();
 
     t.step(function() {
         var openrq = indexedDB.open('db', 3);
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/keygenerator-constrainterror.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/keygenerator-constrainterror.htm
index 205785f..2caad10 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/keygenerator-constrainterror.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/keygenerator-constrainterror.htm
@@ -9,7 +9,7 @@
 <script>
 
     var db,
-      t = async_test(document.title),
+      t = async_test(),
       objects = [1, null, {id: 2}, null, 2.00001, 5, null, {id: 6} ],
       expected = [1, 2, 2.00001, 3, 5, 6],
       errors = 0;
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/keygenerator-overflow.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/keygenerator-overflow.htm
index a7bc09f..67f809d7 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/keygenerator-overflow.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/keygenerator-overflow.htm
@@ -11,7 +11,7 @@
 <script>
 
     var db,
-      t = async_test(document.title),
+      t = async_test(),
       overflow_error_fired = false,
       objects =  [9007199254740991, null, "error", 2, "error" ],
       expected_keys = [2, 9007199254740991, 9007199254740992];
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/request_bubble-and-capture.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/request_bubble-and-capture.htm
index f43fd10..21d72d7 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/request_bubble-and-capture.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/request_bubble-and-capture.htm
@@ -9,7 +9,7 @@
 <script>
     var events = [];
 
-    var open_rq = createdb(async_test(document.title));
+    var open_rq = createdb(async_test());
     open_rq.onupgradeneeded = function(e) {
         var db = e.target.result;
         var txn = e.target.transaction;
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/transaction-lifetime-blocked.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/transaction-lifetime-blocked.htm
index a6ef34b..79ba82f 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/transaction-lifetime-blocked.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/transaction-lifetime-blocked.htm
@@ -11,7 +11,7 @@
 
     var db, db_got_versionchange, db2,
         events = [],
-        t = async_test(document.title);
+        t = async_test();
 
     t.step(function() {
         var openrq = indexedDB.open('db', 3);
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/transaction-lifetime.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/transaction-lifetime.htm
index 9c66c54..2883644 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/transaction-lifetime.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/transaction-lifetime.htm
@@ -11,7 +11,7 @@
 
     var db, db_got_versionchange, db2,
         events = [],
-        t = async_test(document.title);
+        t = async_test();
 
     t.step(function() {
         var openrq = indexedDB.open('db', 3);
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/transaction-requestqueue.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/transaction-requestqueue.htm
index 081ea2e..9f28e81e 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/transaction-requestqueue.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/transaction-requestqueue.htm
@@ -8,7 +8,7 @@
 
 <script>
 
-var db, t = async_test(document.title),
+var db, t = async_test(),
     keys = { txn: [], txn2: [] },
     open_rq = createdb(t)
 
diff --git a/third_party/blink/web_tests/external/wpt/IndexedDB/transaction_bubble-and-capture.htm b/third_party/blink/web_tests/external/wpt/IndexedDB/transaction_bubble-and-capture.htm
index ff48fb4..bffa930 100644
--- a/third_party/blink/web_tests/external/wpt/IndexedDB/transaction_bubble-and-capture.htm
+++ b/third_party/blink/web_tests/external/wpt/IndexedDB/transaction_bubble-and-capture.htm
@@ -9,7 +9,7 @@
 <script>
     var events = [];
 
-    var open_rq = createdb(async_test(document.title));
+    var open_rq = createdb(async_test());
     open_rq.onupgradeneeded = function(e) {
         var db = e.target.result;
         var txn = e.target.transaction;
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/inheritance/iframe-srcdoc-inheritance.html b/third_party/blink/web_tests/external/wpt/content-security-policy/inheritance/iframe-srcdoc-inheritance.html
new file mode 100644
index 0000000..e051507
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/content-security-policy/inheritance/iframe-srcdoc-inheritance.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<head>
+  <meta http-equiv="Content-Security-Policy" content="img-src 'self'">
+  <script src="/resources/testharness.js"></script>
+  <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+  <script>
+    var t1 = async_test("First image should be blocked");
+    var t2 = async_test("Second image should be blocked");
+    window.onmessage = t1.step_func_done(function(e) {
+      if (e.data == "img blocked") {
+        frames[0].frames[0].frameElement.srcdoc =
+        `<script>
+           window.addEventListener('securitypolicyviolation', function(e) {
+             if (e.violatedDirective == 'img-src') {
+               top.postMessage('img blocked', '*');
+             }
+           })
+         </scr` + `ipt>
+         <img src='/content-security-policy/support/fail.png'
+              onload='top.postMessage("img loaded", "*")'/>`;
+        window.onmessage = t2.step_func_done(function(e) {
+          if (e.data != "img blocked")
+            assert_true(false, "The second image should have been blocked");
+        });
+      } else {
+        assert_true(false, "The first image should have been blocked");
+      }
+    });
+  </script>
+  <iframe src="support/srcdoc-child-frame.html"></iframe>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/inheritance/support/srcdoc-child-frame.html b/third_party/blink/web_tests/external/wpt/content-security-policy/inheritance/support/srcdoc-child-frame.html
new file mode 100644
index 0000000..9148be2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/content-security-policy/inheritance/support/srcdoc-child-frame.html
@@ -0,0 +1,19 @@
+<head>
+  <meta http-equiv="Content-Security-Policy" content="img-src 'none'">
+</head>
+<body>
+  <script>
+    var i = document.createElement('iframe');
+    i.srcdoc=`<script>
+                window.addEventListener('securitypolicyviolation', function(e) {
+                  if (e.violatedDirective == 'img-src') {
+                    top.postMessage('img blocked', '*');
+                  }
+                })
+              </scr` + `ipt>
+              <img src='/content-security-policy/support/fail.png'
+                onload='top.postMessage("img loaded", "*")'/>`;
+    i.id = "srcdoc-frame";
+    document.body.appendChild(i);
+  </script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/navigation/support/frame-with-csp.sub.html b/third_party/blink/web_tests/external/wpt/content-security-policy/navigation/support/frame-with-csp.sub.html
new file mode 100644
index 0000000..b4d5b82
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/content-security-policy/navigation/support/frame-with-csp.sub.html
@@ -0,0 +1,2 @@
+<meta http-equiv="Content-Security-Policy" content="{{GET[csp]}}">
+CHILD FRAME
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/navigation/to-javascript-parent-initiated-child-csp.html b/third_party/blink/web_tests/external/wpt/content-security-policy/navigation/to-javascript-parent-initiated-child-csp.html
new file mode 100644
index 0000000..d2289257
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/content-security-policy/navigation/to-javascript-parent-initiated-child-csp.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<head>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<iframe src="support/frame-with-csp.sub.html?csp=script-src%20%27self%27"></iframe>
+<div onclick="frames[0].location.href = 'javascript:parent.postMessage(\'executed\', \'*\')'" id="special_div"></div>
+<script>
+  var t = async_test("Should have executed the javascript url");
+  window.onmessage = t.step_func(function(e) {
+    if (e.data == "executed")
+      t.done();
+  });
+  window.addEventListener('securitypolicyviolation', t.unreached_func("Should not have raised a violation event"));
+  document.getElementById('special_div').click();
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/navigation/to-javascript-parent-initiated-parent-csp.html b/third_party/blink/web_tests/external/wpt/content-security-policy/navigation/to-javascript-parent-initiated-parent-csp.html
new file mode 100644
index 0000000..4cbb37e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/content-security-policy/navigation/to-javascript-parent-initiated-parent-csp.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<head>
+<meta http-equiv="content-security-policy" content="script-src 'self' 'nonce-abc'">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<iframe src="support/frame-with-csp.sub.html"></iframe>
+<div onclick="frames[0].location.href = 'javascript:parent.postMessage(\'executed\', \'*\')'" id="special_div"></div>
+<script nonce='abc'>
+  var t = async_test("Should not have executed the javascript url");
+  window.onmessage = t.step_func(function(e) {
+    if (e.data == "executed")
+      assert_true(false, "Javascript url executed");
+  });
+  window.addEventListener('securitypolicyviolation', t.step_func_done(function(e) {
+    assert_equals(e.blockedURI, 'inline');
+    assert_equals(e.violatedDirective, 'script-src-attr');
+  }));
+  document.getElementById('special_div').click();
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/attribute-tests.html b/third_party/blink/web_tests/external/wpt/cookies/http-state/attribute-tests.html
index 1d2141d..8cb82056 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/attribute-tests.html
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/attribute-tests.html
@@ -52,8 +52,7 @@
       for (const i in TEST_CASES) {
         const t = TEST_CASES[i];
         promise_test(createCookieTest(t.file),
-                     t.file + " - " + t.name,
-                     { timeout: 3000 });
+                     t.file + " - " + t.name);
       }
 
     </script>
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/charset-tests.html b/third_party/blink/web_tests/external/wpt/cookies/http-state/charset-tests.html
index 9d9ef1b..45470004 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/charset-tests.html
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/charset-tests.html
@@ -30,8 +30,7 @@
       for (const i in TEST_CASES) {
         const t = TEST_CASES[i];
         promise_test(createCookieTest(t.file),
-                     t.file + " - " + t.name,
-                     { timeout: 3000 });
+                     t.file + " - " + t.name);
       }
 
     </script>
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/chromium-tests.html b/third_party/blink/web_tests/external/wpt/cookies/http-state/chromium-tests.html
index d9e1d286..30296db 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/chromium-tests.html
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/chromium-tests.html
@@ -48,8 +48,7 @@
       for (const i in TEST_CASES) {
         const t = TEST_CASES[i];
         promise_test(createCookieTest(t.file),
-                     t.file + " - " + t.name,
-                     { timeout: 3000 });
+                     t.file + " - " + t.name);
       }
 
     </script>
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/comma-tests.html b/third_party/blink/web_tests/external/wpt/cookies/http-state/comma-tests.html
index f71bb8d..c36f1b3f 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/comma-tests.html
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/comma-tests.html
@@ -33,8 +33,7 @@
       for (const i in TEST_CASES) {
         const t = TEST_CASES[i];
         promise_test(createCookieTest(t.file),
-                     t.file + " - " + t.name,
-                     { timeout: 3000 });
+                     t.file + " - " + t.name);
       }
 
     </script>
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/domain-tests.html b/third_party/blink/web_tests/external/wpt/cookies/http-state/domain-tests.html
index 85c8cd0..8ad9a3e 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/domain-tests.html
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/domain-tests.html
@@ -70,8 +70,7 @@
       for (const i in TEST_CASES) {
         const t = TEST_CASES[i];
         promise_test(createCookieTest(t.file),
-                     t.file + " - " + t.name,
-                     { timeout: 3000 });
+                     t.file + " - " + t.name);
       }
 
     </script>
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/general-tests.html b/third_party/blink/web_tests/external/wpt/cookies/http-state/general-tests.html
index 1e63043a..c8b7ea4 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/general-tests.html
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/general-tests.html
@@ -56,8 +56,7 @@
       for (const i in TEST_CASES) {
         const t = TEST_CASES[i];
         promise_test(createCookieTest(t.file),
-                     t.file + " - " + t.name,
-                     { timeout: 3000 });
+                     t.file + " - " + t.name);
       }
 
     </script>
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/mozilla-tests.html b/third_party/blink/web_tests/external/wpt/cookies/http-state/mozilla-tests.html
index 01a5645b..9408f332 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/mozilla-tests.html
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/mozilla-tests.html
@@ -43,8 +43,7 @@
       for (const i in TEST_CASES) {
         const t = TEST_CASES[i];
         promise_test(createCookieTest(t.file),
-                     t.file + " - " + t.name,
-                     { timeout: 3000 });
+                     t.file + " - " + t.name);
       }
 
     </script>
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/name-tests.html b/third_party/blink/web_tests/external/wpt/cookies/http-state/name-tests.html
index 9dd2781f..adc550b 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/name-tests.html
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/name-tests.html
@@ -59,8 +59,7 @@
       for (const i in TEST_CASES) {
         const t = TEST_CASES[i];
         promise_test(createCookieTest(t.file),
-                     t.file + " - " + t.name,
-                     { timeout: 3000 });
+                     t.file + " - " + t.name);
       }
 
     </script>
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/ordering-tests.html b/third_party/blink/web_tests/external/wpt/cookies/http-state/ordering-tests.html
index 53cfae45..888f350 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/ordering-tests.html
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/ordering-tests.html
@@ -27,8 +27,7 @@
       for (const i in TEST_CASES) {
         const t = TEST_CASES[i];
         promise_test(createCookieTest(t.file),
-                     t.file + " - " + t.name,
-                     { timeout: 3000 });
+                     t.file + " - " + t.name);
       }
 
     </script>
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/path-tests.html b/third_party/blink/web_tests/external/wpt/cookies/http-state/path-tests.html
index 464f39be..b30d8362 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/path-tests.html
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/path-tests.html
@@ -59,8 +59,7 @@
       for (const i in TEST_CASES) {
         const t = TEST_CASES[i];
         promise_test(createCookieTest(t.file),
-                     t.file + " - " + t.name,
-                     { timeout: 3000 });
+                     t.file + " - " + t.name);
       }
 
     </script>
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/all-tests.html.py-str b/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/all-tests.html.py-str
index 37d630f..abbb455 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/all-tests.html.py-str
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/all-tests.html.py-str
@@ -69,8 +69,7 @@
       for (const i in TEST_CASES) {
         const t = TEST_CASES[i];
         promise_test(createCookieTest(t.file),
-                     t.file + " - " + t.name,
-                     { timeout: 3000 });
+                     t.file + " - " + t.name);
       }
 
 
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/debugging-single-test.html.py-str b/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/debugging-single-test.html.py-str
index 40d9809..43ada7d33 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/debugging-single-test.html.py-str
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/resources/debugging-single-test.html.py-str
@@ -24,7 +24,7 @@
     <script>
       setup({ explicit_timeout: true });
 
-      promise_test(createCookieTest("%s"), "DEBUG", { timeout: 3000 });
+      promise_test(createCookieTest("%s"), "DEBUG");
 
     </script>
   </body>
diff --git a/third_party/blink/web_tests/external/wpt/cookies/http-state/value-tests.html b/third_party/blink/web_tests/external/wpt/cookies/http-state/value-tests.html
index cb09034..8e4c4a32 100644
--- a/third_party/blink/web_tests/external/wpt/cookies/http-state/value-tests.html
+++ b/third_party/blink/web_tests/external/wpt/cookies/http-state/value-tests.html
@@ -32,8 +32,7 @@
       for (const i in TEST_CASES) {
         const t = TEST_CASES[i];
         promise_test(createCookieTest(t.file),
-                     t.file + " - " + t.name,
-                     { timeout: 3000 });
+                     t.file + " - " + t.name);
       }
 
     </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/border-image-repeat_repeatnegx_none_50px.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/border-image-repeat_repeatnegx_none_50px.html
index 4303a11a..9a7c8e1 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/border-image-repeat_repeatnegx_none_50px.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/border-image-repeat_repeatnegx_none_50px.html
@@ -22,7 +22,7 @@
     <div id="test"></div>
     <script type="text/javascript">
         var div = document.querySelector("#test");
-        var t = async_test(document.title);
+        var t = async_test();
         t.step(function () {
             div.style[headProp("border-image-repeat")] = "repeat-x";
             div.style[headProp("height")] = "200px";
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/display_flex_exist.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/display_flex_exist.html
index 4044da39..97090fbb 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/display_flex_exist.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/display_flex_exist.html
@@ -18,7 +18,7 @@
     <div id=log></div>
     <div id=test></div>
     <script type="text/javascript">
-        var t = async_test(document.title);
+        var t = async_test();
         t.step(function () {
             assert_equals(window.getComputedStyle(document.querySelector('div#test')).display, "flex", "Display value is");
         });
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/display_inline-flex_exist.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/display_inline-flex_exist.html
index cc2087e5..fe318da 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/display_inline-flex_exist.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/display_inline-flex_exist.html
@@ -18,7 +18,7 @@
     <div id=log></div>
     <div id=test></div>
     <script type="text/javascript">
-        var t = async_test(document.title);
+        var t = async_test();
         t.step(function () {
             assert_equals(window.getComputedStyle(document.querySelector('div#test')).display, "inline-flex", "Display value is");
         });
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/order_value.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/order_value.html
index ecf6a035..ca9af99 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/order_value.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/order_value.html
@@ -24,7 +24,7 @@
     <div id=log></div>
     <div id=test><div id=test01>1</div><div id=test02>2</div><div id=test03>3</div></div>
     <script type="text/javascript">
-        var t = async_test(document.title);
+        var t = async_test();
         t.step(function () {
             assert_equals(document.getElementById("test01").offsetTop, document.getElementById("test02").offsetTop, "Rectangle 1 and 2 have the same offsetTop value");
             assert_equals((document.getElementById("test02").offsetLeft >= document.getElementById("test01").offsetLeft), false, "Rectangle 2 have a smaller offsetLeft value than 1.");
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-count-computed.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-count-computed.html
new file mode 100644
index 0000000..354b953
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-count-computed.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: getComputedValue().columnCount</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-count">
+<meta name="assert" content="column-count computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value("column-count", "auto");
+
+test_computed_value("column-count", "1");
+test_computed_value("column-count", "234");
+test_computed_value("column-count", "calc(1 + 234)", "235");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-count-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-count-invalid.html
new file mode 100644
index 0000000..4d76cdd8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-count-invalid.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-count with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-count">
+<meta name="assert" content="column-count supports only the grammar 'auto | <integer>'.">
+<meta name="assert" content="column-count rejects non-positive integers.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("column-count", "none");
+test_invalid_value("column-count", "2.5");
+test_invalid_value("column-count", "-1");
+test_invalid_value("column-count", "0");
+
+test_invalid_value("column-count", "auto 1");
+test_invalid_value("column-count", "1 234");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-count-valid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-count-valid.html
new file mode 100644
index 0000000..f1d00e7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-count-valid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-count with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-count">
+<meta name="assert" content="column-count supports the full grammar 'auto | <integer>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("column-count", "auto");
+
+test_valid_value("column-count", "1");
+test_valid_value("column-count", "234");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-computed-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-computed-expected.txt
new file mode 100644
index 0000000..14df333d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-computed-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+PASS Property column-fill value 'auto' computes to 'auto'
+PASS Property column-fill value 'balance' computes to 'balance'
+FAIL Property column-fill value 'balance-all' computes to 'balance-all' assert_equals: expected "balance-all" but got "balance"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-computed.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-computed.html
new file mode 100644
index 0000000..cc39c51
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-computed.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: getComputedValue().columnFill</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-fill">
+<meta name="assert" content="column-fill computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value("column-fill", "auto");
+test_computed_value("column-fill", "balance");
+test_computed_value("column-fill", "balance-all");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-invalid.html
new file mode 100644
index 0000000..f055e99
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-fill with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-fill">
+<meta name="assert" content="column-fill supports only the grammar 'auto | balance | balance-all'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("column-fill", "none");
+test_invalid_value("column-fill", "auto balance");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-valid-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-valid-expected.txt
new file mode 100644
index 0000000..4388bba
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-valid-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+PASS e.style['column-fill'] = "auto" should set the property value
+PASS e.style['column-fill'] = "balance" should set the property value
+FAIL e.style['column-fill'] = "balance-all" should set the property value assert_not_equals: property should be set got disallowed value ""
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-valid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-valid.html
new file mode 100644
index 0000000..ad5913d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-fill-valid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-fill with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-fill">
+<meta name="assert" content="column-fill supports the full grammar 'auto | balance | balance-all'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("column-fill", "auto");
+test_valid_value("column-fill", "balance");
+test_valid_value("column-fill", "balance-all");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-gap-computed.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-gap-computed.html
new file mode 100644
index 0000000..60f5cf0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-gap-computed.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: getComputedValue().columnGap</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-gap">
+<meta name="assert" content="column-gap computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<style>
+  #target {
+    font-size: 40px;
+  }
+</style>
+<script>
+test_computed_value("column-gap", "normal");
+
+test_computed_value("column-gap", "calc(10px + 0.5em)", "30px");
+test_computed_value("column-gap", "calc(10px - 0.5em)", "0px");
+test_computed_value("column-gap", "40%");
+test_computed_value("column-gap", "calc(50% + 60px)");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-gap-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-gap-invalid.html
new file mode 100644
index 0000000..8ec92df
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-gap-invalid.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-gap with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-gap">
+<meta name="assert" content="column-gap supports only the grammar '<length-percentage> | normal'.">
+<meta name="assert" content="column-gap rejects negative <length-percentage>.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("column-gap", "auto");
+
+test_invalid_value("column-gap", "10");
+test_invalid_value("column-gap", "10px 20px");
+test_invalid_value("column-gap", "-1px");
+test_invalid_value("column-gap", "-10%");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-gap-valid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-gap-valid.html
new file mode 100644
index 0000000..96ae68ee
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-gap-valid.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-gap with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-gap">
+<meta name="assert" content="column-gap supports the full grammar '<length-percentage> | normal'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("column-gap", "normal");
+
+test_valid_value("column-gap", "0", "0px");
+test_valid_value("column-gap", "1px");
+test_valid_value("column-gap", "calc(2em + 3ex)");
+test_valid_value("column-gap", "4%");
+test_valid_value("column-gap", "5vmin");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-color-computed.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-color-computed.html
new file mode 100644
index 0000000..f04f6b6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-color-computed.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: getComputedValue().columnRuleColor</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-rule-color">
+<meta name="assert" content="column-rule-color computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<style>
+  #target {
+    color: lime;
+  }
+</style>
+<script>
+test_computed_value("column-rule-color", "currentcolor", "rgb(0, 255, 0)");
+
+test_computed_value("column-rule-color", "red", "rgb(255, 0, 0)");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-color-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-color-invalid.html
new file mode 100644
index 0000000..015defb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-color-invalid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-rule-color with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-rule-color">
+<meta name="assert" content="column-rule-color supports only the grammar '<color>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("column-rule-color", "auto");
+
+test_invalid_value("column-rule-color", "green blue");
+test_invalid_value("column-rule-color", "green, blue");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-color-valid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-color-valid.html
new file mode 100644
index 0000000..99ad7adb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-color-valid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-rule-color with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-rule-color">
+<meta name="assert" content="column-rule-color supports the full grammar '<color>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("column-rule-color", "currentcolor");
+
+test_valid_value("column-rule-color", "red");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-invalid.html
new file mode 100644
index 0000000..e9945ec
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-invalid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-rule with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-rule">
+<meta name="assert" content="column-rule supports only the grammar '<column-rule-width> || <column-rule-style> || <column-rule-color>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("column-rule", "reverse");
+test_invalid_value("column-rule", "10");
+
+test_invalid_value("column-rule", "red medium green");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-style-computed.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-style-computed.html
new file mode 100644
index 0000000..6a74b7b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-style-computed.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: getComputedValue().columnRuleStyle</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-rule-style">
+<meta name="assert" content="column-rule-style computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value("column-rule-style", "none");
+test_computed_value("column-rule-style", "hidden");
+test_computed_value("column-rule-style", "dotted");
+test_computed_value("column-rule-style", "dashed");
+test_computed_value("column-rule-style", "solid");
+test_computed_value("column-rule-style", "double");
+test_computed_value("column-rule-style", "groove");
+test_computed_value("column-rule-style", "ridge");
+test_computed_value("column-rule-style", "inset");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-style-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-style-invalid.html
new file mode 100644
index 0000000..db367c27
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-style-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-rule-style with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-rule-style">
+<meta name="assert" content="column-rule-style supports only the <line-style> grammar 'none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("column-rule-style", "auto");
+test_invalid_value("column-rule-style", "double dashed");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-style-valid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-style-valid.html
new file mode 100644
index 0000000..6f79c0a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-style-valid.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-rule-style with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-rule-style">
+<meta name="assert" content="column-rule-style supports the full <line-style> grammar 'none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("column-rule-style", "none");
+test_valid_value("column-rule-style", "hidden");
+test_valid_value("column-rule-style", "dotted");
+test_valid_value("column-rule-style", "dashed");
+test_valid_value("column-rule-style", "solid");
+test_valid_value("column-rule-style", "double");
+test_valid_value("column-rule-style", "groove");
+test_valid_value("column-rule-style", "ridge");
+test_valid_value("column-rule-style", "inset");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-valid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-valid.html
new file mode 100644
index 0000000..473d8f07
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-valid.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-rule with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-rule">
+<meta name="assert" content="column-rule supports the full grammar '<column-rule-width> || <column-rule-style> || <column-rule-color>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("column-rule", "10px");
+test_valid_value("column-rule", "dotted");
+test_valid_value("column-rule", "red");
+
+test_valid_value("column-rule", "currentcolor hidden medium", "medium hidden currentcolor");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-width-computed.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-width-computed.html
new file mode 100644
index 0000000..f4b33576
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-width-computed.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: getComputedValue().columnRuleWidth</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-rule-width">
+<meta name="assert" content="column-rule-width computed value is absolute length.">
+<meta name="assert" content="column-rule-width computed value is 0 if the column rule style is none or hidden.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<style>
+  #target {
+    font-size: 40px;
+    column-rule-style: dotted;
+  }
+</style>
+<script>
+test_computed_value("column-rule-width", "calc(10px + 0.5em)", "30px");
+test_computed_value("column-rule-width", "calc(10px - 0.5em)", "0px");
+
+// thin, medium, thick computed values not yet tested
+
+test(() => {
+  target.style.columnRuleWidth = '10px';
+  assert_equals(getComputedStyle(target).columnRuleWidth, '10px');
+
+  target.style.columnRuleStyle = 'none';
+  assert_equals(getComputedStyle(target).columnRuleWidth, '0px');
+
+  target.style.columnRuleStyle = 'outset';
+  assert_equals(getComputedStyle(target).columnRuleWidth, '10px');
+
+  target.style.columnRuleStyle = 'hidden';
+  assert_equals(getComputedStyle(target).columnRuleWidth, '0px');
+
+  target.style.columnRuleStyle = '';
+}, 'column-rule-width is 0 when column-rule-style is none or hidden');
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-width-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-width-invalid.html
new file mode 100644
index 0000000..0bdbbec
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-width-invalid.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-rule-width with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-rule-width">
+<meta name="assert" content="column-rule-width supports only the <line-width> grammar '<length> | thin | medium | thick'.">
+<meta name="assert" content="column-rule-width rejects negative lengths.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("column-rule-width", "auto");
+
+test_invalid_value("column-rule-width", "10");
+test_invalid_value("column-rule-width", "-20px");
+test_invalid_value("column-rule-width", "30%");
+
+test_invalid_value("column-rule-width", "medium 40px");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-width-valid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-width-valid.html
new file mode 100644
index 0000000..1be37fc7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-rule-width-valid.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-rule-width with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-rule-width">
+<meta name="assert" content="column-rule-width supports the full <line-width> grammar '<length> | thin | medium | thick'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("column-rule-width", "thin");
+test_valid_value("column-rule-width", "medium");
+test_valid_value("column-rule-width", "thick");
+
+test_valid_value("column-rule-width", "0", "0px");
+test_valid_value("column-rule-width", "10px");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-span-computed.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-span-computed.html
new file mode 100644
index 0000000..7c5417b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-span-computed.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: getComputedValue().columnSpan</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-span">
+<meta name="assert" content="column-span computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value("column-span", "none");
+test_computed_value("column-span", "all");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-span-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-span-invalid.html
new file mode 100644
index 0000000..c412922
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-span-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-span with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-span">
+<meta name="assert" content="column-span supports only the grammar 'none | all'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("column-span", "auto");
+test_invalid_value("column-span", "none all");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-span-valid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-span-valid.html
new file mode 100644
index 0000000..005b8c3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-span-valid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-span with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-span">
+<meta name="assert" content="column-span supports the full grammar 'none | all'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("column-span", "none");
+test_valid_value("column-span", "all");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-width-computed.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-width-computed.html
new file mode 100644
index 0000000..48dd692b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-width-computed.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: getComputedValue().columnWidth</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-width">
+<meta name="assert" content="column-width computed value is the keyword auto or an absolute length.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<style>
+  #target {
+    font-size: 40px;
+  }
+</style>
+<script>
+test_computed_value("column-width", "auto");
+
+test_computed_value("column-width", "calc(10px + 0.5em)", "30px");
+test_computed_value("column-width", "calc(10px - 0.5em)", "0px");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-width-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-width-invalid.html
new file mode 100644
index 0000000..207a78e8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-width-invalid.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-width with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-width">
+<meta name="assert" content="column-width supports only the grammar 'auto | <length>'.">
+<meta name="assert" content="column-width rejects negative lengths.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("column-width", "none");
+test_invalid_value("column-width", "10");
+test_invalid_value("column-width", "-20px");
+test_invalid_value("column-width", "30%");
+
+test_invalid_value("column-width", "auto 40px");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-width-valid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-width-valid.html
new file mode 100644
index 0000000..e35a6eb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/column-width-valid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing column-width with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-column-width">
+<meta name="assert" content="column-width supports the full grammar 'auto | <length>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("column-width", "auto");
+
+test_valid_value("column-width", "0", "0px");
+test_valid_value("column-width", "10px");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/columns-invalid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/columns-invalid.html
new file mode 100644
index 0000000..c84fb6c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/columns-invalid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing columns with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-columns">
+<meta name="assert" content="columns supports only the grammar '<column-width> || <column-count>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value("columns", "none");
+
+test_invalid_value("columns", "10px 20px");
+test_invalid_value("columns", "10 20");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/columns-valid.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/columns-valid.html
new file mode 100644
index 0000000..fff7cdd4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/parsing/columns-valid.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Multi-column Layout: parsing columns with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#propdef-columns">
+<meta name="assert" content="columns supports the full grammar '<column-width> || <column-count>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("columns", "2 10px", "10px 2");
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html b/third_party/blink/web_tests/external/wpt/css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html
new file mode 100644
index 0000000..2f9fffb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>CSS Shadow Parts - Invalidation Change Part Name IDL DOMTokenList</title>
+    <meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
+    <link href="http://www.google.com/" rel="author" title="Google">
+    <link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="support/shadow-helper.js"></script>
+  </head>
+  <body>
+    <style>#c-e::part(partp) { color: red; }</style>
+    <style>#c-e::part(new-partp) { color: green; }</style>
+    <script>installCustomElement("custom-element", "custom-element-template");</script>
+    <template id="custom-element-template">
+      <style>span { color: blue; }</style>
+      <span id="part" part="partp">This text</span>
+    </template>
+    The following text should be green:
+    <div><custom-element id="c-e"></custom-element></div>
+    <script>
+      "use strict";
+      const colorGreen = "rgb(0, 128, 0)";
+      test(function() {
+        const el = getElementByShadowIds(document, ["c-e", "part"]);
+        el.part.remove("partp");
+        el.part.add("new-partp");
+        assert_equals(window.getComputedStyle(el).color, colorGreen);
+      }, "Part in selected host changed color via part IDL DOMTokenList attribute.");
+    </script>
+  </body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shadow-parts/invalidation-change-part-name-idl-setter.html b/third_party/blink/web_tests/external/wpt/css/css-shadow-parts/invalidation-change-part-name-idl-setter.html
new file mode 100644
index 0000000..52af22a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-shadow-parts/invalidation-change-part-name-idl-setter.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>CSS Shadow Parts - Invalidation Change Part Name IDL Setter</title>
+    <meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
+    <link href="http://www.google.com/" rel="author" title="Google">
+    <link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="support/shadow-helper.js"></script>
+  </head>
+  <body>
+    <style>#c-e::part(partp) { color: red; }</style>
+    <script>installCustomElement("custom-element", "custom-element-template");</script>
+    <template id="custom-element-template">
+      <style>span { color: green; }</style>
+      <span id="part" part="partp">This text</span>
+    </template>
+    The following text should be green:
+    <div><custom-element id="c-e"></custom-element></div>
+    <script>
+      "use strict";
+      const colorGreen = "rgb(0, 128, 0)";
+      test(function() {
+        const el = getElementByShadowIds(document, ["c-e", "part"]);
+        el.part = "new-partp"
+        assert_equals(window.getComputedStyle(el).color, colorGreen);
+      }, "Part in selected host changed color via part IDL attribute setter.");
+    </script>
+  </body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-shadow-parts/part-name-idl.html b/third_party/blink/web_tests/external/wpt/css/css-shadow-parts/part-name-idl.html
new file mode 100644
index 0000000..fc3282a6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-shadow-parts/part-name-idl.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>CSS Shadow Parts - Part Name IDL</title>
+    <meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
+    <link href="http://www.google.com/" rel="author" title="Google">
+    <link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="support/shadow-helper.js"></script>
+  </head>
+  <body>
+    <span id="s_no_part"></span>
+    <span id="s_part" part="part1"></span>
+    <span id="s_2_parts" part="part1 part2"></span>
+    <script>
+      "use strict";
+      test(function() {
+        const parts = s_no_part.part;
+        assert_equals(parts.length, 0);
+        assert_equals(parts.value, "");
+      }, "Access to .part returns an empty DOMTokenList.");
+      test(function() {
+        const parts = s_2_parts.part;
+        assert_equals(parts.length, 2);
+        assert_equals(parts[0], "part1");
+        assert_equals(parts[1], "part2");
+        assert_equals(parts.value, "part1 part2");
+      }, "Multiple names give a DOMTokenList with multiple entries.");
+      test(function() {
+        const parts = s_no_part.part;
+        assert_equals(parts.length, 0);
+        assert_equals(parts.value, "");
+        parts.add("part1");
+        assert_equals(parts.length, 1);
+        assert_equals(parts.value, "part1");
+      }, "DOMTokenList created by access is persisted.");
+      test(function() {
+        const parts = s_part.part;
+        assert_equals(parts.length, 1);
+        assert_equals(parts.value, "part1");
+        parts.add("part2");
+        assert_equals(parts.length, 2);
+        assert_equals(parts.value, "part1 part2");
+        assert_equals(s_part.getAttribute("part"), parts.value);
+        parts.remove("part1");
+        assert_equals(parts.length, 1);
+        assert_equals(parts.value, "part2");
+        assert_equals(s_part.getAttribute("part"), parts.value);
+      }, "Changes in DOMTokenList are refected in attribute.");
+    </script>
+  </body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-033-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-033-ref.html
new file mode 100644
index 0000000..5af9912
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-033-ref.html
@@ -0,0 +1,8 @@
+<!doctype html>
+<title>CSS Test Reference</title>
+<p>
+  Should read "Pass" below
+</p>
+<p>
+  Pass
+</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-033.html b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-033.html
new file mode 100644
index 0000000..8bc6617
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-text/text-transform/text-transform-capitalize-033.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<title>CSS Test: text-transform ignores out of flow</title>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="author" href="https://mozilla.org" title="Mozilla">
+<link rel="help" href="https://drafts.csswg.org/css-text/#propdef-text-transform">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=906369">
+<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=191807">
+<link rel="match" href="text-transform-capitalize-033-ref.html">
+<p>
+  Should read "Pass" below
+</p>
+<p style="text-transform: capitalize">
+  p<span style="position: absolute"></span>ass
+</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transitions/transitions-animatable-properties-01.html b/third_party/blink/web_tests/external/wpt/css/css-transitions/transitions-animatable-properties-01.html
index 534f8183..39dd073 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-transitions/transitions-animatable-properties-01.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-transitions/transitions-animatable-properties-01.html
@@ -101,9 +101,9 @@
       // create all the tests we need
       for (var i = 0; i < kANIMATABLE_CSS_PROPERTIES.length; i++) {
         testsIntermediate.push(async_test(kANIMATABLE_CSS_PROPERTIES[i][0] + " intermediate",
-                                          { timeout: 2000, assert: "property " + kANIMATABLE_CSS_PROPERTIES[i][0] + " is animatable" }));
+                                          { assert: "property " + kANIMATABLE_CSS_PROPERTIES[i][0] + " is animatable" }));
         testsEnd.push(async_test(kANIMATABLE_CSS_PROPERTIES[i][0] + " end",
-                                          { timeout: 2000, assert: "property " + kANIMATABLE_CSS_PROPERTIES[i][0] + " has correct value after transition's end" }));
+                                          { assert: "property " + kANIMATABLE_CSS_PROPERTIES[i][0] + " has correct value after transition's end" }));
       }
 
       // getComputedStyle helper
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/text-overflow-ruby-ref.html b/third_party/blink/web_tests/external/wpt/css/css-ui/text-overflow-ruby-ref.html
new file mode 100644
index 0000000..ae5267aa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/text-overflow-ruby-ref.html
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML>
+<!--
+     Any copyright is dedicated to the Public Domain.
+     http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+  <meta charset="utf-8">
+  <title>Reference: text-overflow:ellipsis and ruby</title>
+  <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+  <style>
+html,body {
+  color:black; background-color:white; font:14px/1 monospace; padding:0; margin:0;
+}
+
+.clip {
+    overflow: hidden;
+    width: 40px;
+    text-overflow: ellipsis;
+}
+
+input { width: 40px; -webkit-appearance: none; border: 1px solid black; }
+span { white-space: pre; }
+.thg { display: inline-table; }
+.tc { display: inline-table; }
+.t { display: inline-table; }
+
+    </style>
+</head>
+<body>
+
+<div style="float:left; width:300px">
+<div class="clip">
+<span><span><span>aa<input class="thg">bb</span></span></span>
+<br>
+<span><span><span>aa<div class="thg">bbbbbb</div>cc</span></span></span>
+<br>
+<span><span><span>aa<span>bbbbbb</span>cc</span></span></span>
+<br>
+<span><span><span>aa<input class="tc">bb</span></span></span>
+<br>
+<span><span><span>aa<div class="tc">bbbbbb</div>cc</span></span></span>
+<br>
+<span><span><span>aa<input class="t">bb</span></span></span>
+<br>
+<span><span><span>aa<div class="t">bbbbbb</div>cc</span></span></span>
+
+<br>
+<span><span><span><input class="thg">bb</span></span></span>
+<br>
+<span><span><span><div class="thg">bbbbbb</div>cc</span></span></span>
+<br>
+<span><span><span><span>bbbbbb</span>cc</span></span></span>
+<br>
+<span><span><span><input class="tc">bb</span></span></span>
+<br>
+<span><span><span><div class="tc">bbbbbb</div>cc</span></span></span>
+<br>
+<span><span><span><input class="t">bb</span></span></span>
+<br>
+<span><span><span><div class="t">bbbbbb</div>cc</span></span></span>
+</div>
+</div>
+
+<div style="float:left; width:300px">
+<div class="clip">
+<span><span><input class="thg">bb</span></span>
+<br>
+<span><span><div class="thg">bbbbbb</div>cc</span></span>
+<br>
+<span><span>bbbbbbcc</span></span>
+<br>
+<span><span><input class="tc">bb</span></span>
+<br>
+<span><span><div class="tc">bbbbbb</div>cc</span></span>
+<br>
+<span><span><input class="t">bb</span></span>
+<br>
+<span><span><div class="t">bbbbbb</div>cc</span></span>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-ui/text-overflow-ruby.html b/third_party/blink/web_tests/external/wpt/css/css-ui/text-overflow-ruby.html
new file mode 100644
index 0000000..c8abebb7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-ui/text-overflow-ruby.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML>
+<!--
+     Any copyright is dedicated to the Public Domain.
+     http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+  <meta charset="utf-8">
+  <title>CSS Basic User Interface Test: text-overflow:ellipsis and ruby</title>
+  <link rel="help" href="http://www.w3.org/TR/css3-ui/#text-overflow">
+  <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+  <link rel="match" href="text-overflow-ruby-ref.html">
+  <style>
+html,body {
+  color:black; background-color:white; font:14px/1 monospace; padding:0; margin:0;
+}
+
+.clip {
+    overflow: hidden;
+    width: 40px;
+    text-overflow: ellipsis;
+}
+
+input { width: 40px; -webkit-appearance: none; border: 1px solid black; }
+
+.thg { display: table-header-group; }
+.tc { display: table-cell; }
+.t { display: table; }
+
+    </style>
+</head>
+<body>
+
+<div style="float:left; width:300px">
+<div class="clip">
+<ruby><rb><span>aa<input class="thg">bb</span></rb></ruby>
+<br>
+<ruby><rb><span>aa<div class="thg">bbbbbb</div>cc</span></rb></ruby>
+<br>
+<ruby><rb><span>aa<span>bbbbbb</span>cc</span></rb></ruby>
+<br>
+<ruby><rb><span>aa<input class="tc">bb</span></rb></ruby>
+<br>
+<ruby><rb><span>aa<div class="tc">bbbbbb</div>cc</span></rb></ruby>
+<br>
+<ruby><rb><span>aa<input class="t">bb</span></rb></ruby>
+<br>
+<ruby><rb><span>aa<div class="t">bbbbbb</div>cc</span></rb></ruby>
+
+<br>
+<ruby><rb><span><input class="thg">bb</span></rb></ruby>
+<br>
+<ruby><rb><span><div class="thg">bbbbbb</div>cc</span></rb></ruby>
+<br>
+<ruby><rb><span><span>bbbbbb</span>cc</span></rb></ruby>
+<br>
+<ruby><rb><span><input class="tc">bb</span></rb></ruby>
+<br>
+<ruby><rb><span><div class="tc">bbbbbb</div>cc</span></rb></ruby>
+<br>
+<ruby><rb><span><input class="t">bb</span></rb></ruby>
+<br>
+<ruby><rb><span><div class="t">bbbbbb</div>cc</span></rb></ruby>
+</div>
+</div>
+
+<div style="float:left; width:300px">
+<div class="clip">
+<ruby><rb><input class="thg">bb</rb></ruby>
+<br>
+<ruby><rb><div class="thg">bbbbbb</div>cc</rb></ruby>
+<br>
+<ruby><rb>bbbbbbcc</rb></ruby>
+<br>
+<ruby><rb><input class="tc">bb</rb></ruby>
+<br>
+<ruby><rb><div class="tc">bbbbbb</div>cc</rb></ruby>
+<br>
+<ruby><rb><input class="t">bb</rb></ruby>
+<br>
+<ruby><rb><div class="t">bbbbbb</div>cc</rb></ruby>
+</div>
+</div>
+
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/defined.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/defined.html
new file mode 100644
index 0000000..064a350
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/defined.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>CSS Selectors Invalidation: :defined</title>
+    <link rel="help" href="https://drafts.csswg.org/selectors-4/">
+    <meta name="assert" content="This tests that the :defined selector is effective">
+    <link rel="help" href="https://html.spec.whatwg.org/multipage/semantics-other.html#selector-defined">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <style>
+      #container {
+        color: gray;
+      }
+
+      #a1:defined {
+        color: blue;
+      }
+      :defined + #b1 {
+        color: green;
+      }
+      :defined > #c1 {
+        color: red;
+      }
+      div + :defined + * #d1 {
+        color: yellow;
+      }
+  </style>
+  </head>
+  <body>
+    <section id="container">
+      <elucidate-late id="a1"></elucidate-late>
+      <div id="b1"></div>
+      <elucidate-late>
+        <div id="c1"></div>
+      </elucidate-late>
+      <div>
+        <div id="d1"></div>
+      </div>
+    </section>
+
+    <script>
+      const gray = "rgb(128, 128, 128)";
+      const blue = "rgb(0, 0, 255)";
+      const green = "rgb(0, 128, 0)";
+      const red = "rgb(255, 0, 0)";
+      const yellow = "rgb(255, 255, 0)";
+
+      function assertGray(a, b, c, d) {
+        assert_equals(getComputedStyle(a).color, gray);
+        assert_equals(getComputedStyle(b).color, gray);
+        assert_equals(getComputedStyle(c).color, gray);
+        assert_equals(getComputedStyle(d).color, gray);
+      }
+
+      function assertColorful(a, b, c, d) {
+        assert_equals(getComputedStyle(a).color, blue);
+        assert_equals(getComputedStyle(b).color, green);
+        assert_equals(getComputedStyle(c).color, red);
+        assert_equals(getComputedStyle(d).color, yellow);
+      }
+
+      class ElucidateLate extends HTMLElement {
+        constructor() {
+          super();
+        }
+      }
+
+      test(() => {
+        assertGray(a1, b1, c1, d1);
+        customElements.define('elucidate-late', ElucidateLate);
+        assertColorful(a1, b1, c1, d1);
+      }, ":defined selector is effective");
+
+    </script>
+  </body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/enabled-disabled.html b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/enabled-disabled.html
new file mode 100644
index 0000000..bac3067
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/invalidation/enabled-disabled.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>CSS Selectors Invalidation: :enabled and :disabled</title>
+    <link rel="help" href="https://drafts.csswg.org/selectors-4/#enableddisabled">
+    <link rel="help" href="https://html.spec.whatwg.org/#enabling-and-disabling-form-controls:-the-disabled-attribute">
+    <meta name="assert" content="This tests that the :enabled and :disabled selectors are effective, and that the enabled/disabled status of an element is changed when updating its 'disabled' attribute by script.">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <style>
+      input {
+        position: absolute;
+        left: 200px;
+        top: 300px;
+      }
+
+      :enabled {
+        left: 100px;
+      }
+
+      :disabled {
+        top: 400px;
+      }
+    </style>
+  </head>
+  <body>
+    <input id="first" type="button" value="First"></input>
+    <input id="second" type="button" value="Second" disabled></input>
+
+    <script>
+      test(() => {
+        assert_equals(getComputedStyle(first).left, '100px');
+        assert_equals(getComputedStyle(first).top, '300px');
+
+        first.disabled = true;
+        assert_equals(getComputedStyle(first).left, '200px');
+        assert_equals(getComputedStyle(first).top, '400px');
+      }, "Element updates when disabled");
+
+      test(() => {
+        assert_equals(getComputedStyle(second).left, '200px');
+        assert_equals(getComputedStyle(second).top, '400px');
+
+        second.disabled = false;
+        assert_equals(getComputedStyle(second).left, '100px');
+        assert_equals(getComputedStyle(second).top, '300px');
+      }, "Element updates when enabled");
+    </script>
+  </body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001-ref.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001-ref.html
new file mode 100644
index 0000000..e1a478a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001-ref.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+  <style>
+  .flexBaselineCheck {
+    display: flex;
+    border: 1px solid black;
+    height: 100px;
+  }
+  .flexBaselineCheck > * {
+    border: 2px solid teal;
+
+    /* In the testcase, the (baseline-aligned) items should all have their
+       bottom borders aligned with the 80px-tall canvas.  In other words, their
+       bottom borders should all be 20px away from the bottom of their flex
+       container.  Here in the reference case, we just use "flex-end" alignment
+       plus a hardcoded 20px margin-bottom to produce a precise reference
+       for what that should look like. */
+    align-self: flex-end;
+    margin-bottom: 20px;
+  }
+  canvas {
+    background: purple;
+    width: 20px;
+    height: 80px;
+    box-sizing: border-box;
+  }
+  .flex {
+    display: flex;
+  }
+  .grid {
+    display: grid;
+  }
+  .multicol {
+    column-count: 2;
+  }
+  </style>
+</head>
+<body>
+  <div class="flexBaselineCheck">
+    <canvas></canvas>
+    <div>block</div>
+    <fieldset><legend>leg</legend>fieldset</fieldset>
+    <div class="flex">flex</div>
+    <div class="grid">grid</div>
+    <div class="multicol">multi<br>col</div>
+    <details open><summary>summary</summary>details</details>
+  </div>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001.html
new file mode 100644
index 0000000..b023cfd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: layout' should make elements behave as if they have no baseline</title>
+  <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-layout">
+  <link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#valdef-align-items-baseline">
+  <link rel="match" href="contain-layout-suppress-baseline-001-ref.html">
+  <style>
+  .flexBaselineCheck {
+    display: flex;
+    border: 1px solid black;
+    height: 100px;
+  }
+  .flexBaselineCheck > * {
+    contain: layout;
+    border: 2px solid teal;
+    align-self: baseline;
+  }
+  canvas {
+    background: purple;
+    width: 20px;
+    height: 80px;
+    box-sizing: border-box;
+  }
+  .flex {
+    display: flex;
+  }
+  .grid {
+    display: grid;
+  }
+  .multicol {
+    column-count: 2;
+  }
+  </style>
+</head>
+<body>
+  <div class="flexBaselineCheck">
+    <!-- This canvas just exists to establish a precise, far-down baseline
+         alignment position: -->
+    <canvas></canvas>
+    <!-- "contain:layout" should force all the elements below to behave as if
+         they have no baseline. That means they all should *synthesize* a
+         baseline from their border-box edge, in order to participate in flex
+         item baseline alignment (to honor the outer flex container's
+         "align-items:baseline"). So, the expectation here is that all of these
+         elements' border-bottom edges should be aligned. -->
+    <div>block</div>
+    <fieldset><legend>leg</legend>fieldset</fieldset>
+    <div class="flex">flex</div>
+    <div class="grid">grid</div>
+    <div class="multicol">multi<br>col</div>
+    <details open><summary>summary</summary>details</details>
+  </div>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002-ref.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002-ref.html
new file mode 100644
index 0000000..d4095fd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002-ref.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+  <style>
+  .flexBaselineCheck {
+    display: flex;
+    border: 1px solid black;
+    height: 70px;
+  }
+  .flexBaselineCheck > * {
+    border: 2px solid teal;
+
+    /* In the testcase, the (baseline-aligned) items should all have their
+       bottom borders aligned with the 50px-tall canvas.  In other words, their
+       bottom borders should all be 20px away from the bottom of their flex
+       container.  Here in the reference case, we just use "flex-end" alignment
+       plus a hardcoded 20px margin-bottom to produce a precise reference
+       for what that should look like. */
+    align-self: flex-end;
+    margin-bottom: 20px;
+  }
+  canvas {
+    background: purple;
+    width: 20px;
+    height: 50px;
+    box-sizing: border-box;
+  }
+  </style>
+</head>
+<body>
+  <div class="flexBaselineCheck">
+    <canvas></canvas>
+    <button>btn</button>
+    <input type="button" value="i-btn">
+    <input type="submit" value="i-sub">
+  </div>
+
+  <div class="flexBaselineCheck">
+    <canvas></canvas>
+    <input type="text" value="text">
+    <input type="number" value="0">
+  </div>
+
+  <div class="flexBaselineCheck">
+    <canvas></canvas>
+    <input type="date">
+    <input type="time">
+  </div>
+
+  <div class="flexBaselineCheck">
+    <canvas></canvas>
+    <input type="file">
+    <textarea>textarea</textarea>
+  </div>
+
+  <div class="flexBaselineCheck">
+    <canvas></canvas>
+    <select><option>dropdown</option></select>
+    <select multiple style="max-height:40px"><option>multi</option></select>
+  </div>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002.html
new file mode 100644
index 0000000..eb79142
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>CSS Test: 'contain: layout' should make elements behave as if they have no baseline</title>
+  <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+  <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-layout">
+  <link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#valdef-align-items-baseline">
+  <link rel="match" href="contain-layout-suppress-baseline-001-ref.html">
+  <style>
+  .flexBaselineCheck {
+    display: flex;
+    border: 1px solid black;
+    height: 70px;
+  }
+  .flexBaselineCheck > * {
+    contain: layout;
+    border: 2px solid teal;
+    align-self: baseline;
+  }
+  canvas {
+    background: purple;
+    width: 20px;
+    height: 50px;
+    box-sizing: border-box;
+  }
+  </style>
+</head>
+<body>
+  <div class="flexBaselineCheck">
+    <!-- This canvas just exists to establish a precise, far-down baseline
+         alignment position: -->
+    <canvas></canvas>
+    <!-- "contain:layout" should force all the elements below to behave as if
+         they have no baseline. That means they all should *synthesize* a
+         baseline from their border-box edge, in order to participate in flex
+         item baseline alignment (to honor the outer flex container's
+         "align-items:baseline"). So, the expectation here is that all of these
+         elements' border-bottom edges should be aligned. -->
+    <button>btn</button>
+    <input type="button" value="i-btn">
+    <input type="submit" value="i-sub">
+  </div>
+
+  <!-- Same as above, but with different form controls:
+       (split into multiple flex containers so as not to be too wide): -->
+  <div class="flexBaselineCheck">
+    <canvas></canvas>
+    <input type="text" value="text">
+    <input type="number" value="0">
+  </div>
+
+  <div class="flexBaselineCheck">
+    <canvas></canvas>
+    <input type="date">
+    <input type="time">
+  </div>
+
+  <div class="flexBaselineCheck">
+    <canvas></canvas>
+    <input type="file">
+    <textarea>textarea</textarea>
+  </div>
+
+  <div class="flexBaselineCheck">
+    <canvas></canvas>
+    <select><option>dropdown</option></select>
+    <select multiple style="max-height:40px"><option>multi</option></select>
+  </div>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html
index 20272cf..0ed82ff 100644
--- a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <meta charset="utf-8">
-  <title>CSS Test: 'contain: size' on block elements should cause them to be sized and baseline-aligned as if they had no contents.</title>
+  <title>CSS Test: 'contain: size' on block elements should cause them to be sized as if they had no contents</title>
   <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
   <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
   <link rel="match" href="contain-size-block-001-ref.html">
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001-ref.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001-ref.html
index 0cb421b..efadf9b5 100644
--- a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001-ref.html
@@ -7,6 +7,13 @@
   <style>
   button {
     border: 1em solid green;
+    /* In case the testcase's 'inner' text is taller than the button, don't let
+       it influence its line-box's size.  This lets us more-easily compare
+       sizing between empty buttons vs. contained nonempty buttons. */
+    vertical-align: top;
+  }
+  .vaBaseline {
+    vertical-align: baseline;
   }
   .width-ref {
     width: 50px;
@@ -22,6 +29,7 @@
     float: left;
     width: 50px;
   }
+  br { clear: both }
   .iFlexBasic-ref {
     display: inline-flex;
   }
@@ -29,6 +37,11 @@
     display: inline-flex;
     width: 50px;
   }
+  .innerContents {
+    color: transparent;
+    height: 0;
+    width: 0;
+  }
   .orthog-ref {
     writing-mode: vertical-lr;
   }
@@ -50,7 +63,7 @@
   <button class="iFlexWidth-ref"></button>
   <br>
 
-  outside before<button></button>outside after
+  outside before<button class="vaBaseline"><div class="innerContents">inner</div></button>outside after
   <br>
 
   <button class="width-ref"></button>
@@ -65,7 +78,7 @@
   <button class="height-ref"></button>
   <br>
 
-  s<button class="orthog-ref"></button>endtext
+  s<button class="orthog-ref vaBaseline"><div class="innerContents">inner</div></button>endtext
   <br>
 
   <button class="height-ref width-ref">inside</button>
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001.html
index 015d33e..b29ef0f 100644
--- a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <meta charset="utf-8">
-  <title>CSS Test: 'contain: size' on buttons should cause them to be sized and baseline-aligned as if they had no contents.</title>
+  <title>CSS Test: 'contain: size' on buttons should cause them to be sized as if they had no contents.</title>
   <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
   <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
   <link rel="match" href="contain-size-button-001-ref.html">
@@ -10,7 +10,13 @@
   button {
     contain: size;
     border: 1em solid green;
-    background: red;
+    /* In case the testcase's 'inner' text is taller than the button, don't let
+       it influence its line-box's size.  This lets us more-easily compare
+       sizing between empty buttons vs. contained nonempty buttons. */
+    vertical-align: top;
+  }
+  .vaBaseline {
+    vertical-align: baseline;
   }
   .innerContents {
     color: transparent;
@@ -38,6 +44,7 @@
     float: left;
     width: 50px;
   }
+  br { clear: both }
   .iFlexBasic {
     display: inline-flex;
   }
@@ -71,8 +78,8 @@
   <button class="iFlexWidth"><div class="innerContents">inner</div></button>
   <br>
 
-  <!--CSS Test: A size-contained button should perform baseline alignment as if the container were empty.-->
-  outside before<button><div class="innerContents">inner</div></button>outside after
+  <!--CSS Test: A size-contained button should perform baseline alignment regularly.-->
+  outside before<button class="vaBaseline"><div class="innerContents">inner</div></button>outside after
   <br>
 
   <!--CSS Test: A size-contained button with specified min-width should render at given min-width and zero height regardless of content.-->
@@ -91,8 +98,8 @@
   <button class="height"><div class="innerContents">inner</div></button>
   <br>
 
-  <!--CSS Test: A size-contained button with vertical text should perform baseline alignment as if the container were empty.-->
-  s<button class="orthog"><div class="innerContents">inner</div></button>endtext
+  <!--CSS Test: A size-contained button with vertical text should perform baseline alignment regularly.-->
+  s<button class="orthog vaBaseline"><div class="innerContents">inner</div></button>endtext
   <br>
 
   <!--CSS Test: A size-contained button with inner text should layout the text in the same manner as a container of the same type with identical contents.-->
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002-ref.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002-ref.html
index 31ca8831..198e8e1 100644
--- a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002-ref.html
@@ -5,10 +5,6 @@
   <title>CSS Reftest Reference</title>
   <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
   <style>
-  .basic {
-    border: none;
-    visibility: hidden;
-  }
   .container {
     border: 10px solid green;
     display: inline-block;
@@ -37,7 +33,7 @@
 </head>
 <body>
   <div class="flexBaselineCheck">
-  outside before<fieldset class="basc">
+  outside before<fieldset>
     <legend>l</legend>
     <div class="innerContents">i</div>
   </fieldset>outside after
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001.html
index 1866dfd..72ab970 100644
--- a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <meta charset="utf-8">
-  <title>CSS Test: 'contain: size' on flex elements should cause them to be sized and baseline-aligned as if they had no contents.</title>
+  <title>CSS Test: 'contain: size' on flex elements should cause them to be sized as if they had no contents.</title>
   <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
   <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
   <link rel="match" href="contain-size-flex-001-ref.html">
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-grid-001.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-grid-001.html
index a85b0a31..c81fa1f 100644
--- a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-grid-001.html
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-grid-001.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <meta charset="utf-8">
-  <title>CSS Test: 'contain: size' on grid elements should cause them to be sized and baseline-aligned as if they had no contents.</title>
+  <title>CSS Test: 'contain: size' on grid elements should cause them to be sized as if they had no contents.</title>
   <link rel="author" title="Gerald Squelart" href="mailto:gsquelart@mozilla.com">
   <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
   <link rel="match" href="contain-size-grid-001-ref.html">
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003-ref.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003-ref.html
index 07b3e5e..af927aa 100644
--- a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003-ref.html
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003-ref.html
@@ -9,6 +9,11 @@
     border: 1em solid green;
     column-count: 3;
   }
+  .innerContents {
+    color: transparent;
+    height: 0;
+    width: 0;
+  }
   .col-width-ref {
     column-width: 20px;
   }
@@ -28,12 +33,14 @@
   </style>
 </head>
 <body>
-  <!-- XXX: This chunk needs to move to a separate test (Bug 1507663)
   <div class="flexBaselineCheck">
-  outside before<div class="basic"></div>outside after
+    outside before
+    <div class="basic" style="max-height:0px">
+      <div class="innerContents">inner</div>
+    </div>
+    outside after
   </div>
   <br>
-  -->
 
   <div class="basic min col-width-ref"></div>
   <br>
diff --git a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003.html b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003.html
index d2d1378..447e3cc 100644
--- a/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003.html
+++ b/third_party/blink/web_tests/external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-003.html
@@ -2,7 +2,7 @@
 <html>
 <head>
   <meta charset="utf-8">
-  <title>CSS Test: 'contain: size' on multicol elements should cause them to be sized and baseline-aligned as if they had no contents.</title>
+  <title>CSS Test: 'contain: size' on multicol elements should cause them to be sized as if they had no contents</title>
   <link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
   <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
   <link rel="match" href="contain-size-multicol-003-ref.html">
@@ -37,13 +37,16 @@
   </style>
 </head>
 <body>
-  <!--CSS Test: A size-contained multicol element should perform baseline alignment as if it had no contents.-->
-  <!-- XXX: This chunk needs to move to a separate test (Bug 1507663)
+  <!-- This test verifies that contain:size doesn't interfere with the
+       determination of a multicol element's baseline. -->
   <div class="flexBaselineCheck">
-  outside before<div class="contain"><div class="innerContents">inner</div></div>outside after
+    outside before
+    <div class="contain">
+      <div class="innerContents">inner</div>
+    </div>
+    outside after
   </div>
   <br>
-  -->
 
   <!--The following tests are used to ensure column-gaps and column-widths continue to contribute to the minimum and maximum width of a size-contained multicol element. Each should render as if it had no contents.-->
 
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/reactions/HTMLButtonElement-expected.txt b/third_party/blink/web_tests/external/wpt/custom-elements/reactions/HTMLButtonElement-expected.txt
new file mode 100644
index 0000000..f1de833
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/custom-elements/reactions/HTMLButtonElement-expected.txt
@@ -0,0 +1,23 @@
+This is a testharness.js-based test.
+FAIL autofocus on HTMLButtonElement must enqueue an attributeChanged reaction when adding autofocus content attribute define_build_in_custom_element is not defined
+FAIL autofocus on HTMLButtonElement must enqueue an attributeChanged reaction when replacing an existing attribute define_build_in_custom_element is not defined
+FAIL disabled on HTMLButtonElement must enqueue an attributeChanged reaction when adding disabled content attribute define_build_in_custom_element is not defined
+FAIL disabled on HTMLButtonElement must enqueue an attributeChanged reaction when replacing an existing attribute define_build_in_custom_element is not defined
+FAIL name on HTMLButtonElement must enqueue an attributeChanged reaction when adding name content attribute define_build_in_custom_element is not defined
+FAIL name on HTMLButtonElement must enqueue an attributeChanged reaction when replacing an existing attribute define_build_in_custom_element is not defined
+FAIL value on HTMLButtonElement must enqueue an attributeChanged reaction when adding value content attribute define_build_in_custom_element is not defined
+FAIL value on HTMLButtonElement must enqueue an attributeChanged reaction when replacing an existing attribute define_build_in_custom_element is not defined
+FAIL type on HTMLButtonElement must enqueue an attributeChanged reaction when adding a new attribute define_build_in_custom_element is not defined
+FAIL type on HTMLButtonElement must enqueue an attributeChanged reaction when replacing an existing attribute define_build_in_custom_element is not defined
+FAIL formAction on HTMLButtonElement must enqueue an attributeChanged reaction when adding a new attribute define_build_in_custom_element is not defined
+FAIL formAction on HTMLButtonElement must enqueue an attributeChanged reaction when replacing an existing attribute define_build_in_custom_element is not defined
+FAIL formEnctype on HTMLButtonElement must enqueue an attributeChanged reaction when adding a new attribute define_build_in_custom_element is not defined
+FAIL formEnctype on HTMLButtonElement must enqueue an attributeChanged reaction when replacing an existing attribute define_build_in_custom_element is not defined
+FAIL formMethod on HTMLButtonElement must enqueue an attributeChanged reaction when adding a new attribute define_build_in_custom_element is not defined
+FAIL formMethod on HTMLButtonElement must enqueue an attributeChanged reaction when replacing an existing attribute define_build_in_custom_element is not defined
+FAIL formNoValidate on HTMLButtonElement must enqueue an attributeChanged reaction when adding a new attribute define_build_in_custom_element is not defined
+FAIL formNoValidate on HTMLButtonElement must enqueue an attributeChanged reaction when replacing an existing attribute define_build_in_custom_element is not defined
+FAIL formTarget on HTMLButtonElement must enqueue an attributeChanged reaction when adding a new attribute define_build_in_custom_element is not defined
+FAIL formTarget on HTMLButtonElement must enqueue an attributeChanged reaction when replacing an existing attribute define_build_in_custom_element is not defined
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/reactions/HTMLButtonElement.html b/third_party/blink/web_tests/external/wpt/custom-elements/reactions/HTMLButtonElement.html
new file mode 100644
index 0000000..90390108b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/custom-elements/reactions/HTMLButtonElement.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html>
+<title>Custom Elements: CEReactions on HTMLButtonElement interface</title>
+<meta name="author" title="Zhang Xiaoyu" href="xiaoyux.zhang@intel.com">
+<meta name="assert" content=" autofocus, disabled, formAction, formEnctype, formMethod, formNoValidate, formTarget, name, type, value of HTMLButtonElement interface must have CEReactions">
+<meta name="help" content="https://html.spec.whatwg.org/#htmlbuttonelement">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../resources/custom-elements-helpers.js"></script>
+<script src="./resources/reactions.js"></script>
+<body>
+<script>
+
+testReflectAttributeWithContentValues('autofocus', 'autofocus', true, 'true', false, 'false', 'autofocus on HTMLButtonElement', 'button', HTMLButtonElement);
+testReflectAttributeWithContentValues('disabled', 'disabled', true, 'true', false, 'false', 'disabled on HTMLButtonElement', 'button', HTMLButtonElement);
+testReflectAttribute('name', 'name', 'intel', 'intel1', 'name on HTMLButtonElement', 'button', HTMLButtonElement);
+testReflectAttribute('value', 'value', 'HTML', 'CSS', 'value on HTMLButtonElement', 'button', HTMLButtonElement);
+testReflectAttrWithParentNode('type', 'type', 'submit', 'submit', 'reset', 'reset', 'type on HTMLButtonElement', 'button', 'form', HTMLButtonElement);
+testReflectAttrWithDepAttr('formAction', 'formaction', 'type', 'intel.asp', 'intel1.asp', 'submit', 'formAction on HTMLButtonElement', 'button', 'form', HTMLButtonElement);
+testReflectAttrWithDepAttr('formEnctype', 'formenctype', 'type', 'text/plain', 'multipart/form-data', 'submit', 'formEnctype on HTMLButtonElement', 'button', 'form', HTMLButtonElement);
+testReflectAttrWithDepAttr('formMethod', 'formmethod', 'type', 'get', 'post', 'submit', 'formMethod on HTMLButtonElement', 'button', 'form', HTMLButtonElement);
+testReflectAttrWithContentValuesAndDepAttr('formNoValidate', 'formnovalidate', 'type', true, 'true', false, 'false', 'submit', 'formNoValidate on HTMLButtonElement', 'button', 'form', HTMLButtonElement);
+testReflectAttrWithDepAttr('formTarget', 'formtarget', 'type', '_blank', '_self', 'submit', 'formTarget on HTMLButtonElement', 'button', 'form', HTMLButtonElement);
+
+//In parent node, sub node's observeAttribute can enqueue by changing attribute value 
+//Test reflect attribute with content values and parent node
+function testReflectAttrWithParentNode(jsAtName, coAtName, jsAtValue1, coAtValue1, jsAtValue2, coAtValue2, name, elementName, pElementName, interfaceName) {
+    var parentElement = document.createElement(pElementName);
+    document.body.appendChild(parentElement);
+
+    test(() => {
+        var element = define_build_in_custom_element([coAtName], interfaceName, elementName);
+        var instance = document.createElement(elementName, { is: element.name });
+
+        assert_array_equals(element.takeLog().types(), ['constructed']);
+        parentElement.appendChild(instance);
+        assert_array_equals(element.takeLog().types(), ['connected']);
+        instance[jsAtName] = jsAtValue1;
+        var logEntries = element.takeLog();
+        assert_array_equals(logEntries.types(), ['attributeChanged']);
+        assert_attribute_log_entry(logEntries.last(), { name: coAtName, oldValue: null, newValue: coAtValue1, namespace: null });
+
+    }, name + ' must enqueue an attributeChanged reaction when adding a new attribute');
+
+    test(() => {
+        var element = define_build_in_custom_element([coAtName], interfaceName, elementName);
+        var instance = document.createElement(elementName, { is: element.name });
+        parentElement.appendChild(instance);
+
+        assert_array_equals(element.takeLog().types(), ['constructed', 'connected']);
+        instance[jsAtName] = jsAtValue1;
+        assert_array_equals(element.takeLog().types(), ['attributeChanged']);
+        instance[jsAtName] = jsAtValue2;
+        var logEntries = element.takeLog();
+        assert_array_equals(logEntries.types(), ['attributeChanged']);
+        assert_attribute_log_entry(logEntries.last(), { name: coAtName, oldValue: coAtValue1, newValue: coAtValue2, namespace: null });
+
+    }, name + ' must enqueue an attributeChanged reaction when replacing an existing attribute');
+
+    parentElement.parentNode.removeChild(parentElement);
+}
+
+//In parent node, sub node's observeAttribute which depends another attribute can enqueue by changing attribute value
+//Test reflect attribute with content values and dependent attribute 
+function testReflectAttrWithContentValuesAndDepAttr(jsAtName, coAtName, deAtName, jsAtValue1, coAtValue1, jsAtValue2, coAtValue2, deAtValue, name, elementName, pElementName, interfaceName) {
+    var parentElement = document.createElement(pElementName);
+    document.body.appendChild(parentElement);
+
+    test(() => {
+        var element = define_build_in_custom_element([coAtName], interfaceName, elementName);
+        var instance = document.createElement(elementName, { is: element.name });
+
+        assert_array_equals(element.takeLog().types(), ['constructed']);
+        parentElement.appendChild(instance);
+        assert_array_equals(element.takeLog().types(), ['connected']);
+        instance.setAttribute(deAtName, deAtValue);
+        instance[jsAtName] = jsAtValue1;
+        var logEntries = element.takeLog();
+        assert_array_equals(logEntries.types(), ['attributeChanged']);
+        assert_attribute_log_entry(logEntries.last(), { name: coAtName, oldValue: null, newValue: coAtValue1, namespace: null });
+
+    }, name + ' must enqueue an attributeChanged reaction when adding a new attribute');
+
+    test(() => {
+        var element = define_build_in_custom_element([coAtName], interfaceName, elementName);
+        var instance = document.createElement(elementName, { is: element.name });
+        parentElement.appendChild(instance);
+        instance.setAttribute(deAtName, deAtValue);
+        instance[jsAtName] = jsAtValue1;
+
+        assert_array_equals(element.takeLog().types(), ['constructed', 'connected', 'attributeChanged']);
+        instance[jsAtName] = jsAtValue2;
+        var logEntries = element.takeLog();
+        assert_array_equals(logEntries.types(), ['attributeChanged']);
+        assert_attribute_log_entry(logEntries.last(), { name: coAtName, oldValue: coAtValue1, newValue: coAtValue2, namespace: null });
+
+    }, name + ' must enqueue an attributeChanged reaction when replacing an existing attribute');
+
+    parentElement.parentNode.removeChild(parentElement);
+}
+
+//Package reflect attribute with dependent attribute
+function testReflectAttrWithDepAttr(jsAtName, coAtName, deAtName, jsAtValue1, jsAtValue2, deAtValue, name, elementName, pElementName, interfaceName) {
+    testReflectAttrWithContentValuesAndDepAttr(jsAtName, coAtName, deAtName, jsAtValue1, jsAtValue1, jsAtValue2, jsAtValue2, deAtValue, name, elementName, pElementName, interfaceName);
+}
+
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/reactions/resources/reactions.js b/third_party/blink/web_tests/external/wpt/custom-elements/reactions/resources/reactions.js
index 43ce4fd7..6ac7ab8 100644
--- a/third_party/blink/web_tests/external/wpt/custom-elements/reactions/resources/reactions.js
+++ b/third_party/blink/web_tests/external/wpt/custom-elements/reactions/resources/reactions.js
@@ -126,10 +126,15 @@
     }, name + ' must enqueue an attributeChanged reaction when cloning an element only for observed attributes');
 }
 
-function testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, contentValue1, validValue2, contentValue2, name) {
+function testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, contentValue1, validValue2, contentValue2, name, elementName, interfaceName) {
     test(function () {
-        var element = define_new_custom_element([contentAttributeName]);
-        var instance = document.createElement(element.name);
+        if (elementName === undefined) {
+            var element = define_new_custom_element([contentAttributeName]);
+            var instance = document.createElement(element.name);
+        } else {
+            var element = define_build_in_custom_element([contentAttributeName], interfaceName, elementName);
+            var instance = document.createElement(elementName, { is: element.name });
+        }
         assert_array_equals(element.takeLog().types(), ['constructed']);
         instance[jsAttributeName] = validValue1;
         var logEntries = element.takeLog();
@@ -139,8 +144,13 @@
     }, name + ' must enqueue an attributeChanged reaction when adding ' + contentAttributeName + ' content attribute');
 
     test(function () {
-        var element = define_new_custom_element([contentAttributeName]);
-        var instance = document.createElement(element.name);
+        if (elementName === undefined) {
+            var element = define_new_custom_element([contentAttributeName]);
+            var instance = document.createElement(element.name);
+        } else {
+            var element = define_build_in_custom_element([contentAttributeName], interfaceName, elementName);
+            var instance = document.createElement(elementName, { is: element.name });
+        }
         instance[jsAttributeName] = validValue1;
         assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']);
         instance[jsAttributeName] = validValue2;
@@ -150,8 +160,8 @@
     }, name + ' must enqueue an attributeChanged reaction when replacing an existing attribute');
 }
 
-function testReflectAttribute(jsAttributeName, contentAttributeName, validValue1, validValue2, name) {
-    testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, validValue1, validValue2, validValue2, name);
+function testReflectAttribute(jsAttributeName, contentAttributeName, validValue1, validValue2, name, elementName, interfaceName) {
+    testReflectAttributeWithContentValues(jsAttributeName, contentAttributeName, validValue1, validValue1, validValue2, validValue2, name, elementName, interfaceName);
 }
 
 function testReflectBooleanAttribute(jsAttributeName, contentAttributeName, name) {
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/Event-timestamp-safe-resolution.html b/third_party/blink/web_tests/external/wpt/dom/events/Event-timestamp-safe-resolution.html
index 5009c8a..24f2dec9 100644
--- a/third_party/blink/web_tests/external/wpt/dom/events/Event-timestamp-safe-resolution.html
+++ b/third_party/blink/web_tests/external/wpt/dom/events/Event-timestamp-safe-resolution.html
@@ -45,5 +45,5 @@
 
   const minResolution = estimateMinimumResolution(samples);
   assert_greater_than_equal(minResolution, 5);
-}, 'Event timestamp should not have a resolution better that 5 microseconds');
+}, 'Event timestamp should not have a resolution better than 5 microseconds');
 </script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/encrypted-media/scripts/waiting-for-a-key.js b/third_party/blink/web_tests/external/wpt/encrypted-media/scripts/waiting-for-a-key.js
index fee70e2..fdfb8556 100644
--- a/third_party/blink/web_tests/external/wpt/encrypted-media/scripts/waiting-for-a-key.js
+++ b/third_party/blink/web_tests/external/wpt/encrypted-media/scripts/waiting-for-a-key.js
@@ -101,7 +101,7 @@
 
         // Typical test duration is 6 seconds on release builds
         // (12 seconds on debug).
-    }, 'Waiting for a key.', {timeout: 20000});
+    }, 'Waiting for a key.');
 
     // Wait for an 'encrypted' event
     function wait_for_encrypted_event(video)
diff --git a/third_party/blink/web_tests/external/wpt/eventsource/event-data.html b/third_party/blink/web_tests/external/wpt/eventsource/event-data.html
index 8f74a01..3751f8e 100644
--- a/third_party/blink/web_tests/external/wpt/eventsource/event-data.html
+++ b/third_party/blink/web_tests/external/wpt/eventsource/event-data.html
@@ -20,7 +20,7 @@
   <body>
     <div id="log"></div>
     <script>
-      var test = async_test(document.title);
+      var test = async_test();
       test.step(function() {
         var source = new EventSource("resources/message2.py"),
             counter = 0;
diff --git a/third_party/blink/web_tests/external/wpt/eventsource/format-field-retry-bogus.htm b/third_party/blink/web_tests/external/wpt/eventsource/format-field-retry-bogus.htm
index 0cdf9b4..56d3ff45 100644
--- a/third_party/blink/web_tests/external/wpt/eventsource/format-field-retry-bogus.htm
+++ b/third_party/blink/web_tests/external/wpt/eventsource/format-field-retry-bogus.htm
@@ -8,7 +8,7 @@
   <body>
     <div id="log"></div>
     <script>
-      var test = async_test(document.title)
+      var test = async_test()
       test.step(function() {
         var timeoutms = 3000,
             source = new EventSource("resources/message.py?message=retry%3A3000%0Aretry%3A1000x%0Adata%3Ax"),
diff --git a/third_party/blink/web_tests/external/wpt/eventsource/format-field-retry.htm b/third_party/blink/web_tests/external/wpt/eventsource/format-field-retry.htm
index 133794f..5f2fe7b4 100644
--- a/third_party/blink/web_tests/external/wpt/eventsource/format-field-retry.htm
+++ b/third_party/blink/web_tests/external/wpt/eventsource/format-field-retry.htm
@@ -8,7 +8,7 @@
   <body>
     <div id="log"></div>
     <script>
-      var test = async_test(document.title);
+      var test = async_test();
       test.step(function() {
         var timeoutms = 3000,
             timeoutstr = "03000", // 1536 in octal, but should be 3000
diff --git a/third_party/blink/web_tests/external/wpt/fetch/content-type/README.md b/third_party/blink/web_tests/external/wpt/fetch/content-type/README.md
new file mode 100644
index 0000000..3a9d1bd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fetch/content-type/README.md
@@ -0,0 +1,20 @@
+# `resources/content-types.json`
+
+An array of tests. Each test has these fields:
+
+* `contentType`: an array of values for the `Content-Type` header. A harness needs to run the test twice if there are multiple values. One time with the values concatenated with `,` followed by a space and one time with multiple `Content-Type` declarations, each on their own line with one of the values, in order.
+* `encoding`: the expected encoding, null for the default.
+* `mimeType`: the result of extracing a MIME type and serializing it.
+* `documentContentType`: the MIME type expected to be exposed in DOM documents.
+
+(These tests are currently somewhat geared towards browser use, but could be generalized easily enough if someone wanted to contribute tests for MIME types that would cause downloads in the browser or some such.)
+
+# `resources/script-content-types.json`
+
+An array of tests, surprise. Each test has these fields:
+
+* `contentType`: see above.
+* `executes`: whether the script is expected to execute.
+* `encoding`: how the script is expected to be decoded.
+
+These tests are expected to be loaded through `<script src>` and the server is expected to set `X-Content-Type-Options: nosniff`.
diff --git a/third_party/blink/web_tests/external/wpt/fetch/content-type/resources/content-type.py b/third_party/blink/web_tests/external/wpt/fetch/content-type/resources/content-type.py
new file mode 100644
index 0000000..0b5e93b9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fetch/content-type/resources/content-type.py
@@ -0,0 +1,15 @@
+def main(request, response):
+    values = request.GET.get_list("value")
+    content = request.GET.first("content", "<b>hi</b>\n")
+    output =  "HTTP/1.1 200 OK\r\n"
+    output += "X-Content-Type-Options: nosniff\r\n"
+    if "single_header" in request.GET:
+        output += "Content-Type: " + ",".join(values) + "\r\n"
+    else:
+        for value in values:
+            output += "Content-Type: " + value + "\r\n"
+    output += "Content-Length: " + str(len(content)) + "\r\n"
+    output += "\r\n"
+    output += content
+    response.writer.write(output)
+    response.close_connection = True
diff --git a/third_party/blink/web_tests/external/wpt/fetch/content-type/resources/content-types.json b/third_party/blink/web_tests/external/wpt/fetch/content-type/resources/content-types.json
new file mode 100644
index 0000000..9578fc50
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fetch/content-type/resources/content-types.json
@@ -0,0 +1,122 @@
+[
+  {
+    "contentType": ["", "text/plain"],
+    "encoding": null,
+    "mimeType": "text/plain",
+    "documentContentType": "text/plain"
+  },
+  {
+    "contentType": ["text/plain", ""],
+    "encoding": null,
+    "mimeType": "text/plain",
+    "documentContentType": "text/plain"
+  },
+  {
+    "contentType": ["text/html", "text/plain"],
+    "encoding": null,
+    "mimeType": "text/plain",
+    "documentContentType": "text/plain"
+  },
+  {
+    "contentType": ["text/plain;charset=gbk", "text/html"],
+    "encoding": null,
+    "mimeType": "text/html",
+    "documentContentType": "text/html"
+  },
+  {
+    "contentType": ["text/plain;charset=gbk", "text/html;charset=windows-1254"],
+    "encoding": "windows-1254",
+    "mimeType": "text/html;charset=windows-1254",
+    "documentContentType": "text/html"
+  },
+  {
+    "contentType": ["text/plain;charset=gbk", "text/plain"],
+    "encoding": "GBK",
+    "mimeType": "text/plain;charset=gbk",
+    "documentContentType": "text/plain"
+  },
+  {
+    "contentType": ["text/plain;charset=gbk", "text/plain;charset=windows-1252"],
+    "encoding": "windows-1252",
+    "mimeType": "text/plain;charset=windows-1252",
+    "documentContentType": "text/plain"
+  },
+  {
+    "contentType": ["text/html;charset=gbk", "text/html;x=\",text/plain"],
+    "encoding": "GBK",
+    "mimeType": "text/html;x=\",text/plain\";charset=gbk",
+    "documentContentType": "text/html"
+  },
+  {
+    "contentType": ["text/plain;charset=gbk;x=foo", "text/plain"],
+    "encoding": "GBK",
+    "mimeType": "text/plain;charset=gbk",
+    "documentContentType": "text/plain"
+  },
+  {
+    "contentType": ["text/html;charset=gbk", "text/plain", "text/html"],
+    "encoding": null,
+    "mimeType": "text/html",
+    "documentContentType": "text/html"
+  },
+  {
+    "contentType": ["text/plain", "*/*"],
+    "encoding": null,
+    "mimeType": "text/plain",
+    "documentContentType": "text/plain"
+  },
+  {
+    "contentType": ["text/html", "*/*"],
+    "encoding": null,
+    "mimeType": "text/html",
+    "documentContentType": "text/html"
+  },
+  {
+    "contentType": ["*/*", "text/html"],
+    "encoding": null,
+    "mimeType": "text/html",
+    "documentContentType": "text/html"
+  },
+  {
+    "contentType": ["text/plain", "*/*;charset=gbk"],
+    "encoding": null,
+    "mimeType": "text/plain",
+    "documentContentType": "text/plain"
+  },
+  {
+    "contentType": ["text/html", "*/*;charset=gbk"],
+    "encoding": null,
+    "mimeType": "text/html",
+    "documentContentType": "text/html"
+  },
+  {
+    "contentType": ["text/html;x=\"", "text/plain"],
+    "encoding": null,
+    "mimeType": "text/html;x=\", text/plain\"",
+    "documentContentType": "text/html"
+  },
+  {
+    "contentType": ["text/html;\"", "text/plain"],
+    "encoding": null,
+    "mimeType": "text/html",
+    "documentContentType": "text/html"
+  },
+  {
+    "contentType": ["text/html;\"", "\\\"", "text/plain"],
+    "encoding": null,
+    "mimeType": "text/html",
+    "documentContentType": "text/html"
+  },
+  {
+    "contentType": ["text/html;\"", "\\\"", "text/plain", "\";charset=GBK"],
+    "encoding": "GBK",
+    "mimeType": "text/html;charset=GBK",
+    "documentContentType": "text/html"
+  },
+  {
+    "contentType": ["text/html;\"",  "\"", "text/plain"],
+    "encoding": null,
+    "mimeType": "text/plain",
+    "documentContentType": "text/plain"
+  }
+]
diff --git a/third_party/blink/web_tests/external/wpt/fetch/content-type/resources/script-content-types.json b/third_party/blink/web_tests/external/wpt/fetch/content-type/resources/script-content-types.json
new file mode 100644
index 0000000..b8a843b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fetch/content-type/resources/script-content-types.json
@@ -0,0 +1,92 @@
+[
+  {
+    "contentType": ["text/javascript;charset=windows-1252"],
+    "executes": true,
+    "encoding": "windows-1252"
+  },
+  {
+    "contentType": ["text/javascript;\";charset=windows-1252"],
+    "executes": true,
+    "encoding": "windows-1252"
+  },
+  {
+    "contentType": ["text/javascript\u000C"],
+    "executes": false,
+    "encoding": null
+  },
+  {
+    "contentType": ["\"text/javascript\""],
+    "executes": false,
+    "encoding": null
+  },
+  {
+    "contentType": ["text/ javascript"],
+    "executes": false,
+    "encoding": null
+  },
+  {
+    "contentType": ["text /javascript"],
+    "executes": false,
+    "encoding": null
+  },
+  {
+    "contentType": ["x/x", "text/javascript"],
+    "executes": true,
+    "encoding": null
+  },
+  {
+    "contentType": ["x/x;charset=windows-1252", "text/javascript"],
+    "executes": true,
+    "encoding": null
+  },
+  {
+    "contentType": ["text/javascript", "x/x"],
+    "executes": false,
+    "encoding": null
+  },
+  {
+    "contentType": ["text/javascript; charset=windows-1252", "text/javascript"],
+    "executes": true,
+    "encoding": "windows-1252"
+  },
+  {
+    "contentType": ["text/javascript;\"", "x/x"],
+    "executes": true,
+    "encoding": null
+  },
+  {
+    "contentType": ["text/javascript", ""],
+    "executes": true,
+    "encoding": null
+  },
+  {
+    "contentType": ["text/javascript", "error"],
+    "executes": true,
+    "encoding": null
+  },
+  {
+    "contentType": ["text/javascript;charset=windows-1252", "x/x", "text/javascript"],
+    "executes": true,
+    "encoding": null
+  },
+  {
+    "contentType": ["text/javascript;charset=windows-1252", "error", "text/javascript"],
+    "executes": true,
+    "encoding": "windows-1252"
+  },
+  {
+    "contentType": ["text/javascript;charset=windows-1252", "", "text/javascript"],
+    "executes": true,
+    "encoding": "windows-1252"
+  },
+  {
+    "contentType": ["text/javascript;charset=windows-1252;\"", "\\\"", "x/x"],
+    "executes": true,
+    "encoding": "windows-1252"
+  },
+  {
+    "contentType": ["x/x;\"", "x/y;\\\"", "text/javascript;charset=windows-1252;\"", "text/javascript"],
+    "executes": true,
+    "encoding": null
+  }
+]
diff --git a/third_party/blink/web_tests/external/wpt/fetch/content-type/response.window.js b/third_party/blink/web_tests/external/wpt/fetch/content-type/response.window.js
new file mode 100644
index 0000000..746f51c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fetch/content-type/response.window.js
@@ -0,0 +1,72 @@
+promise_test(() => {
+  return fetch("resources/content-types.json").then(res => res.json()).then(runTests);
+}, "Loading JSON…");
+
+function runTests(tests) {
+  tests.forEach(testUnit => {
+    runFrameTest(testUnit, false);
+    runFrameTest(testUnit, true);
+    runFetchTest(testUnit, false);
+    runFetchTest(testUnit, true);
+    runRequestResponseTest(testUnit, "Request");
+    runRequestResponseTest(testUnit, "Response");
+  });
+}
+
+function runFrameTest(testUnit, singleHeader) {
+  // Note: window.js is always UTF-8
+  const encoding = testUnit.encoding !== null ? testUnit.encoding : "UTF-8";
+  async_test(t => {
+    const frame = document.body.appendChild(document.createElement("iframe"));
+    t.add_cleanup(() => frame.remove());
+    frame.src = getURL(testUnit.contentType, singleHeader);
+    frame.onload = t.step_func_done(() => {
+      // Edge requires toUpperCase()
+      const doc = frame.contentDocument;
+      assert_equals(doc.characterSet.toUpperCase(), encoding.toUpperCase());
+      if (testUnit.documentContentType === "text/plain") {
+        assert_equals(doc.body.textContent, "<b>hi</b>\n");
+      } else if (testUnit.documentContentType === "text/html") {
+        assert_equals(doc.body.firstChild.localName, "b");
+        assert_equals(doc.body.firstChild.textContent, "hi");
+      }
+      assert_equals(doc.contentType, testUnit.documentContentType);
+    });
+  }, getDesc("<iframe>", testUnit.contentType, singleHeader));
+}
+
+function getDesc(type, input, singleHeader) {
+  return type + ": " + (singleHeader ? "combined" : "separate") + " response Content-Type: " + input.join(" ");
+}
+
+function getURL(input, singleHeader) {
+  // Edge does not support URLSearchParams
+  let url = "resources/content-type.py?"
+  if (singleHeader) {
+    url += "single_header&"
+  }
+  input.forEach(val => {
+    url += "value=" + encodeURIComponent(val) + "&";
+  });
+  return url;
+}
+
+function runFetchTest(testUnit, singleHeader) {
+  promise_test(async t => {
+    const blob = await (await fetch(getURL(testUnit.contentType, singleHeader))).blob();
+    assert_equals(blob.type, testUnit.mimeType);
+  }, getDesc("fetch()", testUnit.contentType, singleHeader));
+}
+
+function runRequestResponseTest(testUnit, stringConstructor) {
+  promise_test(async t => {
+    // Cannot give Response a body as that will set Content-Type, but Request needs a URL
+    const constructorArgument = stringConstructor === "Request" ? "about:blank" : undefined;
+    const r = new self[stringConstructor](constructorArgument);
+    testUnit.contentType.forEach(val => {
+      r.headers.append("Content-Type", val);
+    });
+    const blob = await r.blob();
+    assert_equals(blob.type, testUnit.mimeType);
+  }, getDesc(stringConstructor, testUnit.contentType, true));
+}
diff --git a/third_party/blink/web_tests/external/wpt/fetch/content-type/script.window-expected.txt b/third_party/blink/web_tests/external/wpt/fetch/content-type/script.window-expected.txt
new file mode 100644
index 0000000..d2ddfa3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fetch/content-type/script.window-expected.txt
@@ -0,0 +1,34 @@
+This is a testharness.js-based test.
+PASS Loading JSON…
+PASS separate text/javascript;charset=windows-1252
+PASS separate text/javascript;";charset=windows-1252
+PASS separate text/javascript
+PASS separate "text/javascript"
+PASS separate text/ javascript
+PASS separate text /javascript
+FAIL separate x/x text/javascript assert_unreached: Reached unreachable code
+FAIL combined x/x text/javascript assert_unreached: Reached unreachable code
+FAIL separate x/x;charset=windows-1252 text/javascript assert_unreached: Reached unreachable code
+FAIL combined x/x;charset=windows-1252 text/javascript assert_unreached: Reached unreachable code
+FAIL separate text/javascript x/x assert_unreached: Reached unreachable code
+FAIL combined text/javascript x/x assert_unreached: Reached unreachable code
+PASS separate text/javascript; charset=windows-1252 text/javascript
+PASS combined text/javascript; charset=windows-1252 text/javascript
+PASS separate text/javascript;" x/x
+PASS combined text/javascript;" x/x
+PASS separate text/javascript 
+PASS combined text/javascript 
+PASS separate text/javascript error
+PASS combined text/javascript error
+PASS separate text/javascript;charset=windows-1252 x/x text/javascript
+PASS combined text/javascript;charset=windows-1252 x/x text/javascript
+PASS separate text/javascript;charset=windows-1252 error text/javascript
+PASS combined text/javascript;charset=windows-1252 error text/javascript
+PASS separate text/javascript;charset=windows-1252  text/javascript
+PASS combined text/javascript;charset=windows-1252  text/javascript
+FAIL separate text/javascript;charset=windows-1252;" \" x/x assert_equals: expected "€" but got "€"
+PASS combined text/javascript;charset=windows-1252;" \" x/x
+FAIL separate x/x;" x/y;\" text/javascript;charset=windows-1252;" text/javascript assert_unreached: Reached unreachable code
+FAIL combined x/x;" x/y;\" text/javascript;charset=windows-1252;" text/javascript assert_unreached: Reached unreachable code
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/fetch/content-type/script.window.js b/third_party/blink/web_tests/external/wpt/fetch/content-type/script.window.js
new file mode 100644
index 0000000..88584ce9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/fetch/content-type/script.window.js
@@ -0,0 +1,48 @@
+promise_test(() => {
+  return fetch("resources/script-content-types.json").then(res => res.json()).then(runTests);
+}, "Loading JSON…");
+
+self.stringFromExecutedScript = undefined;
+
+function runTests(allTestData) {
+  allTestData.forEach(testData => {
+    runScriptTest(testData, false);
+    if (testData.contentType.length > 1) {
+      runScriptTest(testData, true);
+    }
+  });
+}
+
+function runScriptTest(testData, singleHeader) {
+  async_test(t => {
+    const script = document.createElement("script");
+      t.add_cleanup(() => {
+      script.remove()
+      self.stringFromExecutedScript = undefined;
+    });
+    script.src = getURL(testData.contentType, singleHeader);
+    document.head.appendChild(script);
+    if (testData.executes) {
+      script.onload = t.step_func_done(() => {
+        assert_equals(self.stringFromExecutedScript, testData.encoding === "windows-1252" ? "€" : "€");
+      });
+      script.onerror = t.unreached_func();
+    } else {
+      script.onerror = t.step_func_done();
+      script.onload = t.unreached_func();
+    }
+  }, (singleHeader ? "combined" : "separate") + " " + testData.contentType.join(" "));
+}
+
+function getURL(input, singleHeader) {
+  // Edge does not support URLSearchParams
+  let url = "resources/content-type.py?"
+  if (singleHeader) {
+    url += "single_header&"
+  }
+  input.forEach(val => {
+    url += "value=" + encodeURIComponent(val) + "&";
+  });
+  url += "&content=" + encodeURIComponent("self.stringFromExecutedScript = \"€\"");
+  return url;
+}
diff --git a/third_party/blink/web_tests/external/wpt/geolocation-API/getCurrentPosition_IDL.https.html b/third_party/blink/web_tests/external/wpt/geolocation-API/getCurrentPosition_IDL.https.html
index 2a85505..75426fc 100644
--- a/third_party/blink/web_tests/external/wpt/geolocation-API/getCurrentPosition_IDL.https.html
+++ b/third_party/blink/web_tests/external/wpt/geolocation-API/getCurrentPosition_IDL.https.html
@@ -1,5 +1,6 @@
 <!DOCTYPE HTML>
 <meta charset="utf-8">
+<meta name=timeout content=long>
 <title>Geolocation Test: getCurrentPosition tests</title>
 <link rel="help" href="http://www.w3.org/TR/geolocation-API/">
 <script src="/resources/testharness.js"></script>
@@ -125,7 +126,7 @@
   fail.done();
 }
 
-success = async_test("getCurrentPosition success callback tests", {timeout:20000});
+success = async_test("getCurrentPosition success callback tests");
 
 // with a longer timeout and with the user accepting the position request,
 // this should test the successcallback
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional-expected.txt
new file mode 100644
index 0000000..4a8ba5d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Allow delaying autoplay until video elements become visible assert_equals: Expected pause event, but got playing event instead expected "pause" but got "playing"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html
new file mode 100644
index 0000000..c009f55
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-hidden.optional.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<title>autoplay hidden</title>
+<link rel="author" title="Intel" href="http://www.intel.com">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/media.html#ready-states"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/media.js"></script>
+<div id="log"></div>
+<script>
+
+promise_test(async t => {
+  let video = document.createElement("video");
+  video.src = getVideoURI("/media/movie_5");
+  video.autoplay = true;
+  // In Safari and Chrome, the video needs to be muted in order to be paused when
+  // hidden. They decided to do this in order to save resources when a video
+  // goes out of view and isn't expected to make any sound.
+  video.muted = true;
+  video.loop = true;
+  let watcher = new EventWatcher(t, video, ["playing", "pause"]);
+  document.body.appendChild(video);
+
+  await watcher.wait_for("playing");
+  assert_false(video.paused, "paused when video is display");
+  video.hidden = true;
+
+  await watcher.wait_for("pause");
+  assert_true(video.paused, "paused when video is hidden");
+  video.hidden = false;
+
+  await watcher.wait_for("playing");
+  assert_false(video.paused, "paused when video is display");
+}, "Allow delaying autoplay until video elements become visible");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/reporting.idl b/third_party/blink/web_tests/external/wpt/interfaces/reporting.idl
index 8e88663..ef20b98 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/reporting.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/reporting.idl
@@ -46,7 +46,6 @@
 };
 
 interface CrashReportBody : ReportBody {
-  readonly attribute DOMString crashId;
   readonly attribute DOMString? reason;
 };
 
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/scroll-animations.idl b/third_party/blink/web_tests/external/wpt/interfaces/scroll-animations.idl
index bb0fde4..2101391 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/scroll-animations.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/scroll-animations.idl
@@ -13,7 +13,7 @@
 enum ScrollTimelineAutoKeyword { "auto" };
 
 dictionary ScrollTimelineOptions {
-  Element scrollSource;
+  Element? scrollSource = null;
   ScrollDirection orientation = "block";
   DOMString startScrollOffset = "auto";
   DOMString endScrollOffset = "auto";
@@ -21,7 +21,8 @@
   FillMode fill = "none";
 };
 
-[Constructor(optional ScrollTimelineOptions options)]
+[Exposed=Window,
+ Constructor(optional ScrollTimelineOptions options)]
 interface ScrollTimeline : AnimationTimeline {
   readonly attribute Element scrollSource;
   readonly attribute ScrollDirection orientation;
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/uievents.idl b/third_party/blink/web_tests/external/wpt/interfaces/uievents.idl
index ba618d7c..b00f7ba 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/uievents.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/uievents.idl
@@ -96,11 +96,13 @@
 interface InputEvent : UIEvent {
   readonly attribute DOMString? data;
   readonly attribute boolean isComposing;
+  readonly attribute DOMString inputType;
 };
 
 dictionary InputEventInit : UIEventInit {
   DOMString? data = "";
   boolean isComposing = false;
+  DOMString inputType = "";
 };
 
 [Constructor(DOMString type, optional KeyboardEventInit eventInitDict), Exposed=Window]
diff --git a/third_party/blink/web_tests/external/wpt/mimesniff/mime-types/parsing.any-expected.txt b/third_party/blink/web_tests/external/wpt/mimesniff/mime-types/parsing.any-expected.txt
index 9232787..2ab64f8 100644
--- a/third_party/blink/web_tests/external/wpt/mimesniff/mime-types/parsing.any-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/mimesniff/mime-types/parsing.any-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 1899 tests; 711 PASS, 1188 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 1905 tests; 711 PASS, 1194 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Loading data…
 PASS text/html;charset=gbk (Blob/File)
 PASS text/html;charset=gbk (Request/Response)
@@ -147,6 +147,12 @@
 FAIL {/} (Request/Response) assert_equals: expected "" but got "{/}"
 PASS Ā/Ā (Blob/File)
 PASS Ā/Ā (Request/Response)
+FAIL text /html (Blob/File) assert_equals: Blob expected "" but got "text /html"
+FAIL text /html (Request/Response) assert_equals: expected "" but got "text /html"
+FAIL text/ html (Blob/File) assert_equals: Blob expected "" but got "text/ html"
+FAIL text/ html (Request/Response) assert_equals: expected "" but got "text/ html"
+FAIL "text/html" (Blob/File) assert_equals: Blob expected "" but got "\"text/html\""
+FAIL "text/html" (Request/Response) assert_equals: expected "" but got "\"text/html\""
 PASS \0/x (Blob/File)
 PASS \0/x (Request/Response)
 PASS x/\0 (Blob/File)
diff --git a/third_party/blink/web_tests/external/wpt/mimesniff/mime-types/parsing.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/mimesniff/mime-types/parsing.any.worker-expected.txt
index 9232787..2ab64f8 100644
--- a/third_party/blink/web_tests/external/wpt/mimesniff/mime-types/parsing.any.worker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/mimesniff/mime-types/parsing.any.worker-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 1899 tests; 711 PASS, 1188 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 1905 tests; 711 PASS, 1194 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Loading data…
 PASS text/html;charset=gbk (Blob/File)
 PASS text/html;charset=gbk (Request/Response)
@@ -147,6 +147,12 @@
 FAIL {/} (Request/Response) assert_equals: expected "" but got "{/}"
 PASS Ā/Ā (Blob/File)
 PASS Ā/Ā (Request/Response)
+FAIL text /html (Blob/File) assert_equals: Blob expected "" but got "text /html"
+FAIL text /html (Request/Response) assert_equals: expected "" but got "text /html"
+FAIL text/ html (Blob/File) assert_equals: Blob expected "" but got "text/ html"
+FAIL text/ html (Request/Response) assert_equals: expected "" but got "text/ html"
+FAIL "text/html" (Blob/File) assert_equals: Blob expected "" but got "\"text/html\""
+FAIL "text/html" (Request/Response) assert_equals: expected "" but got "\"text/html\""
 PASS \0/x (Blob/File)
 PASS \0/x (Request/Response)
 PASS x/\0 (Blob/File)
diff --git a/third_party/blink/web_tests/external/wpt/mimesniff/mime-types/resources/mime-types.json b/third_party/blink/web_tests/external/wpt/mimesniff/mime-types/resources/mime-types.json
index 64654b90..e3cf13d 100644
--- a/third_party/blink/web_tests/external/wpt/mimesniff/mime-types/resources/mime-types.json
+++ b/third_party/blink/web_tests/external/wpt/mimesniff/mime-types/resources/mime-types.json
@@ -367,5 +367,17 @@
   {
     "input": "\u0100/\u0100",
     "output": null
+  },
+  {
+    "input": "text /html",
+    "output": null
+  },
+  {
+    "input": "text/ html",
+    "output": null
+  },
+  {
+    "input": "\"text/html\"",
+    "output": null
   }
 ]
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/free-fall-manual.html b/third_party/blink/web_tests/external/wpt/orientation-event/free-fall-manual.html
index eaec7eb0..c71f61f 100644
--- a/third_party/blink/web_tests/external/wpt/orientation-event/free-fall-manual.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/free-fall-manual.html
@@ -11,7 +11,7 @@
     <p>Free fall the device to run the test, with the screen horizontal and upmost.</p>
     <div id="log"></div>
     <script>
-      var t = async_test(document.title);
+      var t = async_test();
       var run = false;
 
       /*
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/screen-upmost-manual.html b/third_party/blink/web_tests/external/wpt/orientation-event/screen-upmost-manual.html
index 87ad62c5..560c3e3a 100644
--- a/third_party/blink/web_tests/external/wpt/orientation-event/screen-upmost-manual.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/screen-upmost-manual.html
@@ -11,7 +11,7 @@
     <p>Put the device on a horizontal surface with the screen upmost.</p>
     <div id="log"></div>
     <script>
-      var t = async_test(document.title);
+      var t = async_test();
       var run = false;
 
       /*
diff --git a/third_party/blink/web_tests/external/wpt/orientation-event/screen-upright-manual.html b/third_party/blink/web_tests/external/wpt/orientation-event/screen-upright-manual.html
index 0896a38..8a1b6d27d 100644
--- a/third_party/blink/web_tests/external/wpt/orientation-event/screen-upright-manual.html
+++ b/third_party/blink/web_tests/external/wpt/orientation-event/screen-upright-manual.html
@@ -11,7 +11,7 @@
     <p>Put the device with the screen upright.</p>
     <div id="log"></div>
     <script>
-      var t = async_test(document.title);
+      var t = async_test();
       var run = false;
 
       /*
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html b/third_party/blink/web_tests/external/wpt/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html
index ec0aa96..feaaef66 100644
--- a/third_party/blink/web_tests/external/wpt/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html
+++ b/third_party/blink/web_tests/external/wpt/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html
@@ -17,7 +17,6 @@
   assert_idl_attribute(event, "methodDetails");
   const { test } = event.methodDetails;
   assert_equals(test, "pass");
-  assert_equals(event.methodDetails, methodDetails);
 }, "Must have a methodDetails IDL attribute, which is initialized with to the methodName dictionary value");
 
 test(() => {
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/constructor_convert_method_data.https-expected.txt b/third_party/blink/web_tests/external/wpt/payment-request/constructor_convert_method_data.https-expected.txt
new file mode 100644
index 0000000..5f66fe4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/payment-request/constructor_convert_method_data.https-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+PASS Smoke test.
+PASS Tries to convert data member during Payment Request construction, irrespective of PMI.
+FAIL Converts PaymentMethodData's data to mandated IDL type during PaymentRequest construction. promise_test: Unhandled rejection with value: object "UnknownError: Request failed"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/constructor_convert_method_data.https.html b/third_party/blink/web_tests/external/wpt/payment-request/constructor_convert_method_data.https.html
new file mode 100644
index 0000000..56866b4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/payment-request/constructor_convert_method_data.https.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html> <meta charset="utf-8" />
+<title>Validates PaymentMethodData's data member during construction</title>
+<link
+  rel="help"
+  href="https://w3c.github.io/browser-payment-api/#constructor"
+/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+  const details = {
+    total: {
+      label: "Total",
+      amount: {
+        currency: "USD",
+        value: "0.00",
+      },
+    },
+  };
+
+  test(() => {
+    new PaymentRequest([{ supportedMethods: "basic-card" }], details);
+    new PaymentRequest(
+      [{ supportedMethods: "https://apple.com/apple-pay" }],
+      details
+    );
+  }, "Smoke test.");
+
+  const knownPMIs = ["basic-card", "https://apple.com/apple-pay"];
+  const unknownPMIs = ["fake-pmi", "https://does-not.exist"];
+
+  promise_test(async t => {
+    for (const supportedMethods of [].concat(knownPMIs).concat(unknownPMIs)) {
+      const method = { supportedMethods };
+      const request = new PaymentRequest([method], details);
+      assert_throws(
+        new TypeError(),
+        () => {
+          const badMethod = Object.assign(
+            {},
+            method,
+            { data: 123 } // <- this will throw
+          );
+          new PaymentRequest([badMethod], details);
+        },
+        "PaymentMethodData.data can't be converted to an Object."
+      );
+    }
+  }, "Tries to convert data member during Payment Request construction, irrespective of PMI.");
+
+  promise_test(async t => {
+    for (const supportedMethods of knownPMIs) {
+      const method = { supportedMethods };
+      const request = new PaymentRequest([method], details);
+
+      // Only check the PMIs that are actually supported
+      if (!(await request.canMakePayment())) continue;
+
+      assert_throws(
+        new TypeError(),
+        () => {
+          const badMethod = Object.assign(
+            {},
+            method,
+            /* This is invalid in both Apple Pay and Basic Card */
+            { data: { supportedNetworks: "this will throw" } }
+          );
+          new PaymentRequest([badMethod], details);
+        },
+        "PaymentMethodData.data is invalid."
+      );
+    }
+  }, "Converts PaymentMethodData's data to mandated IDL type during PaymentRequest construction.");
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_root_computed_style.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_root_computed_style.html
new file mode 100644
index 0000000..c3034d4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_root_computed_style.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<meta charset=utf-8>
+<title></title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<style type="text/css">
+    :root {
+        pointer-events: none;
+    }
+</style>
+<html>
+    <body>
+    </body>
+</html>
+<script>
+    test(() => {
+        let cs = window.getComputedStyle(document.documentElement).getPropertyValue("pointer-events");
+        assert_equals(cs, 'none');
+    });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_root_hit_test.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_root_hit_test.html
new file mode 100644
index 0000000..b09dfafe
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_root_hit_test.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<meta charset=utf-8>
+<title></title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<style type="text/css">
+    :root {
+        pointer-events: none;
+    }
+</style>
+<html>
+    <body>
+    </body>
+</html>
+<script>
+    test(() => {
+        let element = document.elementFromPoint(50, 50);
+        assert_equals(element, document.documentElement);
+    });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/reporting/idlharness.window-expected.txt b/third_party/blink/web_tests/external/wpt/reporting/idlharness.window-expected.txt
index ced2a2ec..99905f17 100644
--- a/third_party/blink/web_tests/external/wpt/reporting/idlharness.window-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/reporting/idlharness.window-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 56 tests; 10 PASS, 46 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 55 tests; 10 PASS, 45 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS idl_test setup
 FAIL ReportBody interface: existence and properties of interface object assert_own_property: self does not have own property "ReportBody" expected property "ReportBody" missing
 FAIL ReportBody interface object length assert_own_property: self does not have own property "ReportBody" expected property "ReportBody" missing
@@ -54,7 +54,6 @@
 FAIL CrashReportBody interface: existence and properties of interface prototype object assert_own_property: self does not have own property "CrashReportBody" expected property "CrashReportBody" missing
 FAIL CrashReportBody interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "CrashReportBody" expected property "CrashReportBody" missing
 FAIL CrashReportBody interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "CrashReportBody" expected property "CrashReportBody" missing
-FAIL CrashReportBody interface: attribute crashId assert_own_property: self does not have own property "CrashReportBody" expected property "CrashReportBody" missing
 FAIL CrashReportBody interface: attribute reason assert_own_property: self does not have own property "CrashReportBody" expected property "CrashReportBody" missing
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/resource_timing.worker.js b/third_party/blink/web_tests/external/wpt/resource-timing/resource_timing.worker.js
index 92687f0..dafd2e9a 100644
--- a/third_party/blink/web_tests/external/wpt/resource-timing/resource_timing.worker.js
+++ b/third_party/blink/web_tests/external/wpt/resource-timing/resource_timing.worker.js
@@ -59,6 +59,6 @@
   .then(() => {
     t.done();
   });
-}, "Performance Resouce Entries in workers");
+}, "Performance Resource Entries in workers");
 
 done();
diff --git a/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any-expected.txt b/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any-expected.txt
index 2ab7aeb3..3b3c021f 100644
--- a/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any-expected.txt
@@ -1,16 +1,78 @@
 This is a testharness.js-based test.
 PASS Piping through a duck-typed pass-through transform stream should work
 PASS Piping through a transform errored on the writable end does not cause an unhandled promise rejection
-FAIL pipeThrough generically calls pipeTo with the appropriate args Illegal invocation
-FAIL pipeThrough can handle calling a pipeTo that returns a non-promise object Illegal invocation
-FAIL pipeThrough can handle calling a pipeTo that returns a non-promise thenable object Illegal invocation
-FAIL pipeThrough should mark a real promise from a fake readable as handled Illegal invocation
-FAIL pipeThrough should not be fooled by an object whose instanceof Promise returns true Illegal invocation
-PASS undefined readable or writable arguments should cause pipeThrough to throw
-FAIL invalid but not undefined arguments should not cause pipeThrough to throw Failed to execute 'pipeThrough' on 'ReadableStream': Illegal invocation
-PASS pipeThrough should throw when its first argument is not convertible to an object
-PASS pipeThrough should throw when "this" has no pipeTo method
-FAIL pipeThrough should rethrow errors from accessing pipeTo, readable, or writable assert_throws: pipeThrough should rethrow the error thrown by pipeTo function "() => ReadableStream.prototype.pipeThrough.call(throwingPipeTo, { readable: { }, writable: { } }, {})" threw object "TypeError: Illegal invocation" ("TypeError") expected object "Error: potato" ("Error")
-FAIL pipeThrough should work with no options argument Illegal invocation
+PASS pipeThrough should not call pipeTo on this
+PASS pipeThrough should not call pipeTo on the ReadableStream prototype
+PASS pipeThrough should brand-check this and not allow 'null'
+FAIL pipeThrough should brand-check readable and not allow 'null' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'undefined'
+PASS pipeThrough should brand-check readable and not allow 'undefined'
+PASS pipeThrough should brand-check this and not allow '0'
+FAIL pipeThrough should brand-check readable and not allow '0' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'NaN'
+FAIL pipeThrough should brand-check readable and not allow 'NaN' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'true'
+FAIL pipeThrough should brand-check readable and not allow 'true' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'ReadableStream'
+FAIL pipeThrough should brand-check readable and not allow 'ReadableStream' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow '[object ReadableStream]'
+FAIL pipeThrough should brand-check readable and not allow '[object ReadableStream]' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check writable and not allow 'null'
+FAIL pipeThrough should brand-check writable and not allow 'undefined' assert_true: readable should have been accessed expected true got false
+PASS pipeThrough should brand-check writable and not allow '0'
+PASS pipeThrough should brand-check writable and not allow 'NaN'
+PASS pipeThrough should brand-check writable and not allow 'true'
+PASS pipeThrough should brand-check writable and not allow 'WritableStream'
+PASS pipeThrough should brand-check writable and not allow '[object WritableStream]'
+PASS pipeThrough should rethrow errors from accessing readable or writable
+FAIL invalid values of signal should throw; specifically 'null' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically '0' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically 'NaN' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically 'true' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically 'AbortSignal' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically '[object AbortSignal]' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+PASS pipeThrough should accept a real AbortSignal
+PASS pipeThrough should throw if this is locked
+PASS pipeThrough should throw if writable is locked
+PASS pipeThrough should not care if readable is locked
+PASS preventCancel should work
+PASS preventClose should work
+PASS preventAbort should work
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.js b/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.js
index c259513..2b896f5 100644
--- a/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.js
+++ b/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.js
@@ -1,6 +1,7 @@
 // META: global=worker
 // META: script=../resources/rs-utils.js
 // META: script=../resources/test-utils.js
+// META: script=../resources/recording-streams.js
 'use strict';
 
 function duckTypedPassThroughTransform() {
@@ -56,167 +57,97 @@
 }, 'Piping through a transform errored on the writable end does not cause an unhandled promise rejection');
 
 test(() => {
-  let calledWithArgs;
-  const dummy = {
-    pipeTo(...args) {
-      calledWithArgs = args;
-
-      // Does not return anything, testing the spec's guard against trying to mark [[PromiseIsHandled]] on undefined.
-    }
-  };
-
-  const fakeWritable = { fake: 'writable' };
-  const fakeReadable = { fake: 'readable' };
-  const arg2 = { arg: 'arg2' };
-  const arg3 = { arg: 'arg3' };
-  const result =
-    ReadableStream.prototype.pipeThrough.call(dummy, { writable: fakeWritable, readable: fakeReadable }, arg2, arg3);
-
-  assert_array_equals(calledWithArgs, [fakeWritable, arg2],
-    'The this value\'s pipeTo method should be called with the appropriate arguments');
-  assert_equals(result, fakeReadable, 'return value should be the passed readable property');
-
-}, 'pipeThrough generically calls pipeTo with the appropriate args');
-
-test(() => {
-  const dummy = {
+  let calledPipeTo = false;
+  class BadReadableStream extends ReadableStream {
     pipeTo() {
-      return { not: 'a promise' };
+      calledPipeTo = true;
     }
-  };
-
-  ReadableStream.prototype.pipeThrough.call(dummy, uninterestingReadableWritablePair());
-
-  // Test passes if this doesn't throw or crash.
-
-}, 'pipeThrough can handle calling a pipeTo that returns a non-promise object');
-
-test(() => {
-  const dummy = {
-    pipeTo() {
-      return {
-        then() {},
-        this: 'is not a real promise'
-      };
-    }
-  };
-
-  ReadableStream.prototype.pipeThrough.call(dummy, uninterestingReadableWritablePair());
-
-  // Test passes if this doesn't throw or crash.
-
-}, 'pipeThrough can handle calling a pipeTo that returns a non-promise thenable object');
-
-promise_test(() => {
-  const dummy = {
-    pipeTo() {
-      return Promise.reject(new Error('this rejection should not be reported as unhandled'));
-    }
-  };
-
-  ReadableStream.prototype.pipeThrough.call(dummy, uninterestingReadableWritablePair());
-
-  // The test harness should complain about unhandled rejections by then.
-  return flushAsyncEvents();
-
-}, 'pipeThrough should mark a real promise from a fake readable as handled');
-
-test(() => {
-  let thenCalled = false;
-  let catchCalled = false;
-  const dummy = {
-    pipeTo() {
-      const fakePromise = Object.create(Promise.prototype);
-      fakePromise.then = () => {
-        thenCalled = true;
-      };
-      fakePromise.catch = () => {
-        catchCalled = true;
-      };
-      assert_true(fakePromise instanceof Promise, 'fakePromise fools instanceof');
-      return fakePromise;
-    }
-  };
-
-  // An incorrect implementation which uses an internal method to mark the promise as handled will throw or crash here.
-  ReadableStream.prototype.pipeThrough.call(dummy, uninterestingReadableWritablePair());
-
-  // An incorrect implementation that tries to mark the promise as handled by calling .then() or .catch() on the object
-  // will fail these tests.
-  assert_false(thenCalled, 'then should not be called');
-  assert_false(catchCalled, 'catch should not be called');
-}, 'pipeThrough should not be fooled by an object whose instanceof Promise returns true');
-
-test(() => {
-  const pairs = [
-    {},
-    { readable: undefined, writable: undefined },
-    { readable: 'readable' },
-    { readable: 'readable', writable: undefined },
-    { writable: 'writable' },
-    { readable: undefined, writable: 'writable' }
-  ];
-  for (let i = 0; i < pairs.length; ++i) {
-    const pair = pairs[i];
-    const rs = new ReadableStream();
-    assert_throws(new TypeError(), () => rs.pipeThrough(pair),
-                  `pipeThrough should throw for argument ${JSON.stringify(pair)} (index ${i});`);
   }
-}, 'undefined readable or writable arguments should cause pipeThrough to throw');
 
-test(() => {
-  const invalidArguments = [null, 0, NaN, '', [], {}, false, () => {}];
-  for (const arg of invalidArguments) {
+  const brs = new BadReadableStream({
+    start(controller) {
+      controller.close();
+    }
+  });
+  const readable = new ReadableStream();
+  const writable = new WritableStream();
+  const result = brs.pipeThrough({ readable, writable });
+
+  assert_false(calledPipeTo, 'the overridden pipeTo should not have been called');
+  assert_equals(result, readable, 'return value should be the passed readable property');
+}, 'pipeThrough should not call pipeTo on this');
+
+test(t => {
+  let calledFakePipeTo = false;
+  const realPipeTo = ReadableStream.prototype.pipeTo;
+  t.add_cleanup(() => {
+    ReadableStream.prototype.pipeTo = realPipeTo;
+  });
+  ReadableStream.prototype.pipeTo = () => {
+    calledFakePipeTo = true;
+  };
+  const rs = new ReadableStream();
+  const readable = new ReadableStream();
+  const writable = new WritableStream();
+  const result = rs.pipeThrough({ readable, writable });
+
+  assert_false(calledFakePipeTo, 'the monkey-patched pipeTo should not have been called');
+  assert_equals(result, readable, 'return value should be the passed readable property');
+
+}, 'pipeThrough should not call pipeTo on the ReadableStream prototype');
+
+const badReadables = [null, undefined, 0, NaN, true, 'ReadableStream', Object.create(ReadableStream.prototype)];
+for (const readable of badReadables) {
+  test(() => {
+    assert_throws(new TypeError(),
+                  ReadableStream.prototype.pipeThrough.bind(readable, uninterestingReadableWritablePair()),
+                  'pipeThrough should throw');
+  }, `pipeThrough should brand-check this and not allow '${readable}'`);
+
+  test(() => {
     const rs = new ReadableStream();
-    assert_equals(arg, rs.pipeThrough({ writable: new WritableStream(), readable: arg }),
-                  'pipeThrough() should not throw for readable: ' + JSON.stringify(arg));
-    const rs2 = new ReadableStream();
-    assert_equals(rs2, rs.pipeThrough({ writable: arg, readable: rs2 }),
-                  'pipeThrough() should not throw for writable: ' + JSON.stringify(arg));
-  }
-}, 'invalid but not undefined arguments should not cause pipeThrough to throw');
+    const writable = new WritableStream();
+    let writableGetterCalled = false;
+    assert_throws(new TypeError(), () => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    }),
+                  'pipeThrough should brand-check readable');
+    assert_true(writableGetterCalled, 'writable should have been accessed');
+  }, `pipeThrough should brand-check readable and not allow '${readable}'`);
+}
 
-test(() => {
+const badWritables = [null, undefined, 0, NaN, true, 'WritableStream', Object.create(WritableStream.prototype)];
+for (const writable of badWritables) {
+  test(() => {
+    const rs = new ReadableStream({
+      start(c) {
+        c.close();
+      }
+    });
+    let readableGetterCalled = false;
+    assert_throws(new TypeError(), () => rs.pipeThrough({
+      get readable() {
+        readableGetterCalled = true;
+        return new ReadableStream();
+      },
+      writable
+    }),
+                  'pipeThrough should brand-check writable');
+    assert_true(readableGetterCalled, 'readable should have been accessed');
+  }, `pipeThrough should brand-check writable and not allow '${writable}'`);
+}
 
-  const thisValue = {
-    pipeTo() {
-      assert_unreached('pipeTo should not be called');
-    }
-  };
+test(t => {
+  const error = new Error();
+  error.name = 'custom';
 
-  methodThrows(ReadableStream.prototype, 'pipeThrough', thisValue, [undefined, {}]);
-  methodThrows(ReadableStream.prototype, 'pipeThrough', thisValue, [null, {}]);
-
-}, 'pipeThrough should throw when its first argument is not convertible to an object');
-
-test(() => {
-
-  const args = [{ readable: {}, writable: {} }, {}];
-
-  methodThrows(ReadableStream.prototype, 'pipeThrough', undefined, args);
-  methodThrows(ReadableStream.prototype, 'pipeThrough', null, args);
-  methodThrows(ReadableStream.prototype, 'pipeThrough', 1, args);
-  methodThrows(ReadableStream.prototype, 'pipeThrough', { pipeTo: 'test' }, args);
-
-}, 'pipeThrough should throw when "this" has no pipeTo method');
-
-test(() => {
-  const error = new Error('potato');
-
-  const throwingPipeTo = {
-    get pipeTo() {
-      throw error;
-    }
-  };
-  assert_throws(error,
-    () => ReadableStream.prototype.pipeThrough.call(throwingPipeTo, { readable: { }, writable: { } }, {}),
-    'pipeThrough should rethrow the error thrown by pipeTo');
-
-  const thisValue = {
-    pipeTo() {
-      assert_unreached('pipeTo should not be called');
-    }
-  };
+  const rs = new ReadableStream({
+    pull: t.unreached_func('pull should not be called')
+  }, { highWaterMark: 0 });
 
   const throwingWritable = {
     readable: {},
@@ -225,8 +156,8 @@
     }
   };
   assert_throws(error,
-    () => ReadableStream.prototype.pipeThrough.call(thisValue, throwingWritable, {}),
-    'pipeThrough should rethrow the error thrown by the writable getter');
+                () => ReadableStream.prototype.pipeThrough.call(rs, throwingWritable, {}),
+                'pipeThrough should rethrow the error thrown by the writable getter');
 
   const throwingReadable = {
     get readable() {
@@ -235,22 +166,90 @@
     writable: {}
   };
   assert_throws(error,
-    () => ReadableStream.prototype.pipeThrough.call(thisValue, throwingReadable, {}),
-    'pipeThrough should rethrow the error thrown by the readable getter');
+                () => ReadableStream.prototype.pipeThrough.call(rs, throwingReadable, {}),
+                'pipeThrough should rethrow the error thrown by the readable getter');
 
-}, 'pipeThrough should rethrow errors from accessing pipeTo, readable, or writable');
+}, 'pipeThrough should rethrow errors from accessing readable or writable');
+
+const badSignals = [null, 0, NaN, true, 'AbortSignal', Object.create(AbortSignal.prototype)];
+for (const signal of badSignals) {
+  test(() => {
+    const rs = new ReadableStream();
+    assert_throws(new TypeError(), () => rs.pipeThrough(uninterestingReadableWritablePair(), { signal }),
+                  'pipeThrough should throw');
+  }, `invalid values of signal should throw; specifically '${signal}'`);
+}
 
 test(() => {
+  const rs = new ReadableStream();
+  const controller = new AbortController();
+  const signal = controller.signal;
+  rs.pipeThrough(uninterestingReadableWritablePair(), { signal });
+}, 'pipeThrough should accept a real AbortSignal');
 
-  let count = 0;
-  const thisValue = {
-    pipeTo() {
-      ++count;
+test(() => {
+  const rs = new ReadableStream();
+  rs.getReader();
+  assert_throws(new TypeError(), () => rs.pipeThrough(uninterestingReadableWritablePair()),
+                'pipeThrough should throw');
+}, 'pipeThrough should throw if this is locked');
+
+test(() => {
+  const rs = new ReadableStream();
+  const writable = new WritableStream();
+  const readable = new ReadableStream();
+  writable.getWriter();
+  assert_throws(new TypeError(), () => rs.pipeThrough({writable, readable}),
+                'pipeThrough should throw');
+}, 'pipeThrough should throw if writable is locked');
+
+test(() => {
+  const rs = new ReadableStream();
+  const writable = new WritableStream();
+  const readable = new ReadableStream();
+  readable.getReader();
+  assert_equals(rs.pipeThrough({ writable, readable }), readable,
+                'pipeThrough should not throw');
+}, 'pipeThrough should not care if readable is locked');
+
+promise_test(() => {
+  const rs = recordingReadableStream();
+  const writable = new WritableStream({
+    start(controller) {
+      controller.error();
     }
-  };
+  });
+  const readable = new ReadableStream();
+  rs.pipeThrough({ writable, readable }, { preventCancel: true });
+  return flushAsyncEvents(0).then(() => {
+    assert_array_equals(rs.events, ['pull'], 'cancel should not have been called');
+  });
+}, 'preventCancel should work');
 
-  ReadableStream.prototype.pipeThrough.call(thisValue, { readable: {}, writable: {} });
+promise_test(() => {
+  const rs = new ReadableStream({
+    start(controller) {
+      controller.close();
+    }
+  });
+  const writable = recordingWritableStream();
+  const readable = new ReadableStream();
+  rs.pipeThrough({ writable, readable }, { preventClose: true });
+  return flushAsyncEvents(0).then(() => {
+    assert_array_equals(writable.events, [], 'writable should not be closed');
+  });
+}, 'preventClose should work');
 
-  assert_equals(count, 1, 'pipeTo was called once');
-
-}, 'pipeThrough should work with no options argument');
+promise_test(() => {
+  const rs = new ReadableStream({
+    start(controller) {
+      controller.error();
+    }
+  });
+  const writable = recordingWritableStream();
+  const readable = new ReadableStream();
+  rs.pipeThrough({ writable, readable }, { preventAbort: true });
+  return flushAsyncEvents(0).then(() => {
+    assert_array_equals(writable.events, [], 'writable should not be aborted');
+  });
+}, 'preventAbort should work');
diff --git a/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.serviceworker-expected.txt
index 2ab7aeb3..3b3c021f 100644
--- a/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.serviceworker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.serviceworker-expected.txt
@@ -1,16 +1,78 @@
 This is a testharness.js-based test.
 PASS Piping through a duck-typed pass-through transform stream should work
 PASS Piping through a transform errored on the writable end does not cause an unhandled promise rejection
-FAIL pipeThrough generically calls pipeTo with the appropriate args Illegal invocation
-FAIL pipeThrough can handle calling a pipeTo that returns a non-promise object Illegal invocation
-FAIL pipeThrough can handle calling a pipeTo that returns a non-promise thenable object Illegal invocation
-FAIL pipeThrough should mark a real promise from a fake readable as handled Illegal invocation
-FAIL pipeThrough should not be fooled by an object whose instanceof Promise returns true Illegal invocation
-PASS undefined readable or writable arguments should cause pipeThrough to throw
-FAIL invalid but not undefined arguments should not cause pipeThrough to throw Failed to execute 'pipeThrough' on 'ReadableStream': Illegal invocation
-PASS pipeThrough should throw when its first argument is not convertible to an object
-PASS pipeThrough should throw when "this" has no pipeTo method
-FAIL pipeThrough should rethrow errors from accessing pipeTo, readable, or writable assert_throws: pipeThrough should rethrow the error thrown by pipeTo function "() => ReadableStream.prototype.pipeThrough.call(throwingPipeTo, { readable: { }, writable: { } }, {})" threw object "TypeError: Illegal invocation" ("TypeError") expected object "Error: potato" ("Error")
-FAIL pipeThrough should work with no options argument Illegal invocation
+PASS pipeThrough should not call pipeTo on this
+PASS pipeThrough should not call pipeTo on the ReadableStream prototype
+PASS pipeThrough should brand-check this and not allow 'null'
+FAIL pipeThrough should brand-check readable and not allow 'null' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'undefined'
+PASS pipeThrough should brand-check readable and not allow 'undefined'
+PASS pipeThrough should brand-check this and not allow '0'
+FAIL pipeThrough should brand-check readable and not allow '0' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'NaN'
+FAIL pipeThrough should brand-check readable and not allow 'NaN' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'true'
+FAIL pipeThrough should brand-check readable and not allow 'true' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'ReadableStream'
+FAIL pipeThrough should brand-check readable and not allow 'ReadableStream' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow '[object ReadableStream]'
+FAIL pipeThrough should brand-check readable and not allow '[object ReadableStream]' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check writable and not allow 'null'
+FAIL pipeThrough should brand-check writable and not allow 'undefined' assert_true: readable should have been accessed expected true got false
+PASS pipeThrough should brand-check writable and not allow '0'
+PASS pipeThrough should brand-check writable and not allow 'NaN'
+PASS pipeThrough should brand-check writable and not allow 'true'
+PASS pipeThrough should brand-check writable and not allow 'WritableStream'
+PASS pipeThrough should brand-check writable and not allow '[object WritableStream]'
+PASS pipeThrough should rethrow errors from accessing readable or writable
+FAIL invalid values of signal should throw; specifically 'null' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically '0' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically 'NaN' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically 'true' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically 'AbortSignal' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically '[object AbortSignal]' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+PASS pipeThrough should accept a real AbortSignal
+PASS pipeThrough should throw if this is locked
+PASS pipeThrough should throw if writable is locked
+PASS pipeThrough should not care if readable is locked
+PASS preventCancel should work
+PASS preventClose should work
+PASS preventAbort should work
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.sharedworker-expected.txt
index 2ab7aeb3..3b3c021f 100644
--- a/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.sharedworker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.sharedworker-expected.txt
@@ -1,16 +1,78 @@
 This is a testharness.js-based test.
 PASS Piping through a duck-typed pass-through transform stream should work
 PASS Piping through a transform errored on the writable end does not cause an unhandled promise rejection
-FAIL pipeThrough generically calls pipeTo with the appropriate args Illegal invocation
-FAIL pipeThrough can handle calling a pipeTo that returns a non-promise object Illegal invocation
-FAIL pipeThrough can handle calling a pipeTo that returns a non-promise thenable object Illegal invocation
-FAIL pipeThrough should mark a real promise from a fake readable as handled Illegal invocation
-FAIL pipeThrough should not be fooled by an object whose instanceof Promise returns true Illegal invocation
-PASS undefined readable or writable arguments should cause pipeThrough to throw
-FAIL invalid but not undefined arguments should not cause pipeThrough to throw Failed to execute 'pipeThrough' on 'ReadableStream': Illegal invocation
-PASS pipeThrough should throw when its first argument is not convertible to an object
-PASS pipeThrough should throw when "this" has no pipeTo method
-FAIL pipeThrough should rethrow errors from accessing pipeTo, readable, or writable assert_throws: pipeThrough should rethrow the error thrown by pipeTo function "() => ReadableStream.prototype.pipeThrough.call(throwingPipeTo, { readable: { }, writable: { } }, {})" threw object "TypeError: Illegal invocation" ("TypeError") expected object "Error: potato" ("Error")
-FAIL pipeThrough should work with no options argument Illegal invocation
+PASS pipeThrough should not call pipeTo on this
+PASS pipeThrough should not call pipeTo on the ReadableStream prototype
+PASS pipeThrough should brand-check this and not allow 'null'
+FAIL pipeThrough should brand-check readable and not allow 'null' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'undefined'
+PASS pipeThrough should brand-check readable and not allow 'undefined'
+PASS pipeThrough should brand-check this and not allow '0'
+FAIL pipeThrough should brand-check readable and not allow '0' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'NaN'
+FAIL pipeThrough should brand-check readable and not allow 'NaN' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'true'
+FAIL pipeThrough should brand-check readable and not allow 'true' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'ReadableStream'
+FAIL pipeThrough should brand-check readable and not allow 'ReadableStream' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow '[object ReadableStream]'
+FAIL pipeThrough should brand-check readable and not allow '[object ReadableStream]' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check writable and not allow 'null'
+FAIL pipeThrough should brand-check writable and not allow 'undefined' assert_true: readable should have been accessed expected true got false
+PASS pipeThrough should brand-check writable and not allow '0'
+PASS pipeThrough should brand-check writable and not allow 'NaN'
+PASS pipeThrough should brand-check writable and not allow 'true'
+PASS pipeThrough should brand-check writable and not allow 'WritableStream'
+PASS pipeThrough should brand-check writable and not allow '[object WritableStream]'
+PASS pipeThrough should rethrow errors from accessing readable or writable
+FAIL invalid values of signal should throw; specifically 'null' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically '0' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically 'NaN' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically 'true' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically 'AbortSignal' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically '[object AbortSignal]' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+PASS pipeThrough should accept a real AbortSignal
+PASS pipeThrough should throw if this is locked
+PASS pipeThrough should throw if writable is locked
+PASS pipeThrough should not care if readable is locked
+PASS preventCancel should work
+PASS preventClose should work
+PASS preventAbort should work
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.worker-expected.txt
index 2ab7aeb3..3b3c021f 100644
--- a/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.worker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/streams/piping/pipe-through.any.worker-expected.txt
@@ -1,16 +1,78 @@
 This is a testharness.js-based test.
 PASS Piping through a duck-typed pass-through transform stream should work
 PASS Piping through a transform errored on the writable end does not cause an unhandled promise rejection
-FAIL pipeThrough generically calls pipeTo with the appropriate args Illegal invocation
-FAIL pipeThrough can handle calling a pipeTo that returns a non-promise object Illegal invocation
-FAIL pipeThrough can handle calling a pipeTo that returns a non-promise thenable object Illegal invocation
-FAIL pipeThrough should mark a real promise from a fake readable as handled Illegal invocation
-FAIL pipeThrough should not be fooled by an object whose instanceof Promise returns true Illegal invocation
-PASS undefined readable or writable arguments should cause pipeThrough to throw
-FAIL invalid but not undefined arguments should not cause pipeThrough to throw Failed to execute 'pipeThrough' on 'ReadableStream': Illegal invocation
-PASS pipeThrough should throw when its first argument is not convertible to an object
-PASS pipeThrough should throw when "this" has no pipeTo method
-FAIL pipeThrough should rethrow errors from accessing pipeTo, readable, or writable assert_throws: pipeThrough should rethrow the error thrown by pipeTo function "() => ReadableStream.prototype.pipeThrough.call(throwingPipeTo, { readable: { }, writable: { } }, {})" threw object "TypeError: Illegal invocation" ("TypeError") expected object "Error: potato" ("Error")
-FAIL pipeThrough should work with no options argument Illegal invocation
+PASS pipeThrough should not call pipeTo on this
+PASS pipeThrough should not call pipeTo on the ReadableStream prototype
+PASS pipeThrough should brand-check this and not allow 'null'
+FAIL pipeThrough should brand-check readable and not allow 'null' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'undefined'
+PASS pipeThrough should brand-check readable and not allow 'undefined'
+PASS pipeThrough should brand-check this and not allow '0'
+FAIL pipeThrough should brand-check readable and not allow '0' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'NaN'
+FAIL pipeThrough should brand-check readable and not allow 'NaN' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'true'
+FAIL pipeThrough should brand-check readable and not allow 'true' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow 'ReadableStream'
+FAIL pipeThrough should brand-check readable and not allow 'ReadableStream' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check this and not allow '[object ReadableStream]'
+FAIL pipeThrough should brand-check readable and not allow '[object ReadableStream]' assert_throws: pipeThrough should brand-check readable function "() => rs.pipeThrough({
+      get writable() {
+        writableGetterCalled = true;
+        return new WritableStream();
+      },
+      readable
+    })" did not throw
+PASS pipeThrough should brand-check writable and not allow 'null'
+FAIL pipeThrough should brand-check writable and not allow 'undefined' assert_true: readable should have been accessed expected true got false
+PASS pipeThrough should brand-check writable and not allow '0'
+PASS pipeThrough should brand-check writable and not allow 'NaN'
+PASS pipeThrough should brand-check writable and not allow 'true'
+PASS pipeThrough should brand-check writable and not allow 'WritableStream'
+PASS pipeThrough should brand-check writable and not allow '[object WritableStream]'
+PASS pipeThrough should rethrow errors from accessing readable or writable
+FAIL invalid values of signal should throw; specifically 'null' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically '0' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically 'NaN' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically 'true' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically 'AbortSignal' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+FAIL invalid values of signal should throw; specifically '[object AbortSignal]' assert_throws: pipeThrough should throw function "() => rs.pipeThrough(uninterestingReadableWritablePair(), { signal })" did not throw
+PASS pipeThrough should accept a real AbortSignal
+PASS pipeThrough should throw if this is locked
+PASS pipeThrough should throw if writable is locked
+PASS pipeThrough should not care if readable is locked
+PASS preventCancel should work
+PASS preventClose should work
+PASS preventAbort should work
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any-expected.txt
index 4b5d005c..6cc846a 100644
--- a/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any-expected.txt
@@ -32,7 +32,7 @@
 PASS ReadableStream: should call underlying source methods as methods
 PASS ReadableStream: desiredSize when closed
 PASS ReadableStream: desiredSize when errored
-PASS ReadableStream: ReadableStream is extendable
+PASS Subclassing ReadableStream should work
 PASS ReadableStream strategies: the default strategy should give desiredSize of 1 to start, decreasing by 1 per enqueue
 PASS ReadableStream strategies: the default strategy should continue giving desiredSize of 1 if the chunks are read immediately
 PASS ReadableStream integration test: adapting a random push source
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.js b/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.js
index 21b1812e..5e8a4af 100644
--- a/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.js
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.js
@@ -67,7 +67,7 @@
   assert_equals(rs.cancel.length, 1, 'cancel should have 1 parameter');
   assert_equals(rs.constructor.length, 0, 'constructor should have no parameters');
   assert_equals(rs.getReader.length, 0, 'getReader should have no parameters');
-  assert_equals(rs.pipeThrough.length, 2, 'pipeThrough should have 2 parameters');
+  assert_equals(rs.pipeThrough.length, 1, 'pipeThrough should have 1 parameters');
   assert_equals(rs.pipeTo.length, 1, 'pipeTo should have 1 parameter');
   assert_equals(rs.tee.length, 0, 'tee should have no parameters');
 
@@ -772,11 +772,28 @@
 }, 'ReadableStream: desiredSize when errored');
 
 test(() => {
-   class Extended extends ReadableStream {
-     newMethod() { return 'foo' };
-   };
-   assert_equals((new Extended()).newMethod(), 'foo');
-}, 'ReadableStream: ReadableStream is extendable');
+  class Subclass extends ReadableStream {
+    extraFunction() {
+      return true;
+    }
+  }
+  assert_equals(
+      Object.getPrototypeOf(Subclass.prototype), ReadableStream.prototype,
+      'Subclass.prototype\'s prototype should be ReadableStream.prototype');
+  assert_equals(Object.getPrototypeOf(Subclass), ReadableStream,
+                'Subclass\'s prototype should be ReadableStream');
+  const sub = new Subclass();
+  assert_true(sub instanceof ReadableStream,
+              'Subclass object should be an instance of ReadableStream');
+  assert_true(sub instanceof Subclass,
+              'Subclass object should be an instance of Subclass');
+  const lockedGetter = Object.getOwnPropertyDescriptor(
+      ReadableStream.prototype, 'locked').get;
+  assert_equals(lockedGetter.call(sub), sub.locked,
+                'Subclass object should pass brand check');
+  assert_true(sub.extraFunction(),
+              'extraFunction() should be present on Subclass object');
+}, 'Subclassing ReadableStream should work');
 
 test(() => {
 
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.serviceworker-expected.txt
index 4b5d005c..6cc846a 100644
--- a/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.serviceworker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.serviceworker-expected.txt
@@ -32,7 +32,7 @@
 PASS ReadableStream: should call underlying source methods as methods
 PASS ReadableStream: desiredSize when closed
 PASS ReadableStream: desiredSize when errored
-PASS ReadableStream: ReadableStream is extendable
+PASS Subclassing ReadableStream should work
 PASS ReadableStream strategies: the default strategy should give desiredSize of 1 to start, decreasing by 1 per enqueue
 PASS ReadableStream strategies: the default strategy should continue giving desiredSize of 1 if the chunks are read immediately
 PASS ReadableStream integration test: adapting a random push source
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.sharedworker-expected.txt
index 4b5d005c..6cc846a 100644
--- a/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.sharedworker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.sharedworker-expected.txt
@@ -32,7 +32,7 @@
 PASS ReadableStream: should call underlying source methods as methods
 PASS ReadableStream: desiredSize when closed
 PASS ReadableStream: desiredSize when errored
-PASS ReadableStream: ReadableStream is extendable
+PASS Subclassing ReadableStream should work
 PASS ReadableStream strategies: the default strategy should give desiredSize of 1 to start, decreasing by 1 per enqueue
 PASS ReadableStream strategies: the default strategy should continue giving desiredSize of 1 if the chunks are read immediately
 PASS ReadableStream integration test: adapting a random push source
diff --git a/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.worker-expected.txt
index 4b5d005c..6cc846a 100644
--- a/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.worker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/streams/readable-streams/general.any.worker-expected.txt
@@ -32,7 +32,7 @@
 PASS ReadableStream: should call underlying source methods as methods
 PASS ReadableStream: desiredSize when closed
 PASS ReadableStream: desiredSize when errored
-PASS ReadableStream: ReadableStream is extendable
+PASS Subclassing ReadableStream should work
 PASS ReadableStream strategies: the default strategy should give desiredSize of 1 to start, decreasing by 1 per enqueue
 PASS ReadableStream strategies: the default strategy should continue giving desiredSize of 1 if the chunks are read immediately
 PASS ReadableStream integration test: adapting a random push source
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/simplecall-no-ssrcs.https.html b/third_party/blink/web_tests/external/wpt/webrtc/simplecall-no-ssrcs.https.html
index 8777910..d79f6af 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc/simplecall-no-ssrcs.https.html
+++ b/third_party/blink/web_tests/external/wpt/webrtc/simplecall-no-ssrcs.https.html
@@ -17,7 +17,7 @@
   <script src="/resources/testharness.js"></script>
   <script src="/resources/testharnessreport.js"></script>
   <script type="text/javascript">
-  var test = async_test('Can set up a basic WebRTC call without announcing ssrcs.', {timeout: 5000});
+  var test = async_test('Can set up a basic WebRTC call without announcing ssrcs.');
 
   var gFirstConnection = null;
   var gSecondConnection = null;
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/simplecall.https.html b/third_party/blink/web_tests/external/wpt/webrtc/simplecall.https.html
index 681c42d..291437a5 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc/simplecall.https.html
+++ b/third_party/blink/web_tests/external/wpt/webrtc/simplecall.https.html
@@ -17,7 +17,7 @@
   <script src="/resources/testharness.js"></script>
   <script src="/resources/testharnessreport.js"></script>
   <script type="text/javascript">
-  var test = async_test('Can set up a basic WebRTC call.', {timeout: 5000});
+  var test = async_test('Can set up a basic WebRTC call.');
 
   var gFirstConnection = null;
   var gSecondConnection = null;
diff --git a/third_party/blink/web_tests/external/wpt/xhr/abort-during-upload.htm b/third_party/blink/web_tests/external/wpt/xhr/abort-during-upload.htm
index 9fbc8b9..9732791 100644
--- a/third_party/blink/web_tests/external/wpt/xhr/abort-during-upload.htm
+++ b/third_party/blink/web_tests/external/wpt/xhr/abort-during-upload.htm
@@ -11,7 +11,7 @@
   <body>
     <div id="log"></div>
     <script>
-      var test = async_test(document.title, {timeout:1100})
+      var test = async_test()
       test.step(function() {
         var client = new XMLHttpRequest()
         prepare_xhr_for_event_order_test(client);
diff --git a/third_party/blink/web_tests/external/wpt/xhr/overridemimetype-blob-expected.txt b/third_party/blink/web_tests/external/wpt/xhr/overridemimetype-blob-expected.txt
index e180f4a..8a5fe93 100644
--- a/third_party/blink/web_tests/external/wpt/xhr/overridemimetype-blob-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/xhr/overridemimetype-blob-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 71 tests; 21 PASS, 50 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 74 tests; 22 PASS, 52 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS Use text/xml as fallback MIME type
 PASS Use text/xml as fallback MIME type, 2
 PASS Loading data…
@@ -76,5 +76,8 @@
 PASS 66) MIME types need to be parsed and serialized: text/html(;doesnot=matter
 FAIL 67) MIME types need to be parsed and serialized: {/} assert_equals: expected "application/octet-stream" but got "{/}"
 PASS 68) MIME types need to be parsed and serialized: Ā/Ā
+FAIL 69) MIME types need to be parsed and serialized: text /html assert_equals: expected "application/octet-stream" but got "text /html"
+FAIL 70) MIME types need to be parsed and serialized: text/ html assert_equals: expected "application/octet-stream" but got "text/ html"
+PASS 71) MIME types need to be parsed and serialized: "text/html"
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/xhr/send-redirect-bogus.htm b/third_party/blink/web_tests/external/wpt/xhr/send-redirect-bogus.htm
index a46fc1d3..ad50b56 100644
--- a/third_party/blink/web_tests/external/wpt/xhr/send-redirect-bogus.htm
+++ b/third_party/blink/web_tests/external/wpt/xhr/send-redirect-bogus.htm
@@ -11,7 +11,7 @@
     <div id="log"></div>
     <script>
       function redirect(code, location) {
-        var test = async_test(document.title + " (" + code + ": " + location + ")", {timeout: 20000})
+        var test = async_test(document.title + " (" + code + ": " + location + ")");
         test.step(function() {
           var client = new XMLHttpRequest()
           client.onreadystatechange = function() {
diff --git a/third_party/blink/web_tests/external/wpt/xhr/timeout-cors-async.htm b/third_party/blink/web_tests/external/wpt/xhr/timeout-cors-async.htm
index 35e2a30b..74397ba8 100644
--- a/third_party/blink/web_tests/external/wpt/xhr/timeout-cors-async.htm
+++ b/third_party/blink/web_tests/external/wpt/xhr/timeout-cors-async.htm
@@ -13,7 +13,7 @@
   <body>
     <div id="log"></div>
     <script>
-      var test = async_test(document.title)
+      var test = async_test()
       var client = new XMLHttpRequest()
       var gotTimeout = false
       client.open("GET", "http://www2." + location.hostname + (location.port ? ":" + location.port : "") +(location.pathname.replace(/[^\/]+$/, '')+'resources/corsenabled.py')+"?delay=2&code=200")
diff --git a/third_party/blink/web_tests/fast/animation/request-animation-frame-iframe-expected.txt b/third_party/blink/web_tests/fast/animation/request-animation-frame-iframe-expected.txt
index fe2877e..7569893 100644
--- a/third_party/blink/web_tests/fast/animation/request-animation-frame-iframe-expected.txt
+++ b/third_party/blink/web_tests/fast/animation/request-animation-frame-iframe-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/animation/request-animation-frame-iframe2-expected.txt b/third_party/blink/web_tests/fast/animation/request-animation-frame-iframe2-expected.txt
index 94c745a..d95333a 100644
--- a/third_party/blink/web_tests/fast/animation/request-animation-frame-iframe2-expected.txt
+++ b/third_party/blink/web_tests/fast/animation/request-animation-frame-iframe2-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/block/block-add-child-crash-expected.txt b/third_party/blink/web_tests/fast/block/block-add-child-crash-expected.txt
index cce28455..4efe4382 100644
--- a/third_party/blink/web_tests/fast/block/block-add-child-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/block/block-add-child-crash-expected.txt
@@ -1,3 +1,3 @@
 WebKit Bug 84606 - ASSERT(beforeChildAnonymousContainer->isTable()); fails in LayoutBlockFlow::addChildIgnoringAnonymousColumnBlocks.
 The test passes if it doesn't CRASH nor ASSERT.
-PASS 
+ PASS 
diff --git a/third_party/blink/web_tests/fast/block/float/add-float-back-to-anonymous-block-previous-expected.txt b/third_party/blink/web_tests/fast/block/float/add-float-back-to-anonymous-block-previous-expected.txt
index e7312214..3ebcc3c 100644
--- a/third_party/blink/web_tests/fast/block/float/add-float-back-to-anonymous-block-previous-expected.txt
+++ b/third_party/blink/web_tests/fast/block/float/add-float-back-to-anonymous-block-previous-expected.txt
@@ -1,4 +1,4 @@
-X
+X 
 X
 PASS
 
diff --git a/third_party/blink/web_tests/fast/block/float/assert-when-moving-float-2-expected.txt b/third_party/blink/web_tests/fast/block/float/assert-when-moving-float-2-expected.txt
index 129ba7c..b750b163 100644
--- a/third_party/blink/web_tests/fast/block/float/assert-when-moving-float-2-expected.txt
+++ b/third_party/blink/web_tests/fast/block/float/assert-when-moving-float-2-expected.txt
@@ -1,2 +1,3 @@
+ 
 foo
 Pass if no assert in debug.
diff --git a/third_party/blink/web_tests/fast/block/float/assert-when-moving-float-expected.txt b/third_party/blink/web_tests/fast/block/float/assert-when-moving-float-expected.txt
index 696fe81..deb8677 100644
--- a/third_party/blink/web_tests/fast/block/float/assert-when-moving-float-expected.txt
+++ b/third_party/blink/web_tests/fast/block/float/assert-when-moving-float-expected.txt
@@ -1,2 +1,3 @@
+ 
 foo
 crbug.com/641334: Passes if it does not assert.
diff --git a/third_party/blink/web_tests/fast/block/float/block-with-negative-margin-clears-float-expected.txt b/third_party/blink/web_tests/fast/block/float/block-with-negative-margin-clears-float-expected.txt
index 2b4cd5c5..c37a72d8 100644
--- a/third_party/blink/web_tests/fast/block/float/block-with-negative-margin-clears-float-expected.txt
+++ b/third_party/blink/web_tests/fast/block/float/block-with-negative-margin-clears-float-expected.txt
@@ -1,4 +1,3 @@
 crbug.com/591243: Clear floats when we have negative margin and are separated from the float by a div that doesn't track it.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/block/float/float-not-removed-crash-expected.txt b/third_party/blink/web_tests/fast/block/float/float-not-removed-crash-expected.txt
index 8a28a0d..c6f20fc 100644
--- a/third_party/blink/web_tests/fast/block/float/float-not-removed-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/block/float/float-not-removed-crash-expected.txt
@@ -1,2 +1 @@
 Test passes if it does not crash. 
-
diff --git a/third_party/blink/web_tests/fast/block/float/float-not-removed-from-pre-block-expected.txt b/third_party/blink/web_tests/fast/block/float/float-not-removed-from-pre-block-expected.txt
index 8966c13..c5da3398 100644
--- a/third_party/blink/web_tests/fast/block/float/float-not-removed-from-pre-block-expected.txt
+++ b/third_party/blink/web_tests/fast/block/float/float-not-removed-from-pre-block-expected.txt
@@ -1,3 +1,5 @@
 Bug 101970: Heap-use-after-free in WebCore::LayoutLayerModelObject::hasSelfPaintingLayer
 Test passes if it does not crash.
 
+  
+ 
diff --git a/third_party/blink/web_tests/fast/block/float/floats-do-not-overhang-from-block-formatting-context-expected.txt b/third_party/blink/web_tests/fast/block/float/floats-do-not-overhang-from-block-formatting-context-expected.txt
index fcb7fe8..d19987f 100644
--- a/third_party/blink/web_tests/fast/block/float/floats-do-not-overhang-from-block-formatting-context-expected.txt
+++ b/third_party/blink/web_tests/fast/block/float/floats-do-not-overhang-from-block-formatting-context-expected.txt
@@ -1,8 +1,6 @@
 http://www.w3.org/TR/CSS2/visuren.html#float-position: "References to [the elements] in the [rules that govern the behaviour of floats] refer only to other elements in the same block formatting context as the float."
 
-
 PASS
-
 PASS
 PASS
 PASS
diff --git a/third_party/blink/web_tests/fast/block/float/intruding-float-not-removed-writing-mode-expected.txt b/third_party/blink/web_tests/fast/block/float/intruding-float-not-removed-writing-mode-expected.txt
index 1042c767..0383162 100644
--- a/third_party/blink/web_tests/fast/block/float/intruding-float-not-removed-writing-mode-expected.txt
+++ b/third_party/blink/web_tests/fast/block/float/intruding-float-not-removed-writing-mode-expected.txt
@@ -1,2 +1 @@
 Test passes if it does not crash.
-
diff --git a/third_party/blink/web_tests/fast/block/float/trailing-float-layout-2-expected.txt b/third_party/blink/web_tests/fast/block/float/trailing-float-layout-2-expected.txt
index e0f4730..e89d7f0 100644
--- a/third_party/blink/web_tests/fast/block/float/trailing-float-layout-2-expected.txt
+++ b/third_party/blink/web_tests/fast/block/float/trailing-float-layout-2-expected.txt
@@ -1,5 +1,4 @@
 AAAAA
-
 XYZSaft
 
 crbug.com/517030: Ensure trailing float gets a layout. Passes if it does not assert
diff --git a/third_party/blink/web_tests/fast/block/margin-collapse/self-collapsing-block-getting-layout-set-expected.txt b/third_party/blink/web_tests/fast/block/margin-collapse/self-collapsing-block-getting-layout-set-expected.txt
index af0c4c87..0700c10 100644
--- a/third_party/blink/web_tests/fast/block/margin-collapse/self-collapsing-block-getting-layout-set-expected.txt
+++ b/third_party/blink/web_tests/fast/block/margin-collapse/self-collapsing-block-getting-layout-set-expected.txt
@@ -1,2 +1,3 @@
+ 
 crbug.com/479562: self-collapsing blocks getting layout set
 PASS
diff --git a/third_party/blink/web_tests/fast/block/positioned-container-changes-height-with-percent-descendant-expected.txt b/third_party/blink/web_tests/fast/block/positioned-container-changes-height-with-percent-descendant-expected.txt
index 9049303..1b938d0 100644
--- a/third_party/blink/web_tests/fast/block/positioned-container-changes-height-with-percent-descendant-expected.txt
+++ b/third_party/blink/web_tests/fast/block/positioned-container-changes-height-with-percent-descendant-expected.txt
@@ -1,3 +1,2 @@
 crbug.com/468521: When a positioned container changes height and has percent height descedants ensure its children get a layout.
 PASS
-
diff --git a/third_party/blink/web_tests/fast/block/positioning/absolute-in-inline-rtl-4-expected.txt b/third_party/blink/web_tests/fast/block/positioning/absolute-in-inline-rtl-4-expected.txt
index 875e654..e25e141 100644
--- a/third_party/blink/web_tests/fast/block/positioning/absolute-in-inline-rtl-4-expected.txt
+++ b/third_party/blink/web_tests/fast/block/positioning/absolute-in-inline-rtl-4-expected.txt
@@ -1,2 +1 @@
 This test checks that an absolute element inside inlined element should not cause crash. If this file opens successfully that means the test passed.
-
diff --git a/third_party/blink/web_tests/fast/block/positioning/complex-percentage-height-expected.txt b/third_party/blink/web_tests/fast/block/positioning/complex-percentage-height-expected.txt
index aa128d9..de4ed6f9f 100644
--- a/third_party/blink/web_tests/fast/block/positioning/complex-percentage-height-expected.txt
+++ b/third_party/blink/web_tests/fast/block/positioning/complex-percentage-height-expected.txt
@@ -1,11 +1,11 @@
 Test case:
-Blue div has 400px width, dynamic height, and position: relative.
-Inside blue div there are 3 other div with height: 40px (and has some bottom margin..)
+ Blue div has 400px width, dynamic height, and position: relative.
+ Inside blue div there are 3 other div with height: 40px (and has some bottom margin..)
 the height of the blue div expands with the green divs inside..
-Yellow div has position absolute (and positioned in the top left corner of the blue div)
+ Yellow div has position absolute (and positioned in the top left corner of the blue div)
 it's height set to 100%
 the height of the yellow div now equals with the height of the blue div
-Red div is inserted into the yellow div, and it's height set to 100%
+ Red div is inserted into the yellow div, and it's height set to 100%
 Problem:
 
 The height of the red div should equals to the height of the blue (and yellow) div.
diff --git a/third_party/blink/web_tests/fast/block/skip-cleaning-up-anonymous-wrappers-when-subtree-being-destroyed-expected.txt b/third_party/blink/web_tests/fast/block/skip-cleaning-up-anonymous-wrappers-when-subtree-being-destroyed-expected.txt
index 2274648..751acb4 100644
--- a/third_party/blink/web_tests/fast/block/skip-cleaning-up-anonymous-wrappers-when-subtree-being-destroyed-expected.txt
+++ b/third_party/blink/web_tests/fast/block/skip-cleaning-up-anonymous-wrappers-when-subtree-being-destroyed-expected.txt
@@ -1,3 +1,3 @@
 PASS
-PASS PASSPASS
+PASSPASSPASS
 PASS PASS
diff --git a/third_party/blink/web_tests/fast/borders/border-color-visited-expected.txt b/third_party/blink/web_tests/fast/borders/border-color-visited-expected.txt
index 4b3b0c6..61bcdd5 100644
--- a/third_party/blink/web_tests/fast/borders/border-color-visited-expected.txt
+++ b/third_party/blink/web_tests/fast/borders/border-color-visited-expected.txt
@@ -1,5 +1,5 @@
 This span should have borders with #d0d0d0 color.
-This span should also have borders with #d0d0d0 color.
+ This span should also have borders with #d0d0d0 color.
 
 If this test passes, all borders have the same color: #d0d0d0.
 
diff --git a/third_party/blink/web_tests/fast/borders/border-radius-mask-video-crash-expected.txt b/third_party/blink/web_tests/fast/borders/border-radius-mask-video-crash-expected.txt
index 5c2be83..33557e86 100644
--- a/third_party/blink/web_tests/fast/borders/border-radius-mask-video-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/borders/border-radius-mask-video-crash-expected.txt
@@ -1,2 +1 @@
 This sometimes causes a crash - PASS
-
diff --git a/third_party/blink/web_tests/fast/canvas-api/canvas-scroll-path-into-view-expected.txt b/third_party/blink/web_tests/fast/canvas-api/canvas-scroll-path-into-view-expected.txt
index f58ccf1..08064e72 100644
--- a/third_party/blink/web_tests/fast/canvas-api/canvas-scroll-path-into-view-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas-api/canvas-scroll-path-into-view-expected.txt
@@ -104,4 +104,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/canvas/OffscreenCanvas-2d-imageData-in-worker-expected.txt b/third_party/blink/web_tests/fast/canvas/OffscreenCanvas-2d-imageData-in-worker-expected.txt
index 5304e05..11416a98 100644
--- a/third_party/blink/web_tests/fast/canvas/OffscreenCanvas-2d-imageData-in-worker-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/OffscreenCanvas-2d-imageData-in-worker-expected.txt
@@ -7,4 +7,3 @@
 PASS getImageData(sx, sy, sw, sh) is successful.
 PASS putImageData(ImageData, dx, dy) is successful.
 PASS putImageData(ImageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) is successful.
-
diff --git a/third_party/blink/web_tests/fast/canvas/canvas-ImageBitmap-structured-clone-expected.txt b/third_party/blink/web_tests/fast/canvas/canvas-ImageBitmap-structured-clone-expected.txt
index ce7ae5e..72454de 100644
--- a/third_party/blink/web_tests/fast/canvas/canvas-ImageBitmap-structured-clone-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/canvas-ImageBitmap-structured-clone-expected.txt
@@ -23,4 +23,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/canvas/canvas-ImageBitmap-transferable-expected.txt b/third_party/blink/web_tests/fast/canvas/canvas-ImageBitmap-transferable-expected.txt
index e2cc2e52..333b2287 100644
--- a/third_party/blink/web_tests/fast/canvas/canvas-ImageBitmap-transferable-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/canvas-ImageBitmap-transferable-expected.txt
@@ -38,4 +38,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/canvas/canvas-ImageData-neutered-source-expected.txt b/third_party/blink/web_tests/fast/canvas/canvas-ImageData-neutered-source-expected.txt
index b168f87e..d5a4934 100644
--- a/third_party/blink/web_tests/fast/canvas/canvas-ImageData-neutered-source-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/canvas-ImageData-neutered-source-expected.txt
@@ -22,4 +22,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/canvas/canvas-createImageBitmap-data-preserves-alpha-expected.txt b/third_party/blink/web_tests/fast/canvas/canvas-createImageBitmap-data-preserves-alpha-expected.txt
index 311bf94..0231c47 100644
--- a/third_party/blink/web_tests/fast/canvas/canvas-createImageBitmap-data-preserves-alpha-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/canvas-createImageBitmap-data-preserves-alpha-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/canvas/canvas-createImageBitmap-webgl-expected.txt b/third_party/blink/web_tests/fast/canvas/canvas-createImageBitmap-webgl-expected.txt
index 8aa1c11..8979be3af 100644
--- a/third_party/blink/web_tests/fast/canvas/canvas-createImageBitmap-webgl-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/canvas-createImageBitmap-webgl-expected.txt
@@ -20,4 +20,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/canvas/canvas-hides-fallback-expected.txt b/third_party/blink/web_tests/fast/canvas/canvas-hides-fallback-expected.txt
index 3b533f7..3687cd0c 100644
--- a/third_party/blink/web_tests/fast/canvas/canvas-hides-fallback-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/canvas-hides-fallback-expected.txt
@@ -1,5 +1,3 @@
 The DOM part of this test succeeded. The canvas element had at least one child, indicating that we are hiding text by not rendering it, but we are creating DOM elements as expected.
 
 There should be no text below this, because the text is inside a canvas element and JavaScript is enabled.
-
-
diff --git a/third_party/blink/web_tests/fast/canvas/canvas-normalize-string-expected.txt b/third_party/blink/web_tests/fast/canvas/canvas-normalize-string-expected.txt
index 7d661e0..172fcd0 100644
--- a/third_party/blink/web_tests/fast/canvas/canvas-normalize-string-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/canvas-normalize-string-expected.txt
@@ -1,4 +1,3 @@
 On success, two same text string with equal width will be rendered.
 
-
 TEST PASSED
diff --git a/third_party/blink/web_tests/fast/canvas/canvas-textMetrics-width-expected.txt b/third_party/blink/web_tests/fast/canvas/canvas-textMetrics-width-expected.txt
index d7c5d70..0b89eea 100644
--- a/third_party/blink/web_tests/fast/canvas/canvas-textMetrics-width-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/canvas-textMetrics-width-expected.txt
@@ -1,3 +1 @@
 On success, the red text "Hello World" should be tightly contained inside the two thin red lines.
-
-
diff --git a/third_party/blink/web_tests/fast/canvas/script-inside-canvas-fallback-expected.txt b/third_party/blink/web_tests/fast/canvas/script-inside-canvas-fallback-expected.txt
index d3b6e43..a1455c5c 100644
--- a/third_party/blink/web_tests/fast/canvas/script-inside-canvas-fallback-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/script-inside-canvas-fallback-expected.txt
@@ -1,2 +1 @@
 This text was set by a script inside a canvas element. Such scripts run even though the content is not displayed.
-
diff --git a/third_party/blink/web_tests/fast/canvas/setWidthResetAfterForcedRender-expected.txt b/third_party/blink/web_tests/fast/canvas/setWidthResetAfterForcedRender-expected.txt
index eddde9d..ebd8327 100644
--- a/third_party/blink/web_tests/fast/canvas/setWidthResetAfterForcedRender-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/setWidthResetAfterForcedRender-expected.txt
@@ -3,5 +3,3 @@
 TEST PASS: The canvas should go blank due to setting on the canvas width.
 
 Actual output: (blank canvas)
-
-
diff --git a/third_party/blink/web_tests/fast/canvas/shadow-offset-1-expected.txt b/third_party/blink/web_tests/fast/canvas/shadow-offset-1-expected.txt
index 6005c05..719e072 100644
--- a/third_party/blink/web_tests/fast/canvas/shadow-offset-1-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/shadow-offset-1-expected.txt
@@ -1,3 +1 @@
 There should be no red pixels below.
-
-
diff --git a/third_party/blink/web_tests/fast/canvas/toDataURL-alpha-expected.txt b/third_party/blink/web_tests/fast/canvas/toDataURL-alpha-expected.txt
index bd7b049f..5efbfe26 100644
--- a/third_party/blink/web_tests/fast/canvas/toDataURL-alpha-expected.txt
+++ b/third_party/blink/web_tests/fast/canvas/toDataURL-alpha-expected.txt
@@ -1,3 +1 @@
 The test passes if both boxes below have the same color.
-
-
diff --git a/third_party/blink/web_tests/fast/cookies/cookies-disabled-in-data-url-expected.txt b/third_party/blink/web_tests/fast/cookies/cookies-disabled-in-data-url-expected.txt
index 2dcf21d..eb1f97c 100644
--- a/third_party/blink/web_tests/fast/cookies/cookies-disabled-in-data-url-expected.txt
+++ b/third_party/blink/web_tests/fast/cookies/cookies-disabled-in-data-url-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/display-grid-set-get-expected.txt b/third_party/blink/web_tests/fast/css-grid-layout/display-grid-set-get-expected.txt
index af22c96..ef2b6a0 100644
--- a/third_party/blink/web_tests/fast/css-grid-layout/display-grid-set-get-expected.txt
+++ b/third_party/blink/web_tests/fast/css-grid-layout/display-grid-set-get-expected.txt
@@ -18,5 +18,3 @@
 
 TEST COMPLETE
 
-
-
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/flex-and-minmax-content-resolution-columns-expected.txt b/third_party/blink/web_tests/fast/css-grid-layout/flex-and-minmax-content-resolution-columns-expected.txt
index a85793c..de41553 100644
--- a/third_party/blink/web_tests/fast/css-grid-layout/flex-and-minmax-content-resolution-columns-expected.txt
+++ b/third_party/blink/web_tests/fast/css-grid-layout/flex-and-minmax-content-resolution-columns-expected.txt
@@ -15,17 +15,12 @@
 XX XX
 XX XX
 PASS
-
 PASS
-
 XXXXXXXXXX
 PASS
-
 XXXXXXXXXX XXXXXXXXX
 PASS
-
 XXXXXXXXXX XXXXXXXXX
 PASS
-
 XXXXXXXXXX XXXXXXXXX
 PASS
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/grid-self-baseline-and-relative-sized-items-crash-expected.txt b/third_party/blink/web_tests/fast/css-grid-layout/grid-self-baseline-and-relative-sized-items-crash-expected.txt
index 76fa089..1abec7f 100644
--- a/third_party/blink/web_tests/fast/css-grid-layout/grid-self-baseline-and-relative-sized-items-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/css-grid-layout/grid-self-baseline-and-relative-sized-items-crash-expected.txt
@@ -5,4 +5,3 @@
 
 PASS
 PASS
-
diff --git a/third_party/blink/web_tests/fast/css-grid-layout/percent-of-indefinite-track-size-in-minmax-crash-expected.txt b/third_party/blink/web_tests/fast/css-grid-layout/percent-of-indefinite-track-size-in-minmax-crash-expected.txt
index 27d6511..902ea07f 100644
--- a/third_party/blink/web_tests/fast/css-grid-layout/percent-of-indefinite-track-size-in-minmax-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/css-grid-layout/percent-of-indefinite-track-size-in-minmax-crash-expected.txt
@@ -1,4 +1,2 @@
 CONSOLE WARNING: Percentages row tracks and gutters for indefinite height grid containers will be resolved against the intrinsic height instead of being treated as auto and zero respectively. This change will happen in M70, around October 2018. See https://www.chromestatus.com/feature/6708326821789696 for more details.
 The test works as expected if it does not crash.
-
-
diff --git a/third_party/blink/web_tests/fast/css-intrinsic-dimensions/fit-content-container-with-replaced-child-expected.txt b/third_party/blink/web_tests/fast/css-intrinsic-dimensions/fit-content-container-with-replaced-child-expected.txt
index 011dbb1..e30fd32c 100644
--- a/third_party/blink/web_tests/fast/css-intrinsic-dimensions/fit-content-container-with-replaced-child-expected.txt
+++ b/third_party/blink/web_tests/fast/css-intrinsic-dimensions/fit-content-container-with-replaced-child-expected.txt
@@ -1,17 +1,9 @@
 Tests that intrinsic width values on replaced element with fit-content container work.
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
diff --git a/third_party/blink/web_tests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks-expected.txt b/third_party/blink/web_tests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks-expected.txt
index f2e1c25a2..c6aa880 100644
--- a/third_party/blink/web_tests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks-expected.txt
+++ b/third_party/blink/web_tests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks-expected.txt
@@ -1,31 +1,16 @@
 Tests that intrinsic width values on blocks work.
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
diff --git a/third_party/blink/web_tests/fast/css/collapsed-whitespace-reattach-in-style-recalc-expected.txt b/third_party/blink/web_tests/fast/css/collapsed-whitespace-reattach-in-style-recalc-expected.txt
index de9e96f..db17067 100644
--- a/third_party/blink/web_tests/fast/css/collapsed-whitespace-reattach-in-style-recalc-expected.txt
+++ b/third_party/blink/web_tests/fast/css/collapsed-whitespace-reattach-in-style-recalc-expected.txt
@@ -8,4 +8,4 @@
 
 PASS
  spans[spans.length - 1].offsetLeft is >= 400
-Item 1 Item 2 Item 3
+Item 1 Item 2 Item 3 
diff --git a/third_party/blink/web_tests/fast/css/containment/size-and-layout-containment-expected.txt b/third_party/blink/web_tests/fast/css/containment/size-and-layout-containment-expected.txt
index 427293bc..2aa9208 100644
--- a/third_party/blink/web_tests/fast/css/containment/size-and-layout-containment-expected.txt
+++ b/third_party/blink/web_tests/fast/css/containment/size-and-layout-containment-expected.txt
@@ -11,6 +11,6 @@
 Test a sized inline-block uses the proper baseline. Result is 25 instead of 20 due to normal inline layout shenanigans.
 PASS
 PASS
-Test that a layout contained block avoids floats.
+Test that a layout contained block avoids floats. 
 Test that a contained inline-block avoids floats.
 PASS
diff --git a/third_party/blink/web_tests/fast/css/content/content-quotes-crash-expected.txt b/third_party/blink/web_tests/fast/css/content/content-quotes-crash-expected.txt
index f5abccc2..2a2d8f1b 100644
--- a/third_party/blink/web_tests/fast/css/content/content-quotes-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/css/content/content-quotes-crash-expected.txt
@@ -1,3 +1,3 @@
 PASS: WebKit didn't crash.
 
-a aA
+a aA 
diff --git a/third_party/blink/web_tests/fast/css/counters/counterValueForElementById-expected.txt b/third_party/blink/web_tests/fast/css/counters/counterValueForElementById-expected.txt
index 703d25ee..61ab336 100644
--- a/third_party/blink/web_tests/fast/css/counters/counterValueForElementById-expected.txt
+++ b/third_party/blink/web_tests/fast/css/counters/counterValueForElementById-expected.txt
@@ -1,4 +1,5 @@
 This is the test for internals.counterValueForElementById
+   
 PASS internals.counterValue(document.getElementById('before')) is '0'
 PASS internals.counterValue(document.getElementById('after')) is '0'
 PASS internals.counterValue(document.getElementById('before_after')) is '0 0'
diff --git a/third_party/blink/web_tests/fast/css/counters/nesting-expected.txt b/third_party/blink/web_tests/fast/css/counters/nesting-expected.txt
index 4b3b1b1..7b0f427 100644
--- a/third_party/blink/web_tests/fast/css/counters/nesting-expected.txt
+++ b/third_party/blink/web_tests/fast/css/counters/nesting-expected.txt
@@ -1,4 +1,5 @@
 The following two lines should have the same content:
 
+   
 0.2- 0.2- 0.5- 1-
 0.2- 0.2- 0.5- 1-
diff --git a/third_party/blink/web_tests/fast/css/counters/remove-anonymous-block-wrapper-crash-expected.txt b/third_party/blink/web_tests/fast/css/counters/remove-anonymous-block-wrapper-crash-expected.txt
index 364c0c0..94b5db7 100644
--- a/third_party/blink/web_tests/fast/css/counters/remove-anonymous-block-wrapper-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/css/counters/remove-anonymous-block-wrapper-crash-expected.txt
@@ -1,5 +1,3 @@
 Remove a block child, so that its parent block no longer needs to wrap inline children inside an anonymous block.
 
 PASS if no crash or assertion failure.
-
-
diff --git a/third_party/blink/web_tests/fast/css/counters/stale-inline-box-crash-expected.txt b/third_party/blink/web_tests/fast/css/counters/stale-inline-box-crash-expected.txt
index 9b9c9725..ecc2ab7 100644
--- a/third_party/blink/web_tests/fast/css/counters/stale-inline-box-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/css/counters/stale-inline-box-crash-expected.txt
@@ -1 +1 @@
-PASS: did not crash.
+PASS: did not crash. 
diff --git a/third_party/blink/web_tests/fast/css/display-inline-block-scrollbar-expected.txt b/third_party/blink/web_tests/fast/css/display-inline-block-scrollbar-expected.txt
index c02c045..6eb92ce 100644
--- a/third_party/blink/web_tests/fast/css/display-inline-block-scrollbar-expected.txt
+++ b/third_party/blink/web_tests/fast/css/display-inline-block-scrollbar-expected.txt
@@ -1,4 +1,3 @@
 Test for crbug.com/316549: This test passes if the scrollable div has width=250.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/css/dynamic-class-pseudo-elements-expected.txt b/third_party/blink/web_tests/fast/css/dynamic-class-pseudo-elements-expected.txt
index 653f48d..2f3c326 100644
--- a/third_party/blink/web_tests/fast/css/dynamic-class-pseudo-elements-expected.txt
+++ b/third_party/blink/web_tests/fast/css/dynamic-class-pseudo-elements-expected.txt
@@ -18,7 +18,7 @@
 
 TEST COMPLETE
 
-< Background of 'X' should be green
-Background of 'X' should be green >
+ < Background of 'X' should be green
+Background of 'X' should be green > 
 Background should be green
 Background of first letter should be green
diff --git a/third_party/blink/web_tests/fast/css/first-letter-capitalized-edit-select-crash-expected.txt b/third_party/blink/web_tests/fast/css/first-letter-capitalized-edit-select-crash-expected.txt
index f835c8d..953b701 100644
--- a/third_party/blink/web_tests/fast/css/first-letter-capitalized-edit-select-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/css/first-letter-capitalized-edit-select-crash-expected.txt
@@ -1,2 +1,2 @@
 Pass If No Crash Or Assert In Debug
-
+ 
diff --git a/third_party/blink/web_tests/fast/css/first-letter-crash-document-disposal-expected.txt b/third_party/blink/web_tests/fast/css/first-letter-crash-document-disposal-expected.txt
index 6630ed5..6e2b11c 100644
--- a/third_party/blink/web_tests/fast/css/first-letter-crash-document-disposal-expected.txt
+++ b/third_party/blink/web_tests/fast/css/first-letter-crash-document-disposal-expected.txt
@@ -1,4 +1,3 @@
 Test passes if it does not CRASH with --run-web-tests.
 
 Appetizers
-
diff --git a/third_party/blink/web_tests/fast/css/first-line-parent-style-different-expected.txt b/third_party/blink/web_tests/fast/css/first-line-parent-style-different-expected.txt
index d898c3e..7de3cfb 100644
--- a/third_party/blink/web_tests/fast/css/first-line-parent-style-different-expected.txt
+++ b/third_party/blink/web_tests/fast/css/first-line-parent-style-different-expected.txt
@@ -4,4 +4,3 @@
 
 
 
-
diff --git a/third_party/blink/web_tests/fast/css/font-face-local-file-expected.txt b/third_party/blink/web_tests/fast/css/font-face-local-file-expected.txt
index 378226a..e0ab8575 100644
--- a/third_party/blink/web_tests/fast/css/font-face-local-file-expected.txt
+++ b/third_party/blink/web_tests/fast/css/font-face-local-file-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/font-size-nan-expected.txt b/third_party/blink/web_tests/fast/css/font-size-nan-expected.txt
index b608e632..849acd0 100644
--- a/third_party/blink/web_tests/fast/css/font-size-nan-expected.txt
+++ b/third_party/blink/web_tests/fast/css/font-size-nan-expected.txt
@@ -1,2 +1 @@
 PASS: WebKit doesn't crash.
-
diff --git a/third_party/blink/web_tests/fast/css/hover-active-quirks-expected.txt b/third_party/blink/web_tests/fast/css/hover-active-quirks-expected.txt
index 5a298bb..dfb00df 100644
--- a/third_party/blink/web_tests/fast/css/hover-active-quirks-expected.txt
+++ b/third_party/blink/web_tests/fast/css/hover-active-quirks-expected.txt
@@ -54,4 +54,3 @@
 Should be green when hovered:       
 
 Should be green when active:       
-
diff --git a/third_party/blink/web_tests/fast/css/infinite-floating-value-expected.txt b/third_party/blink/web_tests/fast/css/infinite-floating-value-expected.txt
index 4900486..654ddf7f 100644
--- a/third_party/blink/web_tests/fast/css/infinite-floating-value-expected.txt
+++ b/third_party/blink/web_tests/fast/css/infinite-floating-value-expected.txt
@@ -1,3 +1 @@
 This test passes if it does not crash.
-
-
diff --git a/third_party/blink/web_tests/fast/css/invalid-appearance-progress-bar-meter-expected.txt b/third_party/blink/web_tests/fast/css/invalid-appearance-progress-bar-meter-expected.txt
index 9322ccd..7554c0d 100644
--- a/third_party/blink/web_tests/fast/css/invalid-appearance-progress-bar-meter-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalid-appearance-progress-bar-meter-expected.txt
@@ -6,4 +6,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/autofill-pseudo-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/autofill-pseudo-expected.txt
index 70cee55f..0b35308 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/autofill-pseudo-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/autofill-pseudo-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/checked-pseudo-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/checked-pseudo-expected.txt
index c3a3ecb..039c7b4 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/checked-pseudo-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/checked-pseudo-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/disabled-pseudo-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/disabled-pseudo-expected.txt
index 3914fdf..30ca58e 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/disabled-pseudo-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/disabled-pseudo-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/enabled-pseudo-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/enabled-pseudo-expected.txt
index d138fe3..049272cf 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/enabled-pseudo-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/enabled-pseudo-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/fieldset-disabled-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/fieldset-disabled-expected.txt
index 1f2f295..4796425 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/fieldset-disabled-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/fieldset-disabled-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/indeterminate-pseudo-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/indeterminate-pseudo-expected.txt
index 51627455..ce21fae7 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/indeterminate-pseudo-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/indeterminate-pseudo-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/input-search-incremental-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/input-search-incremental-expected.txt
index 129d84c..1d2d8f0 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/input-search-incremental-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/input-search-incremental-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/lazy-reattach-object-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/lazy-reattach-object-expected.txt
index b40c96a..42d85118 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/lazy-reattach-object-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/lazy-reattach-object-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/range-pseudo-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/range-pseudo-expected.txt
index 0f955c0..5e7e010aa 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/range-pseudo-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/range-pseudo-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/read-only-write-pseudo-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/read-only-write-pseudo-expected.txt
index 10e2ec34..51e8ca47 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/read-only-write-pseudo-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/read-only-write-pseudo-expected.txt
@@ -12,5 +12,3 @@
 
 TEST COMPLETE
 
-
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/reattach-with-sibling-invalidation-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/reattach-with-sibling-invalidation-expected.txt
index 4c30c5c..a132bc8 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/reattach-with-sibling-invalidation-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/reattach-with-sibling-invalidation-expected.txt
@@ -9,5 +9,4 @@
 
 TEST COMPLETE
 
-
 Should be green
diff --git a/third_party/blink/web_tests/fast/css/invalidation/required-optional-pseudo-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/required-optional-pseudo-expected.txt
index 854d343..f2d0b5a 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/required-optional-pseudo-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/required-optional-pseudo-expected.txt
@@ -12,5 +12,3 @@
 
 TEST COMPLETE
 
-
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/targeted-class-custom-pseudo-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/targeted-class-custom-pseudo-expected.txt
index 69ad370..7a059cc 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/targeted-class-custom-pseudo-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/targeted-class-custom-pseudo-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/invalidation/valid-invalid-pseudo-expected.txt b/third_party/blink/web_tests/fast/css/invalidation/valid-invalid-pseudo-expected.txt
index 86b28072..4f87261 100644
--- a/third_party/blink/web_tests/fast/css/invalidation/valid-invalid-pseudo-expected.txt
+++ b/third_party/blink/web_tests/fast/css/invalidation/valid-invalid-pseudo-expected.txt
@@ -24,9 +24,5 @@
 
 TEST COMPLETE
 
-
-
   
   
-
-
diff --git a/third_party/blink/web_tests/fast/css/media-query-dynamic-expected.txt b/third_party/blink/web_tests/fast/css/media-query-dynamic-expected.txt
index e9bdd7b537..1f73721 100644
--- a/third_party/blink/web_tests/fast/css/media-query-dynamic-expected.txt
+++ b/third_party/blink/web_tests/fast/css/media-query-dynamic-expected.txt
@@ -4,4 +4,3 @@
 
 PASS iframe.contentDocument.defaultView.getComputedStyle(p).textTransform is "none"
 PASS iframe.contentDocument.defaultView.getComputedStyle(p).textTransform is "uppercase"
-
diff --git a/third_party/blink/web_tests/fast/css/nested-percent-height-on-replaced-expected.txt b/third_party/blink/web_tests/fast/css/nested-percent-height-on-replaced-expected.txt
index 8033a8c4..38e0352 100644
--- a/third_party/blink/web_tests/fast/css/nested-percent-height-on-replaced-expected.txt
+++ b/third_party/blink/web_tests/fast/css/nested-percent-height-on-replaced-expected.txt
@@ -1,3 +1,2 @@
 PASS
-
 PASS
diff --git a/third_party/blink/web_tests/fast/css/percent-min-width-img-src-change-expected.txt b/third_party/blink/web_tests/fast/css/percent-min-width-img-src-change-expected.txt
index 9976b120..7ef22e9 100644
--- a/third_party/blink/web_tests/fast/css/percent-min-width-img-src-change-expected.txt
+++ b/third_party/blink/web_tests/fast/css/percent-min-width-img-src-change-expected.txt
@@ -1,3 +1 @@
 PASS
-
-
diff --git a/third_party/blink/web_tests/fast/css/percent-width-img-src-change-expected.txt b/third_party/blink/web_tests/fast/css/percent-width-img-src-change-expected.txt
index 7bed7dc9..7ef22e9 100644
--- a/third_party/blink/web_tests/fast/css/percent-width-img-src-change-expected.txt
+++ b/third_party/blink/web_tests/fast/css/percent-width-img-src-change-expected.txt
@@ -1,5 +1 @@
 PASS
-
-
-
-
diff --git a/third_party/blink/web_tests/fast/css/pseudo-default-001-expected.txt b/third_party/blink/web_tests/fast/css/pseudo-default-001-expected.txt
index b2332c8..a8c3377 100644
--- a/third_party/blink/web_tests/fast/css/pseudo-default-001-expected.txt
+++ b/third_party/blink/web_tests/fast/css/pseudo-default-001-expected.txt
@@ -9,5 +9,3 @@
 
 TEST COMPLETE
 
-
-
diff --git a/third_party/blink/web_tests/fast/css/pseudo-invalid-002-expected.txt b/third_party/blink/web_tests/fast/css/pseudo-invalid-002-expected.txt
index 98954f7..90fe2a1 100644
--- a/third_party/blink/web_tests/fast/css/pseudo-invalid-002-expected.txt
+++ b/third_party/blink/web_tests/fast/css/pseudo-invalid-002-expected.txt
@@ -2,7 +2,6 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-
 PASS document.defaultView.getComputedStyle(v[i], null).getPropertyValue('background-color') is 'rgb(0, 255, 0)'
 PASS successfullyParsed is true
 
diff --git a/third_party/blink/web_tests/fast/css/pseudo-required-optional-004-expected.txt b/third_party/blink/web_tests/fast/css/pseudo-required-optional-004-expected.txt
index 074f34cb..a61d134 100644
--- a/third_party/blink/web_tests/fast/css/pseudo-required-optional-004-expected.txt
+++ b/third_party/blink/web_tests/fast/css/pseudo-required-optional-004-expected.txt
@@ -1,6 +1,6 @@
 All controls should have a green background.
 
-Lorem ipsum   
+Lorem ipsum    
 SUCCESS
 SUCCESS
 SUCCESS
diff --git a/third_party/blink/web_tests/fast/css/pseudo-valid-007-expected.txt b/third_party/blink/web_tests/fast/css/pseudo-valid-007-expected.txt
index 22f4630..a3e8b42 100644
--- a/third_party/blink/web_tests/fast/css/pseudo-valid-007-expected.txt
+++ b/third_party/blink/web_tests/fast/css/pseudo-valid-007-expected.txt
@@ -3,6 +3,7 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 Lorem ipsum
+ 
 empty
 another
 PASS document.defaultView.getComputedStyle(v[i], null).getPropertyValue('background-color') is 'rgb(0, 255, 0)'
diff --git a/third_party/blink/web_tests/fast/css/pseudostyle-anonymous-text-expected.txt b/third_party/blink/web_tests/fast/css/pseudostyle-anonymous-text-expected.txt
index 102919e8..3a885e9 100644
--- a/third_party/blink/web_tests/fast/css/pseudostyle-anonymous-text-expected.txt
+++ b/third_party/blink/web_tests/fast/css/pseudostyle-anonymous-text-expected.txt
@@ -3,4 +3,4 @@
 REGRESSION: Reproducible crash when selecting a popup/button with ::selection pseudostyle"
 
 Option 1
-
+ 
diff --git a/third_party/blink/web_tests/fast/css/relative-position-replaced-in-table-display-crash-expected.txt b/third_party/blink/web_tests/fast/css/relative-position-replaced-in-table-display-crash-expected.txt
index 1cbee9f..b2d5b08 100644
--- a/third_party/blink/web_tests/fast/css/relative-position-replaced-in-table-display-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/css/relative-position-replaced-in-table-display-crash-expected.txt
@@ -1,2 +1,2 @@
 PASS, if no exception or crash in debug
-
+ 
diff --git a/third_party/blink/web_tests/fast/css/shadow-current-color-expected.txt b/third_party/blink/web_tests/fast/css/shadow-current-color-expected.txt
index 42a9f9b..f39e109 100644
--- a/third_party/blink/web_tests/fast/css/shadow-current-color-expected.txt
+++ b/third_party/blink/web_tests/fast/css/shadow-current-color-expected.txt
@@ -5,4 +5,4 @@
 PASS circle1 has rgb(255, 0, 0) shadow as expected.
 PASS circle2 has rgb(0, 128, 0) shadow as expected.
 PASS circle3 has rgb(64, 64, 255) shadow as expected.
-   
+     
diff --git a/third_party/blink/web_tests/fast/css/vertical-align-length-copy-bug-expected.txt b/third_party/blink/web_tests/fast/css/vertical-align-length-copy-bug-expected.txt
index 77bb32f3..27001a1 100644
--- a/third_party/blink/web_tests/fast/css/vertical-align-length-copy-bug-expected.txt
+++ b/third_party/blink/web_tests/fast/css/vertical-align-length-copy-bug-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/css/visibility-collapse-form-buttons-expected.txt b/third_party/blink/web_tests/fast/css/visibility-collapse-form-buttons-expected.txt
index eb502eb..4a5915dc 100644
--- a/third_party/blink/web_tests/fast/css/visibility-collapse-form-buttons-expected.txt
+++ b/third_party/blink/web_tests/fast/css/visibility-collapse-form-buttons-expected.txt
@@ -1,5 +1,3 @@
 The two buttons below should say PASS:
 
-
-
 PASS
diff --git a/third_party/blink/web_tests/fast/css/webkit-marquee-speed-unit-in-quirksmode-expected.txt b/third_party/blink/web_tests/fast/css/webkit-marquee-speed-unit-in-quirksmode-expected.txt
index fc89eaa..7cbf803 100644
--- a/third_party/blink/web_tests/fast/css/webkit-marquee-speed-unit-in-quirksmode-expected.txt
+++ b/third_party/blink/web_tests/fast/css/webkit-marquee-speed-unit-in-quirksmode-expected.txt
@@ -5,6 +5,4 @@
 
 This simple test case checks if unit-less value for -webkit-marquee-speed in quirks mode is treated as miliseconds which is required for correctly working scrolldelay.
 
-
-
 PASS
diff --git a/third_party/blink/web_tests/fast/css/zoom-change-triggering-layout-expected.txt b/third_party/blink/web_tests/fast/css/zoom-change-triggering-layout-expected.txt
index df4d991d..55cfb08 100644
--- a/third_party/blink/web_tests/fast/css/zoom-change-triggering-layout-expected.txt
+++ b/third_party/blink/web_tests/fast/css/zoom-change-triggering-layout-expected.txt
@@ -1,5 +1,3 @@
 Test for rdar://problem/8119781 Crash zooming into Word document at office.live.com.
 
 The test passes if it does not crash. To test in Safari, make sure View > Zoom Text Only is not selected, then choose View > Zoom In.
-
-
diff --git a/third_party/blink/web_tests/fast/deprecated-flexbox/intrinsic-min-width-applies-with-fixed-width-expected.txt b/third_party/blink/web_tests/fast/deprecated-flexbox/intrinsic-min-width-applies-with-fixed-width-expected.txt
index 3dd336b..c940e02 100644
--- a/third_party/blink/web_tests/fast/deprecated-flexbox/intrinsic-min-width-applies-with-fixed-width-expected.txt
+++ b/third_party/blink/web_tests/fast/deprecated-flexbox/intrinsic-min-width-applies-with-fixed-width-expected.txt
@@ -1,12 +1,7 @@
 Check that min-width intrinsic size still applies if a fixed width is set.
 
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
diff --git a/third_party/blink/web_tests/fast/doctypes/doctype-parsing-expected.txt b/third_party/blink/web_tests/fast/doctypes/doctype-parsing-expected.txt
index 07c5644..0a220e4 100644
--- a/third_party/blink/web_tests/fast/doctypes/doctype-parsing-expected.txt
+++ b/third_party/blink/web_tests/fast/doctypes/doctype-parsing-expected.txt
@@ -105,4 +105,3 @@
 PASS: the Doctype was Quirks as expected.
 PASS: the Doctype was Standards as expected.
 
-
diff --git a/third_party/blink/web_tests/fast/dom/DOMImplementation/createDocument-with-used-doctype-expected.txt b/third_party/blink/web_tests/fast/dom/DOMImplementation/createDocument-with-used-doctype-expected.txt
index a628e40..f8e21ec 100644
--- a/third_party/blink/web_tests/fast/dom/DOMImplementation/createDocument-with-used-doctype-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/DOMImplementation/createDocument-with-used-doctype-expected.txt
@@ -19,4 +19,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/DOMImplementation/implementation-identity-expected.txt b/third_party/blink/web_tests/fast/dom/DOMImplementation/implementation-identity-expected.txt
index d616e94..7ff6b84f 100644
--- a/third_party/blink/web_tests/fast/dom/DOMImplementation/implementation-identity-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/DOMImplementation/implementation-identity-expected.txt
@@ -4,5 +4,3 @@
 
 OK: Top-level document and iframe document have different DOMImplementation objects
 OK: DOMImplementation object is cached
-
-
diff --git a/third_party/blink/web_tests/fast/dom/Document/open-with-pending-load-expected.txt b/third_party/blink/web_tests/fast/dom/Document/open-with-pending-load-expected.txt
index 851e017..c78457e 100644
--- a/third_party/blink/web_tests/fast/dom/Document/open-with-pending-load-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Document/open-with-pending-load-expected.txt
@@ -1,3 +1,2 @@
 This tests that calling document.open on a document that has a pending load correctly cancels the load
 SUCCESS
-
diff --git a/third_party/blink/web_tests/fast/dom/Document/readystate-expected.txt b/third_party/blink/web_tests/fast/dom/Document/readystate-expected.txt
index d028fa0..daa8d9f3 100644
--- a/third_party/blink/web_tests/fast/dom/Document/readystate-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Document/readystate-expected.txt
@@ -24,4 +24,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Element/class-list-move-between-document-with-different-quirks-mode-expected.txt b/third_party/blink/web_tests/fast/dom/Element/class-list-move-between-document-with-different-quirks-mode-expected.txt
index c237f03..d8f1c6e 100644
--- a/third_party/blink/web_tests/fast/dom/Element/class-list-move-between-document-with-different-quirks-mode-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Element/class-list-move-between-document-with-different-quirks-mode-expected.txt
@@ -21,4 +21,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Element/id-in-formcollection-expected.txt b/third_party/blink/web_tests/fast/dom/Element/id-in-formcollection-expected.txt
index e75babe..41351dc 100644
--- a/third_party/blink/web_tests/fast/dom/Element/id-in-formcollection-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Element/id-in-formcollection-expected.txt
@@ -8,4 +8,5 @@
 TEST COMPLETE
 
 FAILURE
+ 
 FAILURE
diff --git a/third_party/blink/web_tests/fast/dom/Element/id-in-frame-expected.txt b/third_party/blink/web_tests/fast/dom/Element/id-in-frame-expected.txt
index c1f2453..0ae4c7bd 100644
--- a/third_party/blink/web_tests/fast/dom/Element/id-in-frame-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Element/id-in-frame-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Element/id-in-param-expected.txt b/third_party/blink/web_tests/fast/dom/Element/id-in-param-expected.txt
index 6e006a0b..87bc5d4 100644
--- a/third_party/blink/web_tests/fast/dom/Element/id-in-param-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Element/id-in-param-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Element/onclick-case-expected.txt b/third_party/blink/web_tests/fast/dom/Element/onclick-case-expected.txt
index 119f580..bfee654 100644
--- a/third_party/blink/web_tests/fast/dom/Element/onclick-case-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Element/onclick-case-expected.txt
@@ -1,5 +1,3 @@
 This tests whether an element's onclick attribute can be a function named "OnClick". Some older versions of WebKit had a bug in the DOM binding for Element that would prevent the function from being called because we have an attribute of the same name.
 
-
-
 Hooray! All is well!
diff --git a/third_party/blink/web_tests/fast/dom/HTMLDocument/document-open-return-value-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLDocument/document-open-return-value-expected.txt
index 8f43b3b..09286649 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLDocument/document-open-return-value-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLDocument/document-open-return-value-expected.txt
@@ -1,5 +1,3 @@
 Test for bug 14968: document.open() erroneously returns void instead of the new Document.
 
 SUCCESS
-
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-load-cross-document-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-load-cross-document-expected.txt
index 7f46de2..aaf3bd56 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-load-cross-document-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-load-cross-document-expected.txt
@@ -1,5 +1,3 @@
 This tests the case where an image is loaded in one document and then moved to another before the load event fires.
 
 PASS: Test complete and passed unless a subsequent test crashes.
-
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-in-template-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-in-template-expected.txt
index 8ce21f7c..d0a9866 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-in-template-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-in-template-expected.txt
@@ -8,6 +8,3 @@
 
 TEST COMPLETE
 
-
-
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-invalid-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-invalid-expected.txt
index b73c073..ad92a45 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-invalid-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-invalid-expected.txt
@@ -12,8 +12,3 @@
 PASS currentSrcFileName("source_in_div") is "blue_rect.jpg"
 PASS document.getElementById("not_in_picture").clientWidth is 75
 PASS currentSrcFileName("not_in_picture") is "blue_rect.jpg"
-
-
-
-
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-nested-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-nested-expected.txt
index 3aea069f..c7d7aec 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-nested-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-nested-expected.txt
@@ -21,6 +21,4 @@
 PASS document.getElementById("picture_no_source").clientWidth is 75
 PASS currentSrcFileName("picture_no_source") is "blue_rect.jpg?6"
  
-
-
     
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-react-to-media-changes-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-react-to-media-changes-expected.txt
index f05defb..4e7f4d21 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-react-to-media-changes-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-react-to-media-changes-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-source-dynamic-changes-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-source-dynamic-changes-expected.txt
index 64c45c9cc..609961df 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-source-dynamic-changes-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-picture-source-dynamic-changes-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-sizes-js-change-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-sizes-js-change-expected.txt
index b8ab823..c026e380 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-sizes-js-change-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-sizes-js-change-expected.txt
@@ -7,4 +7,3 @@
 PASS internals.isLoadingFromMemoryCache("../../hidpi/resources/image-set-2x.png") is false
 PASS internals.isLoadingFromMemoryCache("../../hidpi/resources/image-set-1x.png") is false
 PASS internals.isLoadingFromMemoryCache("resources/blue-100-px-square.png") is false
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-sizes-js-innerhtml-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-sizes-js-innerhtml-expected.txt
index 092bcf81..bb52e63 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-sizes-js-innerhtml-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-sizes-js-innerhtml-expected.txt
@@ -3,4 +3,3 @@
 TEST COMPLETE
 
 PASS fileName(window.testdiv.children[0].currentSrc) is "image-set-4x.png"
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-src-added-srcset-w-descriptors-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-src-added-srcset-w-descriptors-expected.txt
index e69af21f..c394f9b8 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-src-added-srcset-w-descriptors-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-src-added-srcset-w-descriptors-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-deregistration-after-move-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-deregistration-after-move-expected.txt
index b0a12e0..43e5eeed 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-deregistration-after-move-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-deregistration-after-move-expected.txt
@@ -2,4 +2,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-in-iframe-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-in-iframe-expected.txt
index 33a9bf86..a0c3a91 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-in-iframe-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-in-iframe-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-in-iframe-external-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-in-iframe-external-expected.txt
index 33a9bf86..a0c3a91 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-in-iframe-external-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-in-iframe-external-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-in-template-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-in-template-expected.txt
index 48cbf70..7865c28 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-in-template-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-in-template-expected.txt
@@ -8,6 +8,3 @@
 
 TEST COMPLETE
 
-
-
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-invalid-url-no-crash-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-invalid-url-no-crash-expected.txt
index 3fefbe8..f881e74 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-invalid-url-no-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-invalid-url-no-crash-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-react-to-media-changes-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-react-to-media-changes-expected.txt
index 0e603cf..5139a88 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-react-to-media-changes-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-react-to-media-changes-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-react-to-media-changes-px-based-sizes-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-react-to-media-changes-px-based-sizes-expected.txt
index 0e603cf..5139a88 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-react-to-media-changes-px-based-sizes-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLImageElement/image-srcset-react-to-media-changes-px-based-sizes-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLLinkElement/onload-completion-test-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLLinkElement/onload-completion-test-expected.txt
index 03337d0..bc6cf746 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLLinkElement/onload-completion-test-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLLinkElement/onload-completion-test-expected.txt
@@ -1,5 +1,4 @@
 This test verifies that at the time a body onload function is called that the subresources of this page (in particular the image) are already loaded. The page verifies that the image has the expected dimensions at the time of the onload event, and prints its result based on that. This is a regression test for a bug introduced by the patch for bug 3652.
 
 
-
 SUCCESS.
diff --git a/third_party/blink/web_tests/fast/dom/HTMLObjectElement/form/test1-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLObjectElement/form/test1-expected.txt
index 7e7883e..2272763 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLObjectElement/form/test1-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLObjectElement/form/test1-expected.txt
@@ -3,6 +3,3 @@
 Passed
 
 Passed
-
-
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLObjectElement/update-data-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLObjectElement/update-data-expected.txt
index 40ce228a..005bc6e 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLObjectElement/update-data-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLObjectElement/update-data-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLProgressElement/indeterminate-progress-002-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLProgressElement/indeterminate-progress-002-expected.txt
index fd762ea..cb896a9 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLProgressElement/indeterminate-progress-002-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLProgressElement/indeterminate-progress-002-expected.txt
@@ -1,5 +1,4 @@
 The test passes if the Filler Text below is green.
 
-
 Filler Text
 Pass
diff --git a/third_party/blink/web_tests/fast/dom/HTMLProgressElement/progress-clone-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLProgressElement/progress-clone-expected.txt
index d28a6a2e..393ff88c 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLProgressElement/progress-clone-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLProgressElement/progress-clone-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLProgressElement/progress-element-indeterminate-crash-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLProgressElement/progress-element-indeterminate-crash-expected.txt
index f545aca..1fd3770 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLProgressElement/progress-element-indeterminate-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLProgressElement/progress-element-indeterminate-crash-expected.txt
@@ -1,6 +1,5 @@
 Test for Bug 102459. OK if not crashed.
 
-
 PASS unless crash.
 
 PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/fast/dom/HTMLScriptElement/script-element-moved-by-onerror-crash-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLScriptElement/script-element-moved-by-onerror-crash-expected.txt
index 14de7365..5bbcdfa 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLScriptElement/script-element-moved-by-onerror-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLScriptElement/script-element-moved-by-onerror-crash-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/HTMLScriptElement/script-element-moved-by-onerror-sync-crash-expected.txt b/third_party/blink/web_tests/fast/dom/HTMLScriptElement/script-element-moved-by-onerror-sync-crash-expected.txt
index 1017a6ba..cacbbb7 100644
--- a/third_party/blink/web_tests/fast/dom/HTMLScriptElement/script-element-moved-by-onerror-sync-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/HTMLScriptElement/script-element-moved-by-onerror-sync-crash-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/MutationObserver/parser-mutations-expected.txt b/third_party/blink/web_tests/fast/dom/MutationObserver/parser-mutations-expected.txt
index dd21042b..525d112 100644
--- a/third_party/blink/web_tests/fast/dom/MutationObserver/parser-mutations-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/MutationObserver/parser-mutations-expected.txt
@@ -38,5 +38,3 @@
 
 
 Mutation records should be delivered for all parser mutations after the above script.
-
-
diff --git a/third_party/blink/web_tests/fast/dom/MutationObserver/shadow-dom-expected.txt b/third_party/blink/web_tests/fast/dom/MutationObserver/shadow-dom-expected.txt
index 85e0556..53946a4 100644
--- a/third_party/blink/web_tests/fast/dom/MutationObserver/shadow-dom-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/MutationObserver/shadow-dom-expected.txt
@@ -15,4 +15,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-from-svg-element-range-expected.txt b/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-from-svg-element-range-expected.txt
index f903e3e..4bd3145 100644
--- a/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-from-svg-element-range-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-from-svg-element-range-expected.txt
@@ -3,4 +3,3 @@
 PASS
 
 Inserted fragment
-
diff --git a/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-namespaces1-expected.txt b/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-namespaces1-expected.txt
index a89ef41..b2948ae 100644
--- a/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-namespaces1-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-namespaces1-expected.txt
@@ -1,5 +1,3 @@
 Test of Range.createContextualFragment() with in-scope namespace prefixes on attributes. If the test succeeds you will see the word "PASS" below.
 
 PASS
-
-
diff --git a/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-namespaces2-expected.txt b/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-namespaces2-expected.txt
index 19dfc25..b3208b4 100644
--- a/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-namespaces2-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-namespaces2-expected.txt
@@ -1,5 +1,3 @@
 Test of Range.createContextualFragment() with in-scope namespace prefixes on elements. If the test succeeds you will see the word "PASS" below.
 
 PASS
-
-
diff --git a/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-namespaces3-expected.txt b/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-namespaces3-expected.txt
index 4b344d7..4c6ec132 100644
--- a/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-namespaces3-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Range/create-contextual-fragment-namespaces3-expected.txt
@@ -1,5 +1,3 @@
 Test of Range.createContextualFragment() with in-scope namespace prefixes, where the XML fragment introduces additional namespace prefixes. If the test succeeds you will see the word "PASS" below.
 
 PASS
-
-
diff --git a/third_party/blink/web_tests/fast/dom/Range/range-constructor-expected.txt b/third_party/blink/web_tests/fast/dom/Range/range-constructor-expected.txt
index 473e5ef..fff5318 100644
--- a/third_party/blink/web_tests/fast/dom/Range/range-constructor-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Range/range-constructor-expected.txt
@@ -15,4 +15,3 @@
 TEST COMPLETE
 
 Test
-
diff --git a/third_party/blink/web_tests/fast/dom/Range/select-node-different-document-expected.txt b/third_party/blink/web_tests/fast/dom/Range/select-node-different-document-expected.txt
index 57c03c0..69a8557b6 100644
--- a/third_party/blink/web_tests/fast/dom/Range/select-node-different-document-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Range/select-node-different-document-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/Location/window-shadow-location-using-js-object-with-toString-expected.txt b/third_party/blink/web_tests/fast/dom/Window/Location/window-shadow-location-using-js-object-with-toString-expected.txt
index d553896..6b0d58a 100644
--- a/third_party/blink/web_tests/fast/dom/Window/Location/window-shadow-location-using-js-object-with-toString-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/Location/window-shadow-location-using-js-object-with-toString-expected.txt
@@ -3,4 +3,3 @@
 TEST COMPLETE
 
 PASS result is 'pass.html'
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/Location/window-shadow-location-using-string-expected.txt b/third_party/blink/web_tests/fast/dom/Window/Location/window-shadow-location-using-string-expected.txt
index d553896..6b0d58a 100644
--- a/third_party/blink/web_tests/fast/dom/Window/Location/window-shadow-location-using-string-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/Location/window-shadow-location-using-string-expected.txt
@@ -3,4 +3,3 @@
 TEST COMPLETE
 
 PASS result is 'pass.html'
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/anonymous-slot-with-changes-expected.txt b/third_party/blink/web_tests/fast/dom/Window/anonymous-slot-with-changes-expected.txt
index 8c6fd51..23f9d0d 100644
--- a/third_party/blink/web_tests/fast/dom/Window/anonymous-slot-with-changes-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/anonymous-slot-with-changes-expected.txt
@@ -61,4 +61,3 @@
 PASS: eventData is done of type string
 PASS: eventData is done of type string
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/closure-access-after-navigation-iframe-expected.txt b/third_party/blink/web_tests/fast/dom/Window/closure-access-after-navigation-iframe-expected.txt
index 0c8c899..53ee75a 100644
--- a/third_party/blink/web_tests/fast/dom/Window/closure-access-after-navigation-iframe-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/closure-access-after-navigation-iframe-expected.txt
@@ -13,4 +13,3 @@
 getObjectOfParent().myVal = parent
 getGlobalOfParent().myGlobalVal = parent
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/dom-access-from-closure-iframe-expected.txt b/third_party/blink/web_tests/fast/dom/Window/dom-access-from-closure-iframe-expected.txt
index f72ab9f..e3238d4c 100644
--- a/third_party/blink/web_tests/fast/dom/Window/dom-access-from-closure-iframe-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/dom-access-from-closure-iframe-expected.txt
@@ -3,4 +3,3 @@
 name: child
 window.name: child
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/es52-globals-expected.txt b/third_party/blink/web_tests/fast/dom/Window/es52-globals-expected.txt
index 9ea8aece..b7d3026f 100644
--- a/third_party/blink/web_tests/fast/dom/Window/es52-globals-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/es52-globals-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/file-origin-window-open-expected.txt b/third_party/blink/web_tests/fast/dom/Window/file-origin-window-open-expected.txt
index 68726f20..fdb87ea6 100644
--- a/third_party/blink/web_tests/fast/dom/Window/file-origin-window-open-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/file-origin-window-open-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/navigated-window-properties-expected.txt b/third_party/blink/web_tests/fast/dom/Window/navigated-window-properties-expected.txt
index 680ba09..2498418 100644
--- a/third_party/blink/web_tests/fast/dom/Window/navigated-window-properties-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/navigated-window-properties-expected.txt
@@ -1,3 +1 @@
 Accessing properties of a navigated window shouldn't crash
-
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-in-closure-after-navigation-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-in-closure-after-navigation-expected.txt
index acd2ed3..1579b43 100644
--- a/third_party/blink/web_tests/fast/dom/Window/property-access-in-closure-after-navigation-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/property-access-in-closure-after-navigation-expected.txt
@@ -10,4 +10,3 @@
 FAIL frames should be non-null. Was null
 PASS parent is null.
 PASS top is null.
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
index e47d0d6..56f72c0 100644
--- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
@@ -119,4 +119,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
index 6041ee0..0e46b5e8 100644
--- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
@@ -119,4 +119,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt
index 937ced4..bd8e4ec0 100644
--- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt
@@ -188,4 +188,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt
index ae0e541..217db59 100644
--- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt
@@ -188,4 +188,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-access-after-navigation-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-access-after-navigation-expected.txt
index 43886200..f16504f 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-access-after-navigation-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-access-after-navigation-expected.txt
@@ -1,4 +1,3 @@
 Test for bug 27394: properties on a window object should be accessible after the frame of the window object has navigated to another page.
 
 SUCCESS
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-early-properties-xhr-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-early-properties-xhr-expected.txt
index 2d5ce01..e4310f0 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-early-properties-xhr-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-early-properties-xhr-expected.txt
@@ -3,4 +3,3 @@
 Should say SUCCESS:
 
 SUCCESS
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-lookup-precedence-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-lookup-precedence-expected.txt
index 6b843fa..def93e0 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-lookup-precedence-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-lookup-precedence-expected.txt
@@ -5,7 +5,6 @@
 
 
 
-
 PASS 'function alert() { [native code] }' is 'function alert() { [native code] }'
 PASS 'function alert() { [native code] }' is 'function alert() { [native code] }'
 PASS 'function atob() { [native code] }' is 'function atob() { [native code] }'
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-object-cross-frame-calls-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-object-cross-frame-calls-expected.txt
index 4ad0ac03..f95b990 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-object-cross-frame-calls-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-object-cross-frame-calls-expected.txt
@@ -1,5 +1,3 @@
 The following line should say "parent", meaning that the proper window object was used.
 
 parent
-
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-open-self-from-other-frame-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-open-self-from-other-frame-expected.txt
index e10e855..f920f2b5 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-open-self-from-other-frame-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-open-self-from-other-frame-expected.txt
@@ -1,3 +1,2 @@
 This tests that calling somewindow.open performs the frame name lookup in the context of somewindow and not the window running the script.
 SUCCESS - did not replace window contents
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-open-with-different-active-and-opener-windows-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-open-with-different-active-and-opener-windows-expected.txt
index 9148c324..211b50a 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-open-with-different-active-and-opener-windows-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-open-with-different-active-and-opener-windows-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-postmessage-clone-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-postmessage-clone-expected.txt
index b1046b7..c2a1426 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-postmessage-clone-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-postmessage-clone-expected.txt
@@ -1,5 +1,4 @@
 Tests that we clone object hierarchies
-
 PASS: 'postMessage((function(){}))' threw DataCloneError: Failed to execute 'postMessage' on 'Window': function(){} could not be cloned.
 PASS: 'postMessage(var x = 0; try { eval("badref"); } catch(e) { x = e; } x)' threw DataCloneError: Failed to execute 'postMessage' on 'Window': ReferenceError: badref is not defined could not be cloned.
 PASS: 'postMessage(arrayBuffer)' threw DataCloneError: Failed to execute 'postMessage' on 'Window': An ArrayBuffer is neutered and could not be cloned.
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-postmessage-clone-frames-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-postmessage-clone-frames-expected.txt
index 5e9f248..76c63c3 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-postmessage-clone-frames-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-postmessage-clone-frames-expected.txt
@@ -1,5 +1,4 @@
 Tests that we clone object hierarchies
-
 PASS: (frames[0].tests[0]).eventData instanceof (frames[0]).Object is true of type boolean
 PASS: (frames[0].tests[0]).event.data instanceof (frames[0]).Object is true of type boolean
 PASS: (frames[0].tests[1]).eventData instanceof (frames[0]).Array is true of type boolean
@@ -11,4 +10,3 @@
 PASS: (frames[0].tests[4]).eventData instanceof (frames[0]).FileList is true of type boolean
 PASS: (frames[0].tests[4]).event.data instanceof (frames[0]).FileList is true of type boolean
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-postmessage-clone-really-deep-array-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-postmessage-clone-really-deep-array-expected.txt
index 11e9ba04..dffc255 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-postmessage-clone-really-deep-array-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-postmessage-clone-really-deep-array-expected.txt
@@ -1,5 +1,4 @@
 Tests that we abort cloning overdeep arrays.
-
 PASS: 'postMessage(reallyDeepArray)' threw RangeError: Maximum call stack size exceeded
 PASS: eventData is done of type string
 
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-postmessage-user-gesture-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-postmessage-user-gesture-expected.txt
index fd72cb19..eaa0e8a 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-postmessage-user-gesture-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-postmessage-user-gesture-expected.txt
@@ -1,6 +1,5 @@
 Test that user gesture is available through postMessages to appropriate frames.
 Click me
-
 PASS Stack postMessages on self window and the user gesture is only consumed once
 PASS Bounce postMessages between self and frame window and the user gesture is consumed only once in self window
 PASS Bounce postMessages between self and frame window and the user gesture is consumed 0 times in frame
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-property-clearing-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-property-clearing-expected.txt
index 722432b..8c51e778 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-property-clearing-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-property-clearing-expected.txt
@@ -15,4 +15,3 @@
 PASS: 'name' in childWindow should be true and is.
 PASS: childWindow.name should be test and is.
 
-
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-resize-and-move-sub-frame-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-resize-and-move-sub-frame-expected.txt
index efb2102..2048e74 100644
--- a/third_party/blink/web_tests/fast/dom/Window/window-resize-and-move-sub-frame-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/Window/window-resize-and-move-sub-frame-expected.txt
@@ -34,4 +34,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/constructors-cached-navigate-expected.txt b/third_party/blink/web_tests/fast/dom/constructors-cached-navigate-expected.txt
index cf8aa59..85a8609 100644
--- a/third_party/blink/web_tests/fast/dom/constructors-cached-navigate-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/constructors-cached-navigate-expected.txt
@@ -47,4 +47,3 @@
 PASS storedConstructors.Audio.testProperty is "property set successfully"
 PASS testFrame.contentWindow.Audio.testProperty is undefined.
 PASS testFrame.contentWindow.Audio.cachedOnOwnerDocument is true
-
diff --git a/third_party/blink/web_tests/fast/dom/cross-frame-node-prototype-expected.txt b/third_party/blink/web_tests/fast/dom/cross-frame-node-prototype-expected.txt
index 09fa357..06a750a0 100644
--- a/third_party/blink/web_tests/fast/dom/cross-frame-node-prototype-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/cross-frame-node-prototype-expected.txt
@@ -1,5 +1,3 @@
 Test for bug 26520: Accessing a DOM node from a parent window in a child iframe moves the prototype to the child iframe and resets it in the parent window.
 
-
-
 PASS
diff --git a/third_party/blink/web_tests/fast/dom/custom/frameElement-crash-expected.txt b/third_party/blink/web_tests/fast/dom/custom/frameElement-crash-expected.txt
index 631bf3e4..c4d031e 100644
--- a/third_party/blink/web_tests/fast/dom/custom/frameElement-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/custom/frameElement-crash-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/destroy-selected-radio-button-crash-expected.txt b/third_party/blink/web_tests/fast/dom/destroy-selected-radio-button-crash-expected.txt
index f7ee20f..7288d0f7 100644
--- a/third_party/blink/web_tests/fast/dom/destroy-selected-radio-button-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/destroy-selected-radio-button-crash-expected.txt
@@ -1,3 +1,2 @@
 This tests that destroying a checked radio button that does not have a form correctly removes the radio button element from the checked radio buttons map. This test should ideally be run with GuardMalloc or a similar memory checker.
 SUCCESS - Didn't crash!
-
diff --git a/third_party/blink/web_tests/fast/dom/exception-no-frame-inline-script-crash-expected.txt b/third_party/blink/web_tests/fast/dom/exception-no-frame-inline-script-crash-expected.txt
index 22ff8ef..1ab14ae 100644
--- a/third_party/blink/web_tests/fast/dom/exception-no-frame-inline-script-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/exception-no-frame-inline-script-crash-expected.txt
@@ -1,5 +1,3 @@
 This test checks for a crash when throwing an exception under the following conditions: (1) The throwing script's document has no frame; (2) The script is inline in the document.
 
 PASS: You didn't crash.
-
-
diff --git a/third_party/blink/web_tests/fast/dom/exception-no-frame-timeout-crash-expected.txt b/third_party/blink/web_tests/fast/dom/exception-no-frame-timeout-crash-expected.txt
index 4ad3405..cd79362 100644
--- a/third_party/blink/web_tests/fast/dom/exception-no-frame-timeout-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/exception-no-frame-timeout-crash-expected.txt
@@ -1,5 +1,3 @@
 This test checks for a crash when throwing an exception under the following conditions: (1) The throwing script's document has no frame; (2) The script is run from a timeout.
 
 PASS: You didn't crash.
-
-
diff --git a/third_party/blink/web_tests/fast/dom/fragment-activation-focuses-target-expected.txt b/third_party/blink/web_tests/fast/dom/fragment-activation-focuses-target-expected.txt
index 1f9f382..c324bcd8 100644
--- a/third_party/blink/web_tests/fast/dom/fragment-activation-focuses-target-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/fragment-activation-focuses-target-expected.txt
@@ -35,4 +35,3 @@
 
 fragment1
 fragment2
-
diff --git a/third_party/blink/web_tests/fast/dom/frameElement-accessor-context-expected.txt b/third_party/blink/web_tests/fast/dom/frameElement-accessor-context-expected.txt
index 4167de48..d9966946 100644
--- a/third_party/blink/web_tests/fast/dom/frameElement-accessor-context-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/frameElement-accessor-context-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/gc-4-expected.txt b/third_party/blink/web_tests/fast/dom/gc-4-expected.txt
index 95ccd86e..e2f1d193 100644
--- a/third_party/blink/web_tests/fast/dom/gc-4-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/gc-4-expected.txt
@@ -2,6 +2,4 @@
 
 If the test passes, you will see the word "passed" below. Otherwise, it will crash.
 
-
-
 passed
diff --git a/third_party/blink/web_tests/fast/dom/horizontal-scrollbar-in-rtl-expected.txt b/third_party/blink/web_tests/fast/dom/horizontal-scrollbar-in-rtl-expected.txt
index c456d5d..0dd8feb 100644
--- a/third_party/blink/web_tests/fast/dom/horizontal-scrollbar-in-rtl-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/horizontal-scrollbar-in-rtl-expected.txt
@@ -1,8 +1,8 @@
-original scroll x for RTL page : Success
-horizontal scroll: : Success
-continuously call window.scrollX : Success
-zoom in and out preserve scroll position: Success
-resize preserves scroll position: Success
+ original scroll x for RTL page : Success
+ horizontal scroll: : Success
+ continuously call window.scrollX : Success
+ zoom in and out preserve scroll position: Success
+ resize preserves scroll position: Success
 KeyDown HOME move x-scroll position to right for RTL page: -1000
 KeyDown END move x-scroll position to right for RTL page: -1000
-selectAll selects all document: Success
+ selectAll selects all document: Success
diff --git a/third_party/blink/web_tests/fast/dom/iframe-document-expected.txt b/third_party/blink/web_tests/fast/dom/iframe-document-expected.txt
index a65f96b..a498ccd 100644
--- a/third_party/blink/web_tests/fast/dom/iframe-document-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/iframe-document-expected.txt
@@ -1,5 +1,3 @@
 This tests the document property on an HTMLIFrameElement. Internet Explorer has a document property on all elements that gives the document the element is in. Old versions of Safari had both this and another property on iframe elements to return the document inside the iframe, which created an incompatibility with at least on SAP application because it doesn't match the behavior of other browsers.
 
 TEST PASSED: The frame has no document property.
-
-
diff --git a/third_party/blink/web_tests/fast/dom/iframe-inner-size-scaling-expected.txt b/third_party/blink/web_tests/fast/dom/iframe-inner-size-scaling-expected.txt
index 3da1d19..3fdee758 100644
--- a/third_party/blink/web_tests/fast/dom/iframe-inner-size-scaling-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/iframe-inner-size-scaling-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/inline-event-attributes-lookup-expected.txt b/third_party/blink/web_tests/fast/dom/inline-event-attributes-lookup-expected.txt
index 0705e4b..2ac3609 100644
--- a/third_party/blink/web_tests/fast/dom/inline-event-attributes-lookup-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/inline-event-attributes-lookup-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/javascript-url-crash-function-expected.txt b/third_party/blink/web_tests/fast/dom/javascript-url-crash-function-expected.txt
index ee3eb76..b1fd7b5 100644
--- a/third_party/blink/web_tests/fast/dom/javascript-url-crash-function-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/javascript-url-crash-function-expected.txt
@@ -1,7 +1,5 @@
 This page tests whether loading a javascript: URL into an iframe while the iframe is calling a JavaScript function causes a crash.
 
-
-
 --------
 Frame: '<!--framePath //<!--frame0-->-->'
 --------
diff --git a/third_party/blink/web_tests/fast/dom/javascript-url-exception-isolation-expected.txt b/third_party/blink/web_tests/fast/dom/javascript-url-exception-isolation-expected.txt
index fe11dde..933ec03 100644
--- a/third_party/blink/web_tests/fast/dom/javascript-url-exception-isolation-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/javascript-url-exception-isolation-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/left-overflow-in-ltr-expected.txt b/third_party/blink/web_tests/fast/dom/left-overflow-in-ltr-expected.txt
index fbac4d12..4b4c6681 100644
--- a/third_party/blink/web_tests/fast/dom/left-overflow-in-ltr-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/left-overflow-in-ltr-expected.txt
@@ -1,2 +1,2 @@
 test left overflow in LTR page.
-scroll: Success
+ scroll: Success
diff --git a/third_party/blink/web_tests/fast/dom/nodesFromRect/nodesFromRect-svg-expected.txt b/third_party/blink/web_tests/fast/dom/nodesFromRect/nodesFromRect-svg-expected.txt
index a1446516..3154c42 100644
--- a/third_party/blink/web_tests/fast/dom/nodesFromRect/nodesFromRect-svg-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/nodesFromRect/nodesFromRect-svg-expected.txt
@@ -23,6 +23,3 @@
 
 TEST COMPLETE
 
-
-
-
diff --git a/third_party/blink/web_tests/fast/dom/remove-svg-font-face-element-crash-expected.txt b/third_party/blink/web_tests/fast/dom/remove-svg-font-face-element-crash-expected.txt
index 3d3ded1f..8aab1f9b 100644
--- a/third_party/blink/web_tests/fast/dom/remove-svg-font-face-element-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/remove-svg-font-face-element-crash-expected.txt
@@ -1,2 +1 @@
 fi1234
-
diff --git a/third_party/blink/web_tests/fast/dom/replaced-image-map-expected.txt b/third_party/blink/web_tests/fast/dom/replaced-image-map-expected.txt
index 7b684801..bb0ace1 100644
--- a/third_party/blink/web_tests/fast/dom/replaced-image-map-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/replaced-image-map-expected.txt
@@ -1,4 +1,3 @@
 Test for bug 9504: img tag rewritten by innerHTML doesn't use image map.
 
 SUCCESS
-
diff --git a/third_party/blink/web_tests/fast/dom/right-overflow-in-rtl-expected.txt b/third_party/blink/web_tests/fast/dom/right-overflow-in-rtl-expected.txt
index d3579cd..ca098c9 100644
--- a/third_party/blink/web_tests/fast/dom/right-overflow-in-rtl-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/right-overflow-in-rtl-expected.txt
@@ -1,2 +1,2 @@
 test right overflow in RTL page.
-scroll: Success
+ scroll: Success
diff --git a/third_party/blink/web_tests/fast/dom/root-client-size-iframe-expected.txt b/third_party/blink/web_tests/fast/dom/root-client-size-iframe-expected.txt
index 5cb8369..8729752 100644
--- a/third_party/blink/web_tests/fast/dom/root-client-size-iframe-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/root-client-size-iframe-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/set-outer-html-expected.txt b/third_party/blink/web_tests/fast/dom/set-outer-html-expected.txt
index 2cc7128..3d30ddd 100644
--- a/third_party/blink/web_tests/fast/dom/set-outer-html-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/set-outer-html-expected.txt
@@ -1,5 +1,5 @@
 Replaced node using outerHTML.
-removing node using outerHTML.
+ removing node using outerHTML.
 Testing merging text nodes.
 Testing adding
 using outerHTML.
diff --git a/third_party/blink/web_tests/fast/dom/set-outer-text-expected.txt b/third_party/blink/web_tests/fast/dom/set-outer-text-expected.txt
index 328c367..1db4b9d 100644
--- a/third_party/blink/web_tests/fast/dom/set-outer-text-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/set-outer-text-expected.txt
@@ -1,5 +1,5 @@
 Replaced node using outerText.
-removing node using outerText.
+ removing node using outerText.
 Testing adding br
 using outerText.
 PASS: replace
diff --git a/third_party/blink/web_tests/fast/dom/shadow/activeelement-should-be-shadowhost-expected.txt b/third_party/blink/web_tests/fast/dom/shadow/activeelement-should-be-shadowhost-expected.txt
index ee64bc0..f532771 100644
--- a/third_party/blink/web_tests/fast/dom/shadow/activeelement-should-be-shadowhost-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/shadow/activeelement-should-be-shadowhost-expected.txt
@@ -37,5 +37,3 @@
 PASS: top/iframe4 document.activeElement is top/iframe4/iframe4_1
 PASS: top/iframe4/iframe4_1 document.activeElement is top/iframe4/iframe4_1/input4
 
-
-
diff --git a/third_party/blink/web_tests/fast/dom/shadow/event-path-svg-expected.txt b/third_party/blink/web_tests/fast/dom/shadow/event-path-svg-expected.txt
index eee521a..3ff19f6 100644
--- a/third_party/blink/web_tests/fast/dom/shadow/event-path-svg-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/shadow/event-path-svg-expected.txt
@@ -5,4 +5,3 @@
 TEST COMPLETE
 
 
-
diff --git a/third_party/blink/web_tests/fast/dom/shadow/focus-controller-recursion-crash-expected.txt b/third_party/blink/web_tests/fast/dom/shadow/focus-controller-recursion-crash-expected.txt
index 13af7e286..332c08e5b 100644
--- a/third_party/blink/web_tests/fast/dom/shadow/focus-controller-recursion-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/shadow/focus-controller-recursion-crash-expected.txt
@@ -4,5 +4,5 @@
 TEST COMPLETE
 
 This test passes if it does not crash.
-
-
+ 
+ 
diff --git a/third_party/blink/web_tests/fast/dom/shadow/focus-navigation-negative-tabindex-expected.txt b/third_party/blink/web_tests/fast/dom/shadow/focus-navigation-negative-tabindex-expected.txt
index 2b99c77..7687e42 100644
--- a/third_party/blink/web_tests/fast/dom/shadow/focus-navigation-negative-tabindex-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/shadow/focus-navigation-negative-tabindex-expected.txt
@@ -11,4 +11,3 @@
 TEST COMPLETE
 
 
-
diff --git a/third_party/blink/web_tests/fast/dom/shadow/iframe-shadow-expected.txt b/third_party/blink/web_tests/fast/dom/shadow/iframe-shadow-expected.txt
index 3587fd8..8b2b659 100644
--- a/third_party/blink/web_tests/fast/dom/shadow/iframe-shadow-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/shadow/iframe-shadow-expected.txt
@@ -21,4 +21,3 @@
 TEST COMPLETE
 
   
-
diff --git a/third_party/blink/web_tests/fast/dom/shadow/input-color-in-content-expected.txt b/third_party/blink/web_tests/fast/dom/shadow/input-color-in-content-expected.txt
index 46c5aa8..01e2a97 100644
--- a/third_party/blink/web_tests/fast/dom/shadow/input-color-in-content-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/shadow/input-color-in-content-expected.txt
@@ -15,4 +15,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/shadow/shadow-tree-listener-clearance-expected.txt b/third_party/blink/web_tests/fast/dom/shadow/shadow-tree-listener-clearance-expected.txt
index 4dc90544..7f1eccb 100644
--- a/third_party/blink/web_tests/fast/dom/shadow/shadow-tree-listener-clearance-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/shadow/shadow-tree-listener-clearance-expected.txt
@@ -5,4 +5,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/shadow/suppress-mutation-events-in-shadow-expected.txt b/third_party/blink/web_tests/fast/dom/shadow/suppress-mutation-events-in-shadow-expected.txt
index 31d701e..6141647f 100644
--- a/third_party/blink/web_tests/fast/dom/shadow/suppress-mutation-events-in-shadow-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/shadow/suppress-mutation-events-in-shadow-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/shadow/tab-order-iframe-and-shadow-expected.txt b/third_party/blink/web_tests/fast/dom/shadow/tab-order-iframe-and-shadow-expected.txt
index e0bd742..0bc3f8e 100644
--- a/third_party/blink/web_tests/fast/dom/shadow/tab-order-iframe-and-shadow-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/shadow/tab-order-iframe-and-shadow-expected.txt
@@ -60,5 +60,3 @@
 TEST COMPLETE
 
 
-
-
diff --git a/third_party/blink/web_tests/fast/dom/shadow/tree-scope-crash-expected.txt b/third_party/blink/web_tests/fast/dom/shadow/tree-scope-crash-expected.txt
index d5e70672a..a6146aa 100644
--- a/third_party/blink/web_tests/fast/dom/shadow/tree-scope-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/shadow/tree-scope-crash-expected.txt
@@ -1,2 +1 @@
 PASS unless crash
-
diff --git a/third_party/blink/web_tests/fast/dom/styled-clone-inline-style-decl-parent-crash-expected.txt b/third_party/blink/web_tests/fast/dom/styled-clone-inline-style-decl-parent-crash-expected.txt
index 69154eb2..48bdc14 100644
--- a/third_party/blink/web_tests/fast/dom/styled-clone-inline-style-decl-parent-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/styled-clone-inline-style-decl-parent-crash-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/styled-not-in-document-clone-inline-style-decl-parent-crash-expected.txt b/third_party/blink/web_tests/fast/dom/styled-not-in-document-clone-inline-style-decl-parent-crash-expected.txt
index 69154eb2..48bdc14 100644
--- a/third_party/blink/web_tests/fast/dom/styled-not-in-document-clone-inline-style-decl-parent-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/styled-not-in-document-clone-inline-style-decl-parent-crash-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dom/wrapper-classes-expected.txt b/third_party/blink/web_tests/fast/dom/wrapper-classes-expected.txt
index e41b7c6..bef8979 100644
--- a/third_party/blink/web_tests/fast/dom/wrapper-classes-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/wrapper-classes-expected.txt
@@ -632,4 +632,3 @@
 FAIL tagPrototypeClassString('xmp') should be HTMLPreElementPrototype. Was HTMLPreElement.
 PASS tagConstructorClassString('xmp') is "Function"
 PASS tagConstructorName('xmp') is "HTMLPreElement"
-
diff --git a/third_party/blink/web_tests/fast/dom/wrapper-context-expected.txt b/third_party/blink/web_tests/fast/dom/wrapper-context-expected.txt
index 2d516279..3e4ae5d 100644
--- a/third_party/blink/web_tests/fast/dom/wrapper-context-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/wrapper-context-expected.txt
@@ -4,5 +4,3 @@
 Running...
 
 PASS
-
-
diff --git a/third_party/blink/web_tests/fast/dom/wrapper-scope-expected.txt b/third_party/blink/web_tests/fast/dom/wrapper-scope-expected.txt
index 8473672..8654bed31 100644
--- a/third_party/blink/web_tests/fast/dom/wrapper-scope-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/wrapper-scope-expected.txt
@@ -46,4 +46,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dynamic/hover-sibling-reattach-expected.txt b/third_party/blink/web_tests/fast/dynamic/hover-sibling-reattach-expected.txt
index f380617..513eb6a3 100644
--- a/third_party/blink/web_tests/fast/dynamic/hover-sibling-reattach-expected.txt
+++ b/third_party/blink/web_tests/fast/dynamic/hover-sibling-reattach-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/dynamic/insertAdjacent-svg-expected.txt b/third_party/blink/web_tests/fast/dynamic/insertAdjacent-svg-expected.txt
index 7de7ba69..a756afa 100644
--- a/third_party/blink/web_tests/fast/dynamic/insertAdjacent-svg-expected.txt
+++ b/third_party/blink/web_tests/fast/dynamic/insertAdjacent-svg-expected.txt
@@ -7,4 +7,3 @@
 10
 11
 12
-
diff --git a/third_party/blink/web_tests/fast/encoding/css-cached-bom-expected.txt b/third_party/blink/web_tests/fast/encoding/css-cached-bom-expected.txt
index 329ea59..3d60c60 100644
--- a/third_party/blink/web_tests/fast/encoding/css-cached-bom-expected.txt
+++ b/third_party/blink/web_tests/fast/encoding/css-cached-bom-expected.txt
@@ -1,3 +1,2 @@
 Test that stylesheet with BOM is correctly parsed when loaded from cache. You should see word SUCCESS below.
-
 SUCCESS
diff --git a/third_party/blink/web_tests/fast/events/anchor-empty-focus-expected.txt b/third_party/blink/web_tests/fast/events/anchor-empty-focus-expected.txt
index 3b450d2..04ba38fa 100644
--- a/third_party/blink/web_tests/fast/events/anchor-empty-focus-expected.txt
+++ b/third_party/blink/web_tests/fast/events/anchor-empty-focus-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/before-unload-adopt-within-subframes-expected.txt b/third_party/blink/web_tests/fast/events/before-unload-adopt-within-subframes-expected.txt
index ffdb12c..d4bc9a5 100644
--- a/third_party/blink/web_tests/fast/events/before-unload-adopt-within-subframes-expected.txt
+++ b/third_party/blink/web_tests/fast/events/before-unload-adopt-within-subframes-expected.txt
@@ -8,4 +8,3 @@
 PASS: fired on b
 DONE
 
-
diff --git a/third_party/blink/web_tests/fast/events/before-unload-crash-expected.txt b/third_party/blink/web_tests/fast/events/before-unload-crash-expected.txt
index 38f93d1..41bb2a8 100644
--- a/third_party/blink/web_tests/fast/events/before-unload-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/events/before-unload-crash-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/before-unload-forbidden-navigation-expected.txt b/third_party/blink/web_tests/fast/events/before-unload-forbidden-navigation-expected.txt
index 4f1a788..5c63e004 100644
--- a/third_party/blink/web_tests/fast/events/before-unload-forbidden-navigation-expected.txt
+++ b/third_party/blink/web_tests/fast/events/before-unload-forbidden-navigation-expected.txt
@@ -2,7 +2,6 @@
 
 PASS 1/2
 
-
 --------
 Frame: '<!--framePath //<!--frame0-->-->'
 --------
diff --git a/third_party/blink/web_tests/fast/events/before-unload-in-subframe-expected.txt b/third_party/blink/web_tests/fast/events/before-unload-in-subframe-expected.txt
index b442c70..d16afd4 100644
--- a/third_party/blink/web_tests/fast/events/before-unload-in-subframe-expected.txt
+++ b/third_party/blink/web_tests/fast/events/before-unload-in-subframe-expected.txt
@@ -3,7 +3,6 @@
 PASS
 
 
-
 --------
 Frame: '<!--framePath //<!--frame0-->-->'
 --------
diff --git a/third_party/blink/web_tests/fast/events/before-unload-javascript-navigation-expected.txt b/third_party/blink/web_tests/fast/events/before-unload-javascript-navigation-expected.txt
index c21a4c3..1548e0a 100644
--- a/third_party/blink/web_tests/fast/events/before-unload-javascript-navigation-expected.txt
+++ b/third_party/blink/web_tests/fast/events/before-unload-javascript-navigation-expected.txt
@@ -1,4 +1,3 @@
 This test ensures setting location.href with javascript scheme properly executes the script even while beforeunload event is being fired. You should see PASS 1/2 and PASS 2/2 below:
 
 PASS
-
diff --git a/third_party/blink/web_tests/fast/events/before-unload-remove-and-add-subframe-expected.txt b/third_party/blink/web_tests/fast/events/before-unload-remove-and-add-subframe-expected.txt
index c9ffe43f..b21dd8c 100644
--- a/third_party/blink/web_tests/fast/events/before-unload-remove-and-add-subframe-expected.txt
+++ b/third_party/blink/web_tests/fast/events/before-unload-remove-and-add-subframe-expected.txt
@@ -5,4 +5,3 @@
 PASS: fired on c
 DONE
 
-
diff --git a/third_party/blink/web_tests/fast/events/before-unload-return-bad-value-expected.txt b/third_party/blink/web_tests/fast/events/before-unload-return-bad-value-expected.txt
index 94a9334d9..25afd108 100644
--- a/third_party/blink/web_tests/fast/events/before-unload-return-bad-value-expected.txt
+++ b/third_party/blink/web_tests/fast/events/before-unload-return-bad-value-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/before-unload-with-subframes-expected.txt b/third_party/blink/web_tests/fast/events/before-unload-with-subframes-expected.txt
index 6e83fcf..7212540a 100644
--- a/third_party/blink/web_tests/fast/events/before-unload-with-subframes-expected.txt
+++ b/third_party/blink/web_tests/fast/events/before-unload-with-subframes-expected.txt
@@ -3,7 +3,6 @@
 PASS 1/2
 
 
-
 --------
 Frame: '<!--framePath //<!--frame0-->-->'
 --------
diff --git a/third_party/blink/web_tests/fast/events/click-range-slider-expected.txt b/third_party/blink/web_tests/fast/events/click-range-slider-expected.txt
index 73fc512..6d275f5 100644
--- a/third_party/blink/web_tests/fast/events/click-range-slider-expected.txt
+++ b/third_party/blink/web_tests/fast/events/click-range-slider-expected.txt
@@ -1,6 +1,5 @@
 Test that click events are fired for a slider when the range of values is dense enough that the thumb element is repositioned under the cursor on mouse press.
 
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/events/clipboard-dataTransferItemList-expected.txt b/third_party/blink/web_tests/fast/events/clipboard-dataTransferItemList-expected.txt
index 1e11685..4e13f658 100644
--- a/third_party/blink/web_tests/fast/events/clipboard-dataTransferItemList-expected.txt
+++ b/third_party/blink/web_tests/fast/events/clipboard-dataTransferItemList-expected.txt
@@ -1,9 +1,9 @@
 To manually test, press your browser shortcut for copy and then for paste. Several lines that say 'PASS' should appear below.
 
-Copy handler:
+Copy handler: 
 Legacy
 DataTransferItemList
-Paste handler:
+Paste handler: 
 Legacy
 DataTransferItemList
 
diff --git a/third_party/blink/web_tests/fast/events/composition-event-source-device-event-sender-expected.txt b/third_party/blink/web_tests/fast/events/composition-event-source-device-event-sender-expected.txt
index 725d67e..e6fc1ea 100644
--- a/third_party/blink/web_tests/fast/events/composition-event-source-device-event-sender-expected.txt
+++ b/third_party/blink/web_tests/fast/events/composition-event-source-device-event-sender-expected.txt
@@ -15,4 +15,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/constructors/track-event-constructor-expected.txt b/third_party/blink/web_tests/fast/events/constructors/track-event-constructor-expected.txt
index 3da0a8c..44388cd 100644
--- a/third_party/blink/web_tests/fast/events/constructors/track-event-constructor-expected.txt
+++ b/third_party/blink/web_tests/fast/events/constructors/track-event-constructor-expected.txt
@@ -37,4 +37,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/contextmenu-scrolled-page-with-frame-expected.txt b/third_party/blink/web_tests/fast/events/contextmenu-scrolled-page-with-frame-expected.txt
index 72c7df8..a9e7038 100644
--- a/third_party/blink/web_tests/fast/events/contextmenu-scrolled-page-with-frame-expected.txt
+++ b/third_party/blink/web_tests/fast/events/contextmenu-scrolled-page-with-frame-expected.txt
@@ -1,5 +1,4 @@
 This tests that context menu events are sent to the correct frame when a page is scrolled. To test manually, scroll the page so that the top of the iframe is flush with the top of the web page area, then right-click just below the iframe. You should get a context menu that does not contain any mention of frames.
 
-
 PASS: main document received a context menu event
 
diff --git a/third_party/blink/web_tests/fast/events/drag-dataTransferItemList-expected.txt b/third_party/blink/web_tests/fast/events/drag-dataTransferItemList-expected.txt
index 2e9bd6b..de1d329 100644
--- a/third_party/blink/web_tests/fast/events/drag-dataTransferItemList-expected.txt
+++ b/third_party/blink/web_tests/fast/events/drag-dataTransferItemList-expected.txt
@@ -2,10 +2,10 @@
 
 Drag Me
 Drop Here
-Drag handler:
+Drag handler: 
 Legacy
 DataTransferItemList
-Drop handler:
+Drop handler: 
 Legacy
 DataTransferItemList
 
diff --git a/third_party/blink/web_tests/fast/events/drag-image-filename-expected.txt b/third_party/blink/web_tests/fast/events/drag-image-filename-expected.txt
index 7a224ba..a49e9d20 100644
--- a/third_party/blink/web_tests/fast/events/drag-image-filename-expected.txt
+++ b/third_party/blink/web_tests/fast/events/drag-image-filename-expected.txt
@@ -1,4 +1,2 @@
 Filename being dragged: onload-image.png
 This test requires DumpRenderTree. To test manually, drag the image to the desktop. It should receive the name "onload-image.png".
-
-
diff --git a/third_party/blink/web_tests/fast/events/drag-selects-image-expected.txt b/third_party/blink/web_tests/fast/events/drag-selects-image-expected.txt
index 83742996..128a795 100644
--- a/third_party/blink/web_tests/fast/events/drag-selects-image-expected.txt
+++ b/third_party/blink/web_tests/fast/events/drag-selects-image-expected.txt
@@ -1,8 +1,6 @@
 Non-editable area
-
 Editable area
 
-
 This tests that images are properly left selected or unselected when an image drag is started. Only the image in the editable area should be selected when an image drag is started.
 
 Starting test...
diff --git a/third_party/blink/web_tests/fast/events/drag-svg-image-crash-expected.txt b/third_party/blink/web_tests/fast/events/drag-svg-image-crash-expected.txt
index 5dcbaced..41065e8 100644
--- a/third_party/blink/web_tests/fast/events/drag-svg-image-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/events/drag-svg-image-crash-expected.txt
@@ -1,4 +1,3 @@
 Tests dragging an SVG image. Test passes if the test does not crash.
 
-
 Success - drag entered
diff --git a/third_party/blink/web_tests/fast/events/event-attribute-expected.txt b/third_party/blink/web_tests/fast/events/event-attribute-expected.txt
index b8503616..9a46b895 100644
--- a/third_party/blink/web_tests/fast/events/event-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/events/event-attribute-expected.txt
@@ -270,4 +270,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/focus-querySelector-in-focus-event-handler-expected.txt b/third_party/blink/web_tests/fast/events/focus-querySelector-in-focus-event-handler-expected.txt
index 4a6047b4..fd51af3f 100644
--- a/third_party/blink/web_tests/fast/events/focus-querySelector-in-focus-event-handler-expected.txt
+++ b/third_party/blink/web_tests/fast/events/focus-querySelector-in-focus-event-handler-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/form-onchange-expected.txt b/third_party/blink/web_tests/fast/events/form-onchange-expected.txt
index 9403504..2bcd72e 100644
--- a/third_party/blink/web_tests/fast/events/form-onchange-expected.txt
+++ b/third_party/blink/web_tests/fast/events/form-onchange-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/hit-test-clip-path-reference-expected.txt b/third_party/blink/web_tests/fast/events/hit-test-clip-path-reference-expected.txt
new file mode 100644
index 0000000..5b2f327
--- /dev/null
+++ b/third_party/blink/web_tests/fast/events/hit-test-clip-path-reference-expected.txt
@@ -0,0 +1,17 @@
+Test that hit-test work with clip-path using svg reference
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS path contains point at (99, 247)
+PASS path contains point at (94, 242)
+PASS path contains point at (104, 252)
+PASS path contains point at (94, 252)
+PASS path contains point at (104, 242)
+PASS path does not contain point at (67, 215)
+PASS path does not contain point at (66, 214)
+PASS path does not contain point at (68, 216)
+
diff --git a/third_party/blink/web_tests/fast/events/hit-test-counts-expected.txt b/third_party/blink/web_tests/fast/events/hit-test-counts-expected.txt
index 17fd8c3a..e8366d2 100644
--- a/third_party/blink/web_tests/fast/events/hit-test-counts-expected.txt
+++ b/third_party/blink/web_tests/fast/events/hit-test-counts-expected.txt
@@ -91,4 +91,3 @@
 TEST COMPLETE
 
 
-
diff --git a/third_party/blink/web_tests/fast/events/iframe-mousewheel-expected.txt b/third_party/blink/web_tests/fast/events/iframe-mousewheel-expected.txt
index dbf71aa..6d4c85e5 100644
--- a/third_party/blink/web_tests/fast/events/iframe-mousewheel-expected.txt
+++ b/third_party/blink/web_tests/fast/events/iframe-mousewheel-expected.txt
@@ -2,7 +2,6 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/events/iframe-onmousemove-expected.txt b/third_party/blink/web_tests/fast/events/iframe-onmousemove-expected.txt
index ca03c0e..2d57d4c 100644
--- a/third_party/blink/web_tests/fast/events/iframe-onmousemove-expected.txt
+++ b/third_party/blink/web_tests/fast/events/iframe-onmousemove-expected.txt
@@ -2,7 +2,6 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/events/ime-composition-events-001-expected.txt b/third_party/blink/web_tests/fast/events/ime-composition-events-001-expected.txt
index 31343275..9cdd53cd 100644
--- a/third_party/blink/web_tests/fast/events/ime-composition-events-001-expected.txt
+++ b/third_party/blink/web_tests/fast/events/ime-composition-events-001-expected.txt
@@ -54,4 +54,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/initkeyboardevent-crash-expected.txt b/third_party/blink/web_tests/fast/events/initkeyboardevent-crash-expected.txt
index 3b8d980..1ec136c 100644
--- a/third_party/blink/web_tests/fast/events/initkeyboardevent-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/events/initkeyboardevent-crash-expected.txt
@@ -1,5 +1,3 @@
 This tests that dispatching a keyboard event created via javascript does not crash.
 
 PASSED
-
-
diff --git a/third_party/blink/web_tests/fast/events/javascript-uri-navigation-blocked-in-unload-handler-expected.txt b/third_party/blink/web_tests/fast/events/javascript-uri-navigation-blocked-in-unload-handler-expected.txt
index 788efa974..695552ac 100644
--- a/third_party/blink/web_tests/fast/events/javascript-uri-navigation-blocked-in-unload-handler-expected.txt
+++ b/third_party/blink/web_tests/fast/events/javascript-uri-navigation-blocked-in-unload-handler-expected.txt
@@ -1,3 +1,2 @@
 PASS: script executed
 
-
diff --git a/third_party/blink/web_tests/fast/events/key-events-in-input-button-expected.txt b/third_party/blink/web_tests/fast/events/key-events-in-input-button-expected.txt
index a514097d..3c49f48 100644
--- a/third_party/blink/web_tests/fast/events/key-events-in-input-button-expected.txt
+++ b/third_party/blink/web_tests/fast/events/key-events-in-input-button-expected.txt
@@ -1,6 +1,5 @@
 To test manually, press keys and compare results to other browsers.
 
-
 target - type - ctrlKey,altKey,shiftKey,metaKey - key - keyCode - charCode
 Space:
 INPUT - keydown - false,false,false,false - - 32 - 0
diff --git a/third_party/blink/web_tests/fast/events/keydown-1-expected.txt b/third_party/blink/web_tests/fast/events/keydown-1-expected.txt
index c125b6f..08105613 100644
--- a/third_party/blink/web_tests/fast/events/keydown-1-expected.txt
+++ b/third_party/blink/web_tests/fast/events/keydown-1-expected.txt
@@ -1,6 +1,5 @@
 This tests that keydown events aren't sent to the main frame for command key presses that occur when a subframe is first responder. To run it manually, click inside the subframe, type a few characters, then do Command-A to Select All. Only the subframe should report a keydown event.
 
-
 keydown in subframe: [object KeyboardEvent]
 keydown in subframe: [object KeyboardEvent]
 This sentence should not end with a period
diff --git a/third_party/blink/web_tests/fast/events/keydown-function-keys-expected.txt b/third_party/blink/web_tests/fast/events/keydown-function-keys-expected.txt
index df5c35f4..51fa6d8 100644
--- a/third_party/blink/web_tests/fast/events/keydown-function-keys-expected.txt
+++ b/third_party/blink/web_tests/fast/events/keydown-function-keys-expected.txt
@@ -1,6 +1,5 @@
 This test verifies the keycodes sent when we press function keys.
 
-
 Type=keydown,keyCode=112,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
 Type=keyup,keyCode=112,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
 Type=keydown,keyCode=113,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
diff --git a/third_party/blink/web_tests/fast/events/keydown-remove-frame-expected.txt b/third_party/blink/web_tests/fast/events/keydown-remove-frame-expected.txt
index 8fee0e0..6e840f29 100644
--- a/third_party/blink/web_tests/fast/events/keydown-remove-frame-expected.txt
+++ b/third_party/blink/web_tests/fast/events/keydown-remove-frame-expected.txt
@@ -1,3 +1 @@
 Tests that WebKit does not crash when a frame is removed during keydown event processing. To test manually, press any letter key. The iframe below should disappear and Safari should not crash.
-
-
diff --git a/third_party/blink/web_tests/fast/events/message-port-expected.txt b/third_party/blink/web_tests/fast/events/message-port-expected.txt
index e839f08..955ad37 100644
--- a/third_party/blink/web_tests/fast/events/message-port-expected.txt
+++ b/third_party/blink/web_tests/fast/events/message-port-expected.txt
@@ -14,4 +14,3 @@
 MessageEvent.cancelable defaults to false: PASS
 DONE
 
-
diff --git a/third_party/blink/web_tests/fast/events/message-port-inactive-document-expected.txt b/third_party/blink/web_tests/fast/events/message-port-inactive-document-expected.txt
index 162968f..ecb4e30 100644
--- a/third_party/blink/web_tests/fast/events/message-port-inactive-document-expected.txt
+++ b/third_party/blink/web_tests/fast/events/message-port-inactive-document-expected.txt
@@ -2,4 +2,3 @@
 
 Didn't crash, freeze or respond: SUCCESS
 
-
diff --git a/third_party/blink/web_tests/fast/events/middleClickAutoscroll-drag-scrollable-iframe-div-expected.txt b/third_party/blink/web_tests/fast/events/middleClickAutoscroll-drag-scrollable-iframe-div-expected.txt
index 9531b22..f3126137 100644
--- a/third_party/blink/web_tests/fast/events/middleClickAutoscroll-drag-scrollable-iframe-div-expected.txt
+++ b/third_party/blink/web_tests/fast/events/middleClickAutoscroll-drag-scrollable-iframe-div-expected.txt
@@ -9,5 +9,4 @@
 
 To test manually, hold the middle mouse button on the box with scrollbars and scroll by dragging the mouse outside the bounds of the box. If the bug occurs once the cursor leaves the bounds of the box it will remain stuck in the panning state.
 
-
 Click me
diff --git a/third_party/blink/web_tests/fast/events/middleClickAutoscroll-modal-scrollable-iframe-div-expected.txt b/third_party/blink/web_tests/fast/events/middleClickAutoscroll-modal-scrollable-iframe-div-expected.txt
index 9531b22..f3126137 100644
--- a/third_party/blink/web_tests/fast/events/middleClickAutoscroll-modal-scrollable-iframe-div-expected.txt
+++ b/third_party/blink/web_tests/fast/events/middleClickAutoscroll-modal-scrollable-iframe-div-expected.txt
@@ -9,5 +9,4 @@
 
 To test manually, hold the middle mouse button on the box with scrollbars and scroll by dragging the mouse outside the bounds of the box. If the bug occurs once the cursor leaves the bounds of the box it will remain stuck in the panning state.
 
-
 Click me
diff --git a/third_party/blink/web_tests/fast/events/mouse-cursor-style-change-iframe-expected.txt b/third_party/blink/web_tests/fast/events/mouse-cursor-style-change-iframe-expected.txt
index 3f8b17d..4621ac5 100644
--- a/third_party/blink/web_tests/fast/events/mouse-cursor-style-change-iframe-expected.txt
+++ b/third_party/blink/web_tests/fast/events/mouse-cursor-style-change-iframe-expected.txt
@@ -2,7 +2,6 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-
 Mouse moved to cursor changing div
 PASS internals.getCurrentCursorInfo() is "type=Hand hotSpot=0,0"
 Changing cursor style
diff --git a/third_party/blink/web_tests/fast/events/mouse-drag-from-frame-expected.txt b/third_party/blink/web_tests/fast/events/mouse-drag-from-frame-expected.txt
index 613f4b8..c920b0a5 100644
--- a/third_party/blink/web_tests/fast/events/mouse-drag-from-frame-expected.txt
+++ b/third_party/blink/web_tests/fast/events/mouse-drag-from-frame-expected.txt
@@ -1,5 +1,4 @@
 This tests that dragging from an element that returns false from its mousedown handler will not let the subsequent mousemove events be captured by the containing frame.
-
 Drag started
 Received mouse move
 Received mouseup event
diff --git a/third_party/blink/web_tests/fast/events/mouse-relative-position-expected.txt b/third_party/blink/web_tests/fast/events/mouse-relative-position-expected.txt
index 3898c3b..cfb9c50 100644
--- a/third_party/blink/web_tests/fast/events/mouse-relative-position-expected.txt
+++ b/third_party/blink/web_tests/fast/events/mouse-relative-position-expected.txt
@@ -1,5 +1,4 @@
 span
-
 PASS simulateElementClick(testElement, [100, 100, 200, 200]); is '100, 100, 200, 200'
 PASS simulateElementClick(spanElement, [16, 10, 16, 10]); is '16, 10, 16, 10'
 PASS simulateElementClick(inputElement, [39, 9, 95, 10]); is '39, 9, 95, 10'
diff --git a/third_party/blink/web_tests/fast/events/mousedown-in-subframe-scrollbar-expected.txt b/third_party/blink/web_tests/fast/events/mousedown-in-subframe-scrollbar-expected.txt
index ffceaf4..82da401e 100644
--- a/third_party/blink/web_tests/fast/events/mousedown-in-subframe-scrollbar-expected.txt
+++ b/third_party/blink/web_tests/fast/events/mousedown-in-subframe-scrollbar-expected.txt
@@ -1,6 +1,5 @@
 This tests that clicking on a scrollbar in a frame does not clear selections in the frame.
 
-
 Selection: This
 is
 text
diff --git a/third_party/blink/web_tests/fast/events/mousemove-from-iframe-to-top-element-expected.txt b/third_party/blink/web_tests/fast/events/mousemove-from-iframe-to-top-element-expected.txt
index 8eb63e2..7ed497a1 100644
--- a/third_party/blink/web_tests/fast/events/mousemove-from-iframe-to-top-element-expected.txt
+++ b/third_party/blink/web_tests/fast/events/mousemove-from-iframe-to-top-element-expected.txt
@@ -1,6 +1,5 @@
 TOP
 
-
 Tests that hover is lost from iframe when the mouse is moved from iframe to the element that stacked up on iframe
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/fast/events/mouseover-mouseout-expected.txt b/third_party/blink/web_tests/fast/events/mouseover-mouseout-expected.txt
index 65703c8..a740a2ab 100644
--- a/third_party/blink/web_tests/fast/events/mouseover-mouseout-expected.txt
+++ b/third_party/blink/web_tests/fast/events/mouseover-mouseout-expected.txt
@@ -8,7 +8,6 @@
 3
 4
 5
-
 Log
 
 mouseover on t1_1
diff --git a/third_party/blink/web_tests/fast/events/mouseup-outside-button-expected.txt b/third_party/blink/web_tests/fast/events/mouseup-outside-button-expected.txt
index b44cec2..decaa33 100644
--- a/third_party/blink/web_tests/fast/events/mouseup-outside-button-expected.txt
+++ b/third_party/blink/web_tests/fast/events/mouseup-outside-button-expected.txt
@@ -8,5 +8,4 @@
 Move the mouse outside the button.
 Mouse up.
 
-
 PASS: mouse up event did not fire
diff --git a/third_party/blink/web_tests/fast/events/onchange-passwordfield-expected.txt b/third_party/blink/web_tests/fast/events/onchange-passwordfield-expected.txt
index 30e6a4e..3881b16 100644
--- a/third_party/blink/web_tests/fast/events/onchange-passwordfield-expected.txt
+++ b/third_party/blink/web_tests/fast/events/onchange-passwordfield-expected.txt
@@ -1,6 +1,5 @@
 This test verifies that the ENTER key fires the change event.
 
-
 PASS: change event fired.
 
 
diff --git a/third_party/blink/web_tests/fast/events/onchange-range-slider-expected.txt b/third_party/blink/web_tests/fast/events/onchange-range-slider-expected.txt
index da6fe0c..a0182f3 100644
--- a/third_party/blink/web_tests/fast/events/onchange-range-slider-expected.txt
+++ b/third_party/blink/web_tests/fast/events/onchange-range-slider-expected.txt
@@ -1,6 +1,5 @@
 This test verifies that updating the slider for an input element with type=range fires a change event.
 
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/events/onchange-searchfield-expected.txt b/third_party/blink/web_tests/fast/events/onchange-searchfield-expected.txt
index 30e6a4e..3881b16 100644
--- a/third_party/blink/web_tests/fast/events/onchange-searchfield-expected.txt
+++ b/third_party/blink/web_tests/fast/events/onchange-searchfield-expected.txt
@@ -1,6 +1,5 @@
 This test verifies that the ENTER key fires the change event.
 
-
 PASS: change event fired.
 
 
diff --git a/third_party/blink/web_tests/fast/events/onchange-textfield-expected.txt b/third_party/blink/web_tests/fast/events/onchange-textfield-expected.txt
index 30e6a4e..3881b16 100644
--- a/third_party/blink/web_tests/fast/events/onchange-textfield-expected.txt
+++ b/third_party/blink/web_tests/fast/events/onchange-textfield-expected.txt
@@ -1,6 +1,5 @@
 This test verifies that the ENTER key fires the change event.
 
-
 PASS: change event fired.
 
 
diff --git a/third_party/blink/web_tests/fast/events/onload-after-document-close-no-subresource-expected.txt b/third_party/blink/web_tests/fast/events/onload-after-document-close-no-subresource-expected.txt
index 69b0f95e..3132777 100644
--- a/third_party/blink/web_tests/fast/events/onload-after-document-close-no-subresource-expected.txt
+++ b/third_party/blink/web_tests/fast/events/onload-after-document-close-no-subresource-expected.txt
@@ -2,4 +2,3 @@
 
 PASS: onload fired
 
-
diff --git a/third_party/blink/web_tests/fast/events/onload-after-document-close-with-subresource-expected.txt b/third_party/blink/web_tests/fast/events/onload-after-document-close-with-subresource-expected.txt
index f1fd87e..e1cfdca8 100644
--- a/third_party/blink/web_tests/fast/events/onload-after-document-close-with-subresource-expected.txt
+++ b/third_party/blink/web_tests/fast/events/onload-after-document-close-with-subresource-expected.txt
@@ -3,4 +3,3 @@
 dimensions before onload (should be { 0 x 0 }, otherwise the test will falsely pass): { 0 x 0 }
 dimensions during onload (should be { 215 x 174 }, otherwise onload fired too early): { 215 x 174 }
 
-
diff --git a/third_party/blink/web_tests/fast/events/onsubmit-bubbling-expected.txt b/third_party/blink/web_tests/fast/events/onsubmit-bubbling-expected.txt
index 1385dc00..ea03b2b 100644
--- a/third_party/blink/web_tests/fast/events/onsubmit-bubbling-expected.txt
+++ b/third_party/blink/web_tests/fast/events/onsubmit-bubbling-expected.txt
@@ -2,4 +2,3 @@
 
 PASS: containing element div2 caught submit event
 PASS: containing element div1 caught submit event
-
diff --git a/third_party/blink/web_tests/fast/events/page-visibility-iframe-propagation-test-expected.txt b/third_party/blink/web_tests/fast/events/page-visibility-iframe-propagation-test-expected.txt
index d2157af4..c22e5b2 100644
--- a/third_party/blink/web_tests/fast/events/page-visibility-iframe-propagation-test-expected.txt
+++ b/third_party/blink/web_tests/fast/events/page-visibility-iframe-propagation-test-expected.txt
@@ -24,4 +24,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/pageshow-pagehide-expected.txt b/third_party/blink/web_tests/fast/events/pageshow-pagehide-expected.txt
index f54390e6..ff985236 100644
--- a/third_party/blink/web_tests/fast/events/pageshow-pagehide-expected.txt
+++ b/third_party/blink/web_tests/fast/events/pageshow-pagehide-expected.txt
@@ -1,6 +1,5 @@
 Test pageshow/pagehide event behavior in subframes.
 
-
 ***Original load - onload and pageshow events should fire for subframes, and then for main frame***
 Subsubframe window.onload
 Subsubframe window.onpageshow, target = [object HTMLDocument], persisted = false
diff --git a/third_party/blink/web_tests/fast/events/popup-allowed-from-gesture-only-once-iframes-expected.txt b/third_party/blink/web_tests/fast/events/popup-allowed-from-gesture-only-once-iframes-expected.txt
index 368c05e..0b5b1d2 100644
--- a/third_party/blink/web_tests/fast/events/popup-allowed-from-gesture-only-once-iframes-expected.txt
+++ b/third_party/blink/web_tests/fast/events/popup-allowed-from-gesture-only-once-iframes-expected.txt
@@ -2,5 +2,4 @@
 
 To run, click on the iframe. The test passes, if only one window is opened in response to the click.
 
-
 PASSED
diff --git a/third_party/blink/web_tests/fast/events/popup-blocked-to-post-blank-expected.txt b/third_party/blink/web_tests/fast/events/popup-blocked-to-post-blank-expected.txt
index 14daa5e..7f4325c 100644
--- a/third_party/blink/web_tests/fast/events/popup-blocked-to-post-blank-expected.txt
+++ b/third_party/blink/web_tests/fast/events/popup-blocked-to-post-blank-expected.txt
@@ -1,5 +1,2 @@
 CONSOLE ERROR: Not allowed to navigate top frame to data URL: data:text/html,<script>alert(window)</script>?
 If the POST pop-up was not blocked then there will be an ALERT containing a Window object. Otherwise, the test passes.
-
-
-
diff --git a/third_party/blink/web_tests/fast/events/popup-when-select-change-expected.txt b/third_party/blink/web_tests/fast/events/popup-when-select-change-expected.txt
index 5e08bc7..444e7f8 100644
--- a/third_party/blink/web_tests/fast/events/popup-when-select-change-expected.txt
+++ b/third_party/blink/web_tests/fast/events/popup-when-select-change-expected.txt
@@ -1,7 +1,4 @@
 CONSOLE MESSAGE: line 1: PASSED
 abcd
 efgh
-If the pop-up was not blocked then there will be an PASS message. Otherwise, the test fails.
-
-
-
+ If the pop-up was not blocked then there will be an PASS message. Otherwise, the test fails.
diff --git a/third_party/blink/web_tests/fast/events/programmatic-check-no-change-event-expected.txt b/third_party/blink/web_tests/fast/events/programmatic-check-no-change-event-expected.txt
index 6a59190..a1c2c893 100644
--- a/third_party/blink/web_tests/fast/events/programmatic-check-no-change-event-expected.txt
+++ b/third_party/blink/web_tests/fast/events/programmatic-check-no-change-event-expected.txt
@@ -2,4 +2,3 @@
 
 PASS: got exactly one change event.
 
-
diff --git a/third_party/blink/web_tests/fast/events/remove-text-node-in-mouseup-expected.txt b/third_party/blink/web_tests/fast/events/remove-text-node-in-mouseup-expected.txt
index ee82707..fefaf6ab 100644
--- a/third_party/blink/web_tests/fast/events/remove-text-node-in-mouseup-expected.txt
+++ b/third_party/blink/web_tests/fast/events/remove-text-node-in-mouseup-expected.txt
@@ -1,4 +1,3 @@
 This test ensures Blink does fire a click event on the parent element of a clicked text node even when the text node has been removed in mouseup event.
 
 PASS
-
diff --git a/third_party/blink/web_tests/fast/events/resize-raf-timing-expected.txt b/third_party/blink/web_tests/fast/events/resize-raf-timing-expected.txt
index 5583881..8d2a495 100644
--- a/third_party/blink/web_tests/fast/events/resize-raf-timing-expected.txt
+++ b/third_party/blink/web_tests/fast/events/resize-raf-timing-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/right-click-focus-expected.txt b/third_party/blink/web_tests/fast/events/right-click-focus-expected.txt
index 9ded197..e70f436 100644
--- a/third_party/blink/web_tests/fast/events/right-click-focus-expected.txt
+++ b/third_party/blink/web_tests/fast/events/right-click-focus-expected.txt
@@ -1,5 +1,4 @@
 Test that right-clicking on a text area properly focuses it.
 
-
 PASS
 
diff --git a/third_party/blink/web_tests/fast/events/select-element-expected.txt b/third_party/blink/web_tests/fast/events/select-element-expected.txt
index 767e48d..b966f2ae 100644
--- a/third_party/blink/web_tests/fast/events/select-element-expected.txt
+++ b/third_party/blink/web_tests/fast/events/select-element-expected.txt
@@ -7,6 +7,7 @@
 4
 5
 6
+ 
 0
 1
 2
@@ -15,6 +16,7 @@
 5
 6
 7
+ 
 0
 1
 2
diff --git a/third_party/blink/web_tests/fast/events/space-scroll-textinput-canceled-expected.txt b/third_party/blink/web_tests/fast/events/space-scroll-textinput-canceled-expected.txt
index ce26baa..b8f95e32 100644
--- a/third_party/blink/web_tests/fast/events/space-scroll-textinput-canceled-expected.txt
+++ b/third_party/blink/web_tests/fast/events/space-scroll-textinput-canceled-expected.txt
@@ -5,4 +5,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/special-key-events-in-input-text-expected.txt b/third_party/blink/web_tests/fast/events/special-key-events-in-input-text-expected.txt
index fc1772b..86acedc 100644
--- a/third_party/blink/web_tests/fast/events/special-key-events-in-input-text-expected.txt
+++ b/third_party/blink/web_tests/fast/events/special-key-events-in-input-text-expected.txt
@@ -1,6 +1,5 @@
 This test verifies that the correct sequence of keyboard events is generated for a keypress for certain special keys. To test manually, press keys and compare results to other browsers.
 
-
 target - type - ctrlKey,altKey,shiftKey,metaKey - key - keyCode - charCode
 
 Ampersand:
diff --git a/third_party/blink/web_tests/fast/events/stop-load-in-unload-handler-using-document-write-expected.txt b/third_party/blink/web_tests/fast/events/stop-load-in-unload-handler-using-document-write-expected.txt
index 9976b120..69cfc5a9 100644
--- a/third_party/blink/web_tests/fast/events/stop-load-in-unload-handler-using-document-write-expected.txt
+++ b/third_party/blink/web_tests/fast/events/stop-load-in-unload-handler-using-document-write-expected.txt
@@ -1,3 +1,2 @@
 PASS
 
-
diff --git a/third_party/blink/web_tests/fast/events/stop-load-in-unload-handler-using-window-stop-expected.txt b/third_party/blink/web_tests/fast/events/stop-load-in-unload-handler-using-window-stop-expected.txt
index 9976b120..69cfc5a9 100644
--- a/third_party/blink/web_tests/fast/events/stop-load-in-unload-handler-using-window-stop-expected.txt
+++ b/third_party/blink/web_tests/fast/events/stop-load-in-unload-handler-using-window-stop-expected.txt
@@ -1,3 +1,2 @@
 PASS
 
-
diff --git a/third_party/blink/web_tests/fast/events/tab-crash-with-image-map-expected.txt b/third_party/blink/web_tests/fast/events/tab-crash-with-image-map-expected.txt
index cbcde621..b639bfc 100644
--- a/third_party/blink/web_tests/fast/events/tab-crash-with-image-map-expected.txt
+++ b/third_party/blink/web_tests/fast/events/tab-crash-with-image-map-expected.txt
@@ -4,8 +4,6 @@
 
 Yahoo (tabindex 2)
 
-
-
 Google (tabindex 4)
 
 Yahoo (tabindex 6)
diff --git a/third_party/blink/web_tests/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt b/third_party/blink/web_tests/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt
index bb5411b..734fd82 100644
--- a/third_party/blink/web_tests/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt
+++ b/third_party/blink/web_tests/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt
@@ -30,4 +30,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt b/third_party/blink/web_tests/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt
index a39b7ef..77563f6 100644
--- a/third_party/blink/web_tests/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt
+++ b/third_party/blink/web_tests/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt
@@ -3,7 +3,6 @@
 TEST COMPLETE
 
 
-
 This test checks long press behavior inside an iframe when both touch drag/drop and touch editing are enabled.
 1. Check that long press on a draggable element starts drag.
 2. Check that long press on non-draggable text selects the text.
diff --git a/third_party/blink/web_tests/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt b/third_party/blink/web_tests/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt
index 6c02d06..0fcf7182 100644
--- a/third_party/blink/web_tests/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt
+++ b/third_party/blink/web_tests/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt
@@ -3,7 +3,6 @@
 TEST COMPLETE
 
 
-
 This test checks that a long press gesture on a draggable element in an iframe starts a drag/drop session.
 
 Testing
diff --git a/third_party/blink/web_tests/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt b/third_party/blink/web_tests/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt
index 6c02d06..0fcf7182 100644
--- a/third_party/blink/web_tests/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt
+++ b/third_party/blink/web_tests/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt
@@ -3,7 +3,6 @@
 TEST COMPLETE
 
 
-
 This test checks that a long press gesture on a draggable element in an iframe starts a drag/drop session.
 
 Testing
diff --git a/third_party/blink/web_tests/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt b/third_party/blink/web_tests/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt
index f4c383c..8d21fc7b 100644
--- a/third_party/blink/web_tests/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt
+++ b/third_party/blink/web_tests/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt
@@ -2,7 +2,6 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt b/third_party/blink/web_tests/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt
index 266b721..b842570 100644
--- a/third_party/blink/web_tests/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt
+++ b/third_party/blink/web_tests/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt
@@ -6,4 +6,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/events/window-onerror-sandbox-01-expected.txt b/third_party/blink/web_tests/fast/events/window-onerror-sandbox-01-expected.txt
index 189561df..d8741d6 100644
--- a/third_party/blink/web_tests/fast/events/window-onerror-sandbox-01-expected.txt
+++ b/third_party/blink/web_tests/fast/events/window-onerror-sandbox-01-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/files/not-enough-arguments-expected.txt b/third_party/blink/web_tests/fast/files/not-enough-arguments-expected.txt
index 2228088..d8f5d6d 100644
--- a/third_party/blink/web_tests/fast/files/not-enough-arguments-expected.txt
+++ b/third_party/blink/web_tests/fast/files/not-enough-arguments-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/files/workers/worker-read-blob-async-crash-expected.txt b/third_party/blink/web_tests/fast/files/workers/worker-read-blob-async-crash-expected.txt
index 8843db8..360d9c8 100644
--- a/third_party/blink/web_tests/fast/files/workers/worker-read-blob-async-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/files/workers/worker-read-blob-async-crash-expected.txt
@@ -6,5 +6,3 @@
 Test for crash bug in WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader when FileReader is running in the worker thread and the page location is changed.
 
 This test PASSED if it did not crash.
-
-
diff --git a/third_party/blink/web_tests/fast/filesystem/input-access-entries-expected.txt b/third_party/blink/web_tests/fast/filesystem/input-access-entries-expected.txt
index 7e8b8166..739ee0e 100644
--- a/third_party/blink/web_tests/fast/filesystem/input-access-entries-expected.txt
+++ b/third_party/blink/web_tests/fast/filesystem/input-access-entries-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/11423-expected.txt b/third_party/blink/web_tests/fast/forms/11423-expected.txt
index a298e00..91345278 100644
--- a/third_party/blink/web_tests/fast/forms/11423-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/11423-expected.txt
@@ -1,4 +1,3 @@
 This tests to see that a line break inserted in a textarea is serialized as a '\n'.
 
-
 Success
diff --git a/third_party/blink/web_tests/fast/forms/4628409-expected.txt b/third_party/blink/web_tests/fast/forms/4628409-expected.txt
index 712123d..2d6e893 100644
--- a/third_party/blink/web_tests/fast/forms/4628409-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/4628409-expected.txt
@@ -1,3 +1 @@
 This tests for a crash when inserting text into a textarea that has been shrunk to zero rows just before the insertion.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/8250-expected.txt b/third_party/blink/web_tests/fast/forms/8250-expected.txt
index b4af35d..6cfeb1a 100644
--- a/third_party/blink/web_tests/fast/forms/8250-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/8250-expected.txt
@@ -1,5 +1,3 @@
 This is a test for bug 8250. The 'before text inserted' event handler wasn't being told about 'interchange newlines'. The text field should have a space in it, followed by the word 'foo'.
 
 TEST PASSED
-
-
diff --git a/third_party/blink/web_tests/fast/forms/ValidityState-customError-expected.txt b/third_party/blink/web_tests/fast/forms/ValidityState-customError-expected.txt
index eaec6aa..8b68b18 100644
--- a/third_party/blink/web_tests/fast/forms/ValidityState-customError-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/ValidityState-customError-expected.txt
@@ -86,7 +86,7 @@
 
 TEST COMPLETE
 
-     
-     
-     
-     
+      
+      
+      
+      
diff --git a/third_party/blink/web_tests/fast/forms/ValidityState-stepMismatch-expected.txt b/third_party/blink/web_tests/fast/forms/ValidityState-stepMismatch-expected.txt
index e8ce5a2..6df43d2 100644
--- a/third_party/blink/web_tests/fast/forms/ValidityState-stepMismatch-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/ValidityState-stepMismatch-expected.txt
@@ -24,4 +24,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/ValidityState-tooLong-input-expected.txt b/third_party/blink/web_tests/fast/forms/ValidityState-tooLong-input-expected.txt
index 67773e0..e7a7ad7 100644
--- a/third_party/blink/web_tests/fast/forms/ValidityState-tooLong-input-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/ValidityState-tooLong-input-expected.txt
@@ -62,4 +62,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/ValidityState-tooShort-input-expected.txt b/third_party/blink/web_tests/fast/forms/ValidityState-tooShort-input-expected.txt
index 238ccb1..4daed6d8 100644
--- a/third_party/blink/web_tests/fast/forms/ValidityState-tooShort-input-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/ValidityState-tooShort-input-expected.txt
@@ -47,4 +47,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/access-key-expected.txt b/third_party/blink/web_tests/fast/forms/access-key-expected.txt
index 45fb9a3..323b23ce 100644
--- a/third_party/blink/web_tests/fast/forms/access-key-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/access-key-expected.txt
@@ -4,7 +4,7 @@
 
      
 
-   
+    
 
 1 button focussed
 1 button clicked
diff --git a/third_party/blink/web_tests/fast/forms/autocomplete-expected.txt b/third_party/blink/web_tests/fast/forms/autocomplete-expected.txt
index c723fde0..74af43ed 100644
--- a/third_party/blink/web_tests/fast/forms/autocomplete-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/autocomplete-expected.txt
@@ -1,5 +1,4 @@
 This tests that the 'autocomplete' attribute of form and input elements is bound to a JavaScript property.
-
 PASS ('autocomplete' in form) is true
 PASS ('autocomplete' in field) is true
 PASS form.getAttribute('autocomplete') is null
diff --git a/third_party/blink/web_tests/fast/forms/autofilled-expected.txt b/third_party/blink/web_tests/fast/forms/autofilled-expected.txt
index 4a75164..654a2e2 100644
--- a/third_party/blink/web_tests/fast/forms/autofilled-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/autofilled-expected.txt
@@ -1,7 +1,8 @@
 This tests that foreground and background colors properly change for autofilled inputs or select options. It can only be run using the test harness.
 
-   
+     
 3
+ 
 1
 2
 3
diff --git a/third_party/blink/web_tests/fast/forms/autofocus-input-css-style-change-expected.txt b/third_party/blink/web_tests/fast/forms/autofocus-input-css-style-change-expected.txt
index 9940ab7..9496a072 100644
--- a/third_party/blink/web_tests/fast/forms/autofocus-input-css-style-change-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/autofocus-input-css-style-change-expected.txt
@@ -1,4 +1,3 @@
 The following text box should have focus and should be green.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/forms/autofocus-opera-006-expected.txt b/third_party/blink/web_tests/fast/forms/autofocus-opera-006-expected.txt
index 0e04b2e..6fa7e1b 100644
--- a/third_party/blink/web_tests/fast/forms/autofocus-opera-006-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/autofocus-opera-006-expected.txt
@@ -1,15 +1,3 @@
 All form controls below should have a green background:
 
-
-
-
-
-
-
-
-
-
-
-
-
 SUCCESS
diff --git a/third_party/blink/web_tests/fast/forms/autofocus-opera-007-expected.txt b/third_party/blink/web_tests/fast/forms/autofocus-opera-007-expected.txt
index 428c2df..8f26d2f1 100644
--- a/third_party/blink/web_tests/fast/forms/autofocus-opera-007-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/autofocus-opera-007-expected.txt
@@ -1,5 +1,3 @@
 The form control below should have a green background:
 
-
-
 SUCCESS
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.txt
index 3f08fae..54bdea2 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.txt
@@ -1,7 +1,5 @@
 Calendar picker should respect zoom level.
 
-
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.txt
index 3f08fae..54bdea2 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-appearance-zoom200-expected.txt
@@ -1,7 +1,5 @@
 Calendar picker should respect zoom level.
 
-
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-date-types-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-date-types-expected.txt
index 5f2bab0..2c71c6c 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-date-types-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-date-types-expected.txt
@@ -231,4 +231,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-datetimelocal-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-datetimelocal-expected.txt
index f577320..2da281c 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-datetimelocal-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-datetimelocal-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-key-operations-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-key-operations-expected.txt
index 3c4077e0..d94ef98e 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-key-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-key-operations-expected.txt
@@ -162,4 +162,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-pre-100-year-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-pre-100-year-expected.txt
index c3f0056..dc8326c 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-pre-100-year-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-pre-100-year-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-should-not-change-datetimelocal-time-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-should-not-change-datetimelocal-time-expected.txt
index a74e8e00..bf1028a 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-should-not-change-datetimelocal-time-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-should-not-change-datetimelocal-time-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-touch-operations-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-touch-operations-expected.txt
index 0bdbf97..86d10801 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-touch-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-touch-operations-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-type-change-onchange-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-type-change-onchange-expected.txt
index 640e1b9..276050b 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-type-change-onchange-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-type-change-onchange-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-type-change-onclick-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-type-change-onclick-expected.txt
index 2f4050b..cf81c324 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-type-change-onclick-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/calendar-picker-type-change-onclick-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/date-open-picker-with-f4-key-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/date-open-picker-with-f4-key-expected.txt
index 71e4a1f..2fa15e6 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/date-open-picker-with-f4-key-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/date-open-picker-with-f4-key-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/date-picker-ax-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/date-picker-ax-expected.txt
index 410df6db..9684494 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/date-picker-ax-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/date-picker-ax-expected.txt
@@ -19,4 +19,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/date-picker-choose-default-value-after-set-value-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/date-picker-choose-default-value-after-set-value-expected.txt
index cc4e269..8667d428 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/date-picker-choose-default-value-after-set-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/date-picker-choose-default-value-after-set-value-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/date-picker-events-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/date-picker-events-expected.txt
index 0679c8d..d165759 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/date-picker-events-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/date-picker-events-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-change-type-on-input-crash-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-change-type-on-input-crash-expected.txt
index 66742b7..e4869f0 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-change-type-on-input-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-change-type-on-input-crash-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-open-picker-with-f4-key-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-open-picker-with-f4-key-expected.txt
index 71e4a1f..2fa15e6 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-open-picker-with-f4-key-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-open-picker-with-f4-key-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-picker-choose-default-value-after-set-value-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-picker-choose-default-value-after-set-value-expected.txt
index 5edb054..4da44afc 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-picker-choose-default-value-after-set-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-picker-choose-default-value-after-set-value-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-picker-events-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-picker-events-expected.txt
index eea7751..8363194c 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-picker-events-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/datetimelocal-picker-events-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/month-open-picker-with-f4-key-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/month-open-picker-with-f4-key-expected.txt
index 71e4a1f..2fa15e6 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/month-open-picker-with-f4-key-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/month-open-picker-with-f4-key-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-ax-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-ax-expected.txt
index b08a114..c462e39 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-ax-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-ax-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-choose-default-value-after-set-value-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-choose-default-value-after-set-value-expected.txt
index 6f39a4c3..9b244977 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-choose-default-value-after-set-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-choose-default-value-after-set-value-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-key-operations-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-key-operations-expected.txt
index 63e7e48..fb99c33 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-key-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-key-operations-expected.txt
@@ -154,4 +154,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-mouse-operations-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-mouse-operations-expected.txt
index 1155038..74295eb 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-mouse-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-mouse-operations-expected.txt
@@ -63,4 +63,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-touch-operations-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-touch-operations-expected.txt
index 25947cdf..cb66a6c6d 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-touch-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-touch-operations-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-with-step-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-with-step-expected.txt
index dce3939..e08aa7b2 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-with-step-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/month-picker-with-step-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/week-open-picker-with-f4-key-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/week-open-picker-with-f4-key-expected.txt
index 71e4a1f..2fa15e6 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/week-open-picker-with-f4-key-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/week-open-picker-with-f4-key-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-ax-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-ax-expected.txt
index b08a114..c462e39 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-ax-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-ax-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-choose-default-value-after-set-value-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-choose-default-value-after-set-value-expected.txt
index 8a805ae..7e36b066 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-choose-default-value-after-set-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-choose-default-value-after-set-value-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-key-operations-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-key-operations-expected.txt
index 33da01c..36720d70 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-key-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-key-operations-expected.txt
@@ -163,4 +163,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-mouse-operations-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-mouse-operations-expected.txt
index d89dbe5..5b6d0e7a 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-mouse-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-mouse-operations-expected.txt
@@ -68,4 +68,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-touch-operations-expected.txt b/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-touch-operations-expected.txt
index 0bdbf97..86d10801 100644
--- a/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-touch-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/calendar-picker/week-picker-touch-operations-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/checkbox/checkbox-change-event-free-expected.txt b/third_party/blink/web_tests/fast/forms/checkbox/checkbox-change-event-free-expected.txt
index 1b4a164..3aaef8a2 100644
--- a/third_party/blink/web_tests/fast/forms/checkbox/checkbox-change-event-free-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/checkbox/checkbox-change-event-free-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/checkbox/checkbox-click-indeterminate-expected.txt b/third_party/blink/web_tests/fast/forms/checkbox/checkbox-click-indeterminate-expected.txt
index 44c432d..994b35a 100644
--- a/third_party/blink/web_tests/fast/forms/checkbox/checkbox-click-indeterminate-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/checkbox/checkbox-click-indeterminate-expected.txt
@@ -17,4 +17,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/color/color-setrangetext-expected.txt b/third_party/blink/web_tests/fast/forms/color/color-setrangetext-expected.txt
index 5267fab..818c5bcd 100644
--- a/third_party/blink/web_tests/fast/forms/color/color-setrangetext-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/color/color-setrangetext-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.txt b/third_party/blink/web_tests/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.txt
index bf29da0..690ae504d 100644
--- a/third_party/blink/web_tests/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.txt
@@ -1,7 +1,5 @@
 Suggestion picker should respect zoom level.
 
-
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/color/color-type-change-on-close-expected.txt b/third_party/blink/web_tests/fast/forms/color/color-type-change-on-close-expected.txt
index e8e12ee..205ecf5 100644
--- a/third_party/blink/web_tests/fast/forms/color/color-type-change-on-close-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/color/color-type-change-on-close-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/color/color-value-sanitization-expected.txt b/third_party/blink/web_tests/fast/forms/color/color-value-sanitization-expected.txt
index 442d33d9..c1337d9 100644
--- a/third_party/blink/web_tests/fast/forms/color/color-value-sanitization-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/color/color-value-sanitization-expected.txt
@@ -19,4 +19,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/color/input-color-choose-default-value-after-set-value-expected.txt b/third_party/blink/web_tests/fast/forms/color/input-color-choose-default-value-after-set-value-expected.txt
index f0c2894..376a3447 100644
--- a/third_party/blink/web_tests/fast/forms/color/input-color-choose-default-value-after-set-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/color/input-color-choose-default-value-after-set-value-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/cursor-at-editable-content-boundary-expected.txt b/third_party/blink/web_tests/fast/forms/cursor-at-editable-content-boundary-expected.txt
index 5d160e9c..96a816e8 100644
--- a/third_party/blink/web_tests/fast/forms/cursor-at-editable-content-boundary-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/cursor-at-editable-content-boundary-expected.txt
@@ -1,8 +1,8 @@
-autowrap text area with dir=rtl.
+autowrap text area with dir=rtl. 
 
-nowrap text area with dir=rtl.
+nowrap text area with dir=rtl. 
 
-autowrap text area with dir=ltr.
+autowrap text area with dir=ltr. 
 
 vertical text.
 
diff --git a/third_party/blink/web_tests/fast/forms/cursor-position-expected.txt b/third_party/blink/web_tests/fast/forms/cursor-position-expected.txt
index d1f99ea2..6918858 100644
--- a/third_party/blink/web_tests/fast/forms/cursor-position-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/cursor-position-expected.txt
@@ -9,7 +9,5 @@
 
 rdar://problem/5423067 gmail is super annoying when trying to add a new name to the TO, CC or BCC fields
 
-
-
 25, 25
 24, 24
diff --git a/third_party/blink/web_tests/fast/forms/datalist/datalist-child-validation-expected.txt b/third_party/blink/web_tests/fast/forms/datalist/datalist-child-validation-expected.txt
index 3d0c8a33..9477e3b1 100644
--- a/third_party/blink/web_tests/fast/forms/datalist/datalist-child-validation-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/datalist/datalist-child-validation-expected.txt
@@ -13,4 +13,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/datalist/range-snap-to-datalist-expected.txt b/third_party/blink/web_tests/fast/forms/datalist/range-snap-to-datalist-expected.txt
index 778affa38..e6a50df4 100644
--- a/third_party/blink/web_tests/fast/forms/datalist/range-snap-to-datalist-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/datalist/range-snap-to-datalist-expected.txt
@@ -25,4 +25,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-choose-default-value-after-set-value-expected.txt b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-choose-default-value-after-set-value-expected.txt
index 38fe569..0092098 100644
--- a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-choose-default-value-after-set-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-choose-default-value-after-set-value-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-clearbutton-change-and-input-events-expected.txt b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-clearbutton-change-and-input-events-expected.txt
index c0e8a9a..611b560 100644
--- a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-clearbutton-change-and-input-events-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-clearbutton-change-and-input-events-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-disabled-crash-expected.txt b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-disabled-crash-expected.txt
index 11b09a3..2de5c21b 100644
--- a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-disabled-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-disabled-crash-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-fallback-format-expected.txt b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-fallback-format-expected.txt
index 8b2de69..30991f9 100644
--- a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-fallback-format-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-fallback-format-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-mouse-events-expected.txt b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-mouse-events-expected.txt
index f1811d9..6dfb197 100644
--- a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-mouse-events-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-mouse-events-expected.txt
@@ -7,7 +7,6 @@
 Test following mouse actions:
 Mouse click to focus each of sub-fields
 Mouse click on the spin button to update each of sub-fields
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved-expected.txt b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved-expected.txt
index 57a7854..a3c6705 100644
--- a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-preserve-value-after-history-back-expected.txt b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-preserve-value-after-history-back-expected.txt
index 6241580..5268e4c 100644
--- a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-preserve-value-after-history-back-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-preserve-value-after-history-back-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-validity-badinput-expected.txt b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-validity-badinput-expected.txt
index e4513ff..7e710e2f 100644
--- a/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-validity-badinput-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date-multiple-fields/date-multiple-fields-validity-badinput-expected.txt
@@ -17,4 +17,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/date/ValidityState-stepMismatch-date-expected.txt b/third_party/blink/web_tests/fast/forms/date/ValidityState-stepMismatch-date-expected.txt
index 8390c9d..89919063 100644
--- a/third_party/blink/web_tests/fast/forms/date/ValidityState-stepMismatch-date-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date/ValidityState-stepMismatch-date-expected.txt
@@ -35,4 +35,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/date/date-appearance-l10n-expected.txt b/third_party/blink/web_tests/fast/forms/date/date-appearance-l10n-expected.txt
index 4c9cdd3..70fcca6 100644
--- a/third_party/blink/web_tests/fast/forms/date/date-appearance-l10n-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date/date-appearance-l10n-expected.txt
@@ -1,24 +1,12 @@
 ar-eg
-
 de-de
-
 el-gr
-
 en-us
-
 fr-fr
-
 he-il
-
 hi-in
-
 ja-jp
-
 ko-kr
-
 ru-ru
-
 zh-tw
-
 zh-cn
-
diff --git a/third_party/blink/web_tests/fast/forms/date/date-input-type-expected.txt b/third_party/blink/web_tests/fast/forms/date/date-input-type-expected.txt
index c22863a..83921bf 100644
--- a/third_party/blink/web_tests/fast/forms/date/date-input-type-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date/date-input-type-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/date/date-setrangetext-expected.txt b/third_party/blink/web_tests/fast/forms/date/date-setrangetext-expected.txt
index d25ca4a..2c3a2c3 100644
--- a/third_party/blink/web_tests/fast/forms/date/date-setrangetext-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date/date-setrangetext-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/date/no-page-popup-controller-expected.txt b/third_party/blink/web_tests/fast/forms/date/no-page-popup-controller-expected.txt
index 81224d78..8c80bbb3 100644
--- a/third_party/blink/web_tests/fast/forms/date/no-page-popup-controller-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/date/no-page-popup-controller-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-choose-default-value-after-set-value-expected.txt b/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-choose-default-value-after-set-value-expected.txt
index 243f462..e49a7b3 100644
--- a/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-choose-default-value-after-set-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-choose-default-value-after-set-value-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-clearbutton-change-and-input-events-expected.txt b/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-clearbutton-change-and-input-events-expected.txt
index 695f809..0ecd9d2 100644
--- a/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-clearbutton-change-and-input-events-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-clearbutton-change-and-input-events-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-fallback-format-expected.txt b/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-fallback-format-expected.txt
index 1e53aef3..f4d4815 100644
--- a/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-fallback-format-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-fallback-format-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-mouse-events-expected.txt b/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-mouse-events-expected.txt
index 3d2aff6..d38be7f 100644
--- a/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-mouse-events-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-mouse-events-expected.txt
@@ -7,7 +7,6 @@
 Test following mouse actions:
 Mouse click to focus each of sub-fields
 Mouse click on the spin button to update each of sub-fields
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-preserve-value-after-history-back-expected.txt b/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-preserve-value-after-history-back-expected.txt
index e0491bc..a9773eb 100644
--- a/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-preserve-value-after-history-back-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-preserve-value-after-history-back-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-validity-badinput-expected.txt b/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-validity-badinput-expected.txt
index b698e9f0..5663a43 100644
--- a/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-validity-badinput-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-validity-badinput-expected.txt
@@ -17,4 +17,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/datetimelocal/ValidityState-stepMismatch-datetimelocal-expected.txt b/third_party/blink/web_tests/fast/forms/datetimelocal/ValidityState-stepMismatch-datetimelocal-expected.txt
index 563d06a2..1f37733 100644
--- a/third_party/blink/web_tests/fast/forms/datetimelocal/ValidityState-stepMismatch-datetimelocal-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/datetimelocal/ValidityState-stepMismatch-datetimelocal-expected.txt
@@ -36,4 +36,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/datetimelocal/datetimelocal-input-type-expected.txt b/third_party/blink/web_tests/fast/forms/datetimelocal/datetimelocal-input-type-expected.txt
index 8356724..8f621df 100644
--- a/third_party/blink/web_tests/fast/forms/datetimelocal/datetimelocal-input-type-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/datetimelocal/datetimelocal-input-type-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/datetimelocal/datetimelocal-setrangetext-expected.txt b/third_party/blink/web_tests/fast/forms/datetimelocal/datetimelocal-setrangetext-expected.txt
index aad9dba..9dd4712 100644
--- a/third_party/blink/web_tests/fast/forms/datetimelocal/datetimelocal-setrangetext-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/datetimelocal/datetimelocal-setrangetext-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/disabled-attr-checkvalidity-expected.txt b/third_party/blink/web_tests/fast/forms/disabled-attr-checkvalidity-expected.txt
index fd4e8a2..67411f6 100644
--- a/third_party/blink/web_tests/fast/forms/disabled-attr-checkvalidity-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/disabled-attr-checkvalidity-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/disabled-mousedown-event-expected.txt b/third_party/blink/web_tests/fast/forms/disabled-mousedown-event-expected.txt
index 182449c..59ca62b8 100644
--- a/third_party/blink/web_tests/fast/forms/disabled-mousedown-event-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/disabled-mousedown-event-expected.txt
@@ -1,4 +1,3 @@
 This test ensures WebKit fires mousedown event on a disabled input element.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/forms/domstring-replace-crash-expected.txt b/third_party/blink/web_tests/fast/forms/domstring-replace-crash-expected.txt
index d2db899..db08a23 100644
--- a/third_party/blink/web_tests/fast/forms/domstring-replace-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/domstring-replace-crash-expected.txt
@@ -1,5 +1,3 @@
 This test checks for a regression against https://bugs.webkit.org/show_bug.cgi?id=6236 REGRESSION: Crash in DOMString::replace() in ToT (12/25/05).
 
 No crash = test PASS.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/email-idn-conversion-expected.txt b/third_party/blink/web_tests/fast/forms/email-idn-conversion-expected.txt
index 7a13a2a..196706f7 100644
--- a/third_party/blink/web_tests/fast/forms/email-idn-conversion-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/email-idn-conversion-expected.txt
@@ -36,4 +36,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/empty-get-expected.txt b/third_party/blink/web_tests/fast/forms/empty-get-expected.txt
index 0272f567..8427dfd 100644
--- a/third_party/blink/web_tests/fast/forms/empty-get-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/empty-get-expected.txt
@@ -1,5 +1,3 @@
 Test for bug 8051: Empty forms are submitted incorrectly.
 
-
-
 Success
diff --git a/third_party/blink/web_tests/fast/forms/fieldset/focus-in-fieldset-disabled-expected.txt b/third_party/blink/web_tests/fast/forms/fieldset/focus-in-fieldset-disabled-expected.txt
index 403ed5f..26dd7a95 100644
--- a/third_party/blink/web_tests/fast/forms/fieldset/focus-in-fieldset-disabled-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/fieldset/focus-in-fieldset-disabled-expected.txt
@@ -6,4 +6,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/fieldset/validation-in-fieldset-expected.txt b/third_party/blink/web_tests/fast/forms/fieldset/validation-in-fieldset-expected.txt
index 8c04e28..adaa9b54 100644
--- a/third_party/blink/web_tests/fast/forms/fieldset/validation-in-fieldset-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/fieldset/validation-in-fieldset-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/file/file-input-click-expected.txt b/third_party/blink/web_tests/fast/forms/file/file-input-click-expected.txt
index a80e440..450901c 100644
--- a/third_party/blink/web_tests/fast/forms/file/file-input-click-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/file-input-click-expected.txt
@@ -1,4 +1,2 @@
 CONSOLE MESSAGE: line 5: FileChooser: opened; mode=kOpen
 Ensure clicking on an INPUT element with TYPE=FILE launches a file chooser. Automated test passes if 'FileChooser: opened' was logged.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/file/file-input-key-enter-expected.txt b/third_party/blink/web_tests/fast/forms/file/file-input-key-enter-expected.txt
index 0a28f8b..a819c53 100644
--- a/third_party/blink/web_tests/fast/forms/file/file-input-key-enter-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/file-input-key-enter-expected.txt
@@ -1,4 +1,2 @@
 CONSOLE MESSAGE: line 5: FileChooser: opened; mode=kOpen
 Ensure pressing Enter key with focus on an INPUT element with TYPE=FILE launches a file chooser. Automated test passes if 'FileChooser: opened' was logged.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/file/file-input-key-other-expected.txt b/third_party/blink/web_tests/fast/forms/file/file-input-key-other-expected.txt
index 52821e2..fdd180f 100644
--- a/third_party/blink/web_tests/fast/forms/file/file-input-key-other-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/file-input-key-other-expected.txt
@@ -1,3 +1 @@
 Ensure pressing non-enter/space keys with focus on an INPUT element with TYPE=FILE does not launch a file chooser. Automated test fails if 'FileChooser: opened' was logged.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/file/file-input-key-space-expected.txt b/third_party/blink/web_tests/fast/forms/file/file-input-key-space-expected.txt
index 24170b2..ef0d448 100644
--- a/third_party/blink/web_tests/fast/forms/file/file-input-key-space-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/file-input-key-space-expected.txt
@@ -1,4 +1,2 @@
 CONSOLE MESSAGE: line 5: FileChooser: opened; mode=kOpen
 Ensure pressing Space key with focus on an INPUT element with TYPE=FILE launches a file chooser. Automated test passes if 'FileChooser: opened' was logged.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-click-expected.txt b/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-click-expected.txt
index 5872b21..06ae0c2 100644
--- a/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-click-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-click-expected.txt
@@ -1,4 +1,2 @@
 CONSOLE MESSAGE: line 5: FileChooser: opened; mode=kUploadFolder
 Ensure clicking on an INPUT element with TYPE=FILE and WEBKITDIRECTORY launches a file chooser. Automated test passes if 'FileChooser: opened' was logged.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-enter-expected.txt b/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-enter-expected.txt
index eec16ae..f416b53 100644
--- a/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-enter-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-enter-expected.txt
@@ -1,4 +1,2 @@
 CONSOLE MESSAGE: line 5: FileChooser: opened; mode=kUploadFolder
 Ensure pressing Enter key with focus on an INPUT element with TYPE=FILE and WEBKITDIRECTORY launches a file chooser. Automated test passes if 'FileChooser: opened' was logged.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-enter-prevent-keypress-expected.txt b/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-enter-prevent-keypress-expected.txt
index 272d871..c6dcdb30 100644
--- a/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-enter-prevent-keypress-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-enter-prevent-keypress-expected.txt
@@ -2,4 +2,3 @@
 Ensure pressing Enter key with focus on an INPUT element with TYPE=FILE and WEBKITDIRECTORY still launches a file chooser if preventDefault() is called on the 'keypress' event. Automated test passes if 'FileChooser: opened' was logged.
 
 keypress prevented
-
diff --git a/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-enter-prevent-keyup-expected.txt b/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-enter-prevent-keyup-expected.txt
index 3d1cc44..85a626c 100644
--- a/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-enter-prevent-keyup-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-enter-prevent-keyup-expected.txt
@@ -1,4 +1,3 @@
 Ensure pressing Enter key with focus on an INPUT element with TYPE=FILE and WEBKITDIRECTORY does not launch a file chooser if preventDefault() is called on the 'keyup' event. Automated test passes if 'FileChooser: opened' was not logged.
 
 keyup prevented
-
diff --git a/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-other-expected.txt b/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-other-expected.txt
index 95c43e80..fdf302e5 100644
--- a/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-other-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-other-expected.txt
@@ -1,3 +1 @@
 Ensure pressing non-enter/space keys with focus on an INPUT element with TYPE=FILE and WEBKITDIRECTORY does not launch a file chooser. Automated test fails if 'FileChooser: opened' was logged.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-space-expected.txt b/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-space-expected.txt
index 4815edb..e822fc0 100644
--- a/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-space-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/file-input-webkitdirectory-key-space-expected.txt
@@ -1,4 +1,2 @@
 CONSOLE MESSAGE: line 5: FileChooser: opened; mode=kUploadFolder
 Ensure pressing Space key with focus on an INPUT element with TYPE=FILE and WEBKITDIRECTORY launches a file chooser. Automated test passes if 'FileChooser: opened' was logged.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/file/file-setrangetext-expected.txt b/third_party/blink/web_tests/fast/forms/file/file-setrangetext-expected.txt
index 80823f68..ed79c86 100644
--- a/third_party/blink/web_tests/fast/forms/file/file-setrangetext-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/file-setrangetext-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/file/input-file-value-expected.txt b/third_party/blink/web_tests/fast/forms/file/input-file-value-expected.txt
index 12ce743..1c37769 100644
--- a/third_party/blink/web_tests/fast/forms/file/input-file-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/input-file-value-expected.txt
@@ -13,4 +13,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/file/input-file-value-with-zoom-expected.txt b/third_party/blink/web_tests/fast/forms/file/input-file-value-with-zoom-expected.txt
index 52e56e6..2ae5cc9 100644
--- a/third_party/blink/web_tests/fast/forms/file/input-file-value-with-zoom-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/input-file-value-with-zoom-expected.txt
@@ -13,4 +13,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/file/selected-files-from-history-state-expected.txt b/third_party/blink/web_tests/fast/forms/file/selected-files-from-history-state-expected.txt
index 056579e..242084f 100644
--- a/third_party/blink/web_tests/fast/forms/file/selected-files-from-history-state-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/file/selected-files-from-history-state-expected.txt
@@ -1,7 +1,5 @@
 Tests that selected files in file input elements are correctly retrieved by FormController::getReferencedFilePaths.
 
-
-
 PASS 
 PASS successfullyParsed is true
 
diff --git a/third_party/blink/web_tests/fast/forms/focus-control-to-page-expected.txt b/third_party/blink/web_tests/fast/forms/focus-control-to-page-expected.txt
index 2a23038e..786c5cb 100644
--- a/third_party/blink/web_tests/fast/forms/focus-control-to-page-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/focus-control-to-page-expected.txt
@@ -1,7 +1,7 @@
 This test checks whether you can tab in and out of various focusable objects including pages and content-editable areas. As you tab through, each element will log its number in order.
 
-  contentEditable
+  contentEditable 
 select
-  
+   
 
 1 2 3 4 5 6 7
diff --git a/third_party/blink/web_tests/fast/forms/focus-on-control-with-zero-size-expected.txt b/third_party/blink/web_tests/fast/forms/focus-on-control-with-zero-size-expected.txt
index e5dc78f2..b4497239b9 100644
--- a/third_party/blink/web_tests/fast/forms/focus-on-control-with-zero-size-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/focus-on-control-with-zero-size-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/focus-selection-input-expected.txt b/third_party/blink/web_tests/fast/forms/focus-selection-input-expected.txt
index e7b3244..947557cf 100644
--- a/third_party/blink/web_tests/fast/forms/focus-selection-input-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/focus-selection-input-expected.txt
@@ -20,13 +20,11 @@
 8) 
 , only the word "SUCCESS" should be selected:
 
-
 9)
 Hit Ctrl-Option-I (or Alt-I on Windows), only the word "SUCCESS" should be selected:
 
 
 
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/focus-selection-textarea-expected.txt b/third_party/blink/web_tests/fast/forms/focus-selection-textarea-expected.txt
index 4348675..7b6b938 100644
--- a/third_party/blink/web_tests/fast/forms/focus-selection-textarea-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/focus-selection-textarea-expected.txt
@@ -20,13 +20,11 @@
 8) 
 , only the word "SUCCESS" should be selected:
 
-
 9)
 Hit Ctrl-Option-I (or Alt-I on Windows), only the word "SUCCESS" should be selected:
 
 
 
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/focus2-expected.txt b/third_party/blink/web_tests/fast/forms/focus2-expected.txt
index 78adea6..b2523cb 100644
--- a/third_party/blink/web_tests/fast/forms/focus2-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/focus2-expected.txt
@@ -1,7 +1,6 @@
 This test tabs between lots of elements, printing out the events you see along the way.
 
 anchor
-
 PARENT DOCUMENT:
 focus event: [to] BUTTON
 keydown event: [to] BUTTON
diff --git a/third_party/blink/web_tests/fast/forms/form-and-frame-interaction-retains-values-expected.txt b/third_party/blink/web_tests/fast/forms/form-and-frame-interaction-retains-values-expected.txt
index af65736..689cb8c 100644
--- a/third_party/blink/web_tests/fast/forms/form-and-frame-interaction-retains-values-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/form-and-frame-interaction-retains-values-expected.txt
@@ -9,9 +9,6 @@
 
 In this test the main page is loaded in a frameset, which sets the value of an input field in a form and has an iframe, which loads a page which submits the form. The form's target is the main page. When the form is reloaded it should not have the value that was set before the submission.
 
-
-
-
 --------
 Frame: '<!--framePath //<!--frame0-->/<!--frame0-->-->'
 --------
diff --git a/third_party/blink/web_tests/fast/forms/form-radio-node-list-expected.txt b/third_party/blink/web_tests/fast/forms/form-radio-node-list-expected.txt
index 77e593d3..02120dc 100644
--- a/third_party/blink/web_tests/fast/forms/form-radio-node-list-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/form-radio-node-list-expected.txt
@@ -21,6 +21,5 @@
 
 TEST COMPLETE
 
-
-   
-
+    
+ 
diff --git a/third_party/blink/web_tests/fast/forms/form-submission-create-crash-expected.txt b/third_party/blink/web_tests/fast/forms/form-submission-create-crash-expected.txt
index 1042c767..0383162 100644
--- a/third_party/blink/web_tests/fast/forms/form-submission-create-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/form-submission-create-crash-expected.txt
@@ -1,2 +1 @@
 Test passes if it does not crash.
-
diff --git a/third_party/blink/web_tests/fast/forms/form-submit-in-image-document-expected.txt b/third_party/blink/web_tests/fast/forms/form-submit-in-image-document-expected.txt
index 6e7eb94..4326e00 100644
--- a/third_party/blink/web_tests/fast/forms/form-submit-in-image-document-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/form-submit-in-image-document-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/formmethod-attribute-input-2-expected.txt b/third_party/blink/web_tests/fast/forms/formmethod-attribute-input-2-expected.txt
index 32e40de..214d7a4d 100644
--- a/third_party/blink/web_tests/fast/forms/formmethod-attribute-input-2-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/formmethod-attribute-input-2-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/formmethod-attribute-input-html-expected.txt b/third_party/blink/web_tests/fast/forms/formmethod-attribute-input-html-expected.txt
index 32e40de..214d7a4d 100644
--- a/third_party/blink/web_tests/fast/forms/formmethod-attribute-input-html-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/formmethod-attribute-input-html-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/formtarget-attribute-input-2-expected.txt b/third_party/blink/web_tests/fast/forms/formtarget-attribute-input-2-expected.txt
index 984a22d0..632f6b08 100644
--- a/third_party/blink/web_tests/fast/forms/formtarget-attribute-input-2-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/formtarget-attribute-input-2-expected.txt
@@ -11,5 +11,4 @@
 
 TEST COMPLETE
 
-
  
diff --git a/third_party/blink/web_tests/fast/forms/formtarget-attribute-input-html-expected.txt b/third_party/blink/web_tests/fast/forms/formtarget-attribute-input-html-expected.txt
index 984a22d0..632f6b08 100644
--- a/third_party/blink/web_tests/fast/forms/formtarget-attribute-input-html-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/formtarget-attribute-input-html-expected.txt
@@ -11,5 +11,4 @@
 
 TEST COMPLETE
 
-
  
diff --git a/third_party/blink/web_tests/fast/forms/hide-validation-message-crash-expected.txt b/third_party/blink/web_tests/fast/forms/hide-validation-message-crash-expected.txt
index 3c6ae4e..28a175a 100644
--- a/third_party/blink/web_tests/fast/forms/hide-validation-message-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/hide-validation-message-crash-expected.txt
@@ -1,2 +1 @@
 Test for crbug.com/782896. Pass if no crash.
-
diff --git a/third_party/blink/web_tests/fast/forms/image/image-setrangetext-expected.txt b/third_party/blink/web_tests/fast/forms/image/image-setrangetext-expected.txt
index 57640c72..6cdd9d35 100644
--- a/third_party/blink/web_tests/fast/forms/image/image-setrangetext-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/image/image-setrangetext-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/input-file-set-value-expected.txt b/third_party/blink/web_tests/fast/forms/input-file-set-value-expected.txt
index e9f462f2..84b3c69d 100644
--- a/third_party/blink/web_tests/fast/forms/input-file-set-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/input-file-set-value-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/input-type-change-focusout-expected.txt b/third_party/blink/web_tests/fast/forms/input-type-change-focusout-expected.txt
index 80549b9..f4fd5166 100644
--- a/third_party/blink/web_tests/fast/forms/input-type-change-focusout-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/input-type-change-focusout-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/input-valueasnumber-unsupported-expected.txt b/third_party/blink/web_tests/fast/forms/input-valueasnumber-unsupported-expected.txt
index 2f5eec5d..993b1104 100644
--- a/third_party/blink/web_tests/fast/forms/input-valueasnumber-unsupported-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/input-valueasnumber-unsupported-expected.txt
@@ -55,4 +55,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/input-width-height-attributes-expected.txt b/third_party/blink/web_tests/fast/forms/input-width-height-attributes-expected.txt
index 1ad3a66..d884ee33 100644
--- a/third_party/blink/web_tests/fast/forms/input-width-height-attributes-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/input-width-height-attributes-expected.txt
@@ -63,11 +63,3 @@
 
 
 
-
-
-
-
-
-
-
-
diff --git a/third_party/blink/web_tests/fast/forms/input-zero-height-focus-expected.txt b/third_party/blink/web_tests/fast/forms/input-zero-height-focus-expected.txt
index c29f6f9..edb6d77 100644
--- a/third_party/blink/web_tests/fast/forms/input-zero-height-focus-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/input-zero-height-focus-expected.txt
@@ -1,5 +1,3 @@
 Test for http://bugs.webkit.org/show_bug.cgi?id=13413 Failed assertion in LayoutTextControl::setSelectionRange in Google Spreadsheets.
 
 This test should not ASSERT.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/interactive-validation-assertion-by-validate-twice-expected.txt b/third_party/blink/web_tests/fast/forms/interactive-validation-assertion-by-validate-twice-expected.txt
index 1a4a62b..4d63fae 100644
--- a/third_party/blink/web_tests/fast/forms/interactive-validation-assertion-by-validate-twice-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/interactive-validation-assertion-by-validate-twice-expected.txt
@@ -1,6 +1,5 @@
 Test a bug that an assertion fails by invoking interactive validation twice very quickly.
 
-
 PASS Not crashed.
 PASS successfullyParsed is true
 
diff --git a/third_party/blink/web_tests/fast/forms/interactive-validation-select-crash-expected.txt b/third_party/blink/web_tests/fast/forms/interactive-validation-select-crash-expected.txt
index 8f681b1..a66cfa51 100644
--- a/third_party/blink/web_tests/fast/forms/interactive-validation-select-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/interactive-validation-select-crash-expected.txt
@@ -7,4 +7,3 @@
 
 Plese select
 Foo
-
diff --git a/third_party/blink/web_tests/fast/forms/label/continous-click-on-label-expected.txt b/third_party/blink/web_tests/fast/forms/label/continous-click-on-label-expected.txt
index 80aa1d00d..19f46210 100644
--- a/third_party/blink/web_tests/fast/forms/label/continous-click-on-label-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/label/continous-click-on-label-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/label/label-selection-by-dragging-expected.txt b/third_party/blink/web_tests/fast/forms/label/label-selection-by-dragging-expected.txt
index 64bc3953..33c9076b 100644
--- a/third_party/blink/web_tests/fast/forms/label/label-selection-by-dragging-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/label/label-selection-by-dragging-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/label/label-selection-expected.txt b/third_party/blink/web_tests/fast/forms/label/label-selection-expected.txt
index 3a2ef55..f996130 100644
--- a/third_party/blink/web_tests/fast/forms/label/label-selection-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/label/label-selection-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/label/labels-owner-node-adopted-expected.txt b/third_party/blink/web_tests/fast/forms/label/labels-owner-node-adopted-expected.txt
index 257912e..04e1f13 100644
--- a/third_party/blink/web_tests/fast/forms/label/labels-owner-node-adopted-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/label/labels-owner-node-adopted-expected.txt
@@ -13,4 +13,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/missing-action-expected.txt b/third_party/blink/web_tests/fast/forms/missing-action-expected.txt
index b83ca16..67cdbc5 100644
--- a/third_party/blink/web_tests/fast/forms/missing-action-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/missing-action-expected.txt
@@ -1,5 +1,3 @@
 Test for bug 17042: Forms without actions and a base tag submit incorrectly.
 
-
-
 Success
diff --git a/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-choose-default-value-after-set-value-expected.txt b/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-choose-default-value-after-set-value-expected.txt
index 83c319aa..388f6e5 100644
--- a/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-choose-default-value-after-set-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-choose-default-value-after-set-value-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-clearbutton-change-and-input-events-expected.txt b/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-clearbutton-change-and-input-events-expected.txt
index eb095a8..cff63cf 100644
--- a/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-clearbutton-change-and-input-events-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-clearbutton-change-and-input-events-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-fallback-format-expected.txt b/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-fallback-format-expected.txt
index d5a5117e..0051535 100644
--- a/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-fallback-format-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-fallback-format-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-mouse-events-expected.txt b/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-mouse-events-expected.txt
index a524dae..b340a110 100644
--- a/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-mouse-events-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-mouse-events-expected.txt
@@ -7,7 +7,6 @@
 Test following mouse actions:
 Mouse click to focus each of sub-fields
 Mouse click on the spin button to update each of sub-fields
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-preserve-value-after-history-back-expected.txt b/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-preserve-value-after-history-back-expected.txt
index e947fb9..5d9a378c 100644
--- a/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-preserve-value-after-history-back-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-preserve-value-after-history-back-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-validity-badinput-expected.txt b/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-validity-badinput-expected.txt
index 476a466..106bdbb 100644
--- a/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-validity-badinput-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/month-multiple-fields/month-multiple-fields-validity-badinput-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/month/ValidityState-stepMismatch-month-expected.txt b/third_party/blink/web_tests/fast/forms/month/ValidityState-stepMismatch-month-expected.txt
index 4a7053a..3e1fffc 100644
--- a/third_party/blink/web_tests/fast/forms/month/ValidityState-stepMismatch-month-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/month/ValidityState-stepMismatch-month-expected.txt
@@ -35,4 +35,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/month/month-appearance-l10n-expected.txt b/third_party/blink/web_tests/fast/forms/month/month-appearance-l10n-expected.txt
index 4c9cdd3..70fcca6 100644
--- a/third_party/blink/web_tests/fast/forms/month/month-appearance-l10n-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/month/month-appearance-l10n-expected.txt
@@ -1,24 +1,12 @@
 ar-eg
-
 de-de
-
 el-gr
-
 en-us
-
 fr-fr
-
 he-il
-
 hi-in
-
 ja-jp
-
 ko-kr
-
 ru-ru
-
 zh-tw
-
 zh-cn
-
diff --git a/third_party/blink/web_tests/fast/forms/month/month-input-type-expected.txt b/third_party/blink/web_tests/fast/forms/month/month-input-type-expected.txt
index 6c5b783..43b11bbe 100644
--- a/third_party/blink/web_tests/fast/forms/month/month-input-type-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/month/month-input-type-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/month/month-setrangetext-expected.txt b/third_party/blink/web_tests/fast/forms/month/month-setrangetext-expected.txt
index 910d566..1a7f6922 100644
--- a/third_party/blink/web_tests/fast/forms/month/month-setrangetext-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/month/month-setrangetext-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/number/number-change-type-on-focus-expected.txt b/third_party/blink/web_tests/fast/forms/number/number-change-type-on-focus-expected.txt
index a011730..4f47802 100644
--- a/third_party/blink/web_tests/fast/forms/number/number-change-type-on-focus-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/number/number-change-type-on-focus-expected.txt
@@ -2,7 +2,6 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-
 PASS Not crashed.
 PASS mouseDownCount is 1
 PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/fast/forms/number/number-lossless-localization-expected.txt b/third_party/blink/web_tests/fast/forms/number/number-lossless-localization-expected.txt
index b8593033..7517f3a 100644
--- a/third_party/blink/web_tests/fast/forms/number/number-lossless-localization-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/number/number-lossless-localization-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/number/number-setrangetext-expected.txt b/third_party/blink/web_tests/fast/forms/number/number-setrangetext-expected.txt
index acba2bf..f52bcabb 100644
--- a/third_party/blink/web_tests/fast/forms/number/number-setrangetext-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/number/number-setrangetext-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/number/number-skip-spaces-in-user-input-expected.txt b/third_party/blink/web_tests/fast/forms/number/number-skip-spaces-in-user-input-expected.txt
index 25bfd2d0..79f8d11 100644
--- a/third_party/blink/web_tests/fast/forms/number/number-skip-spaces-in-user-input-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/number/number-skip-spaces-in-user-input-expected.txt
@@ -8,4 +8,3 @@
 
 PASS input.valueAsNumber is 123456
 PASS input.value is "123456"
-
diff --git a/third_party/blink/web_tests/fast/forms/number/number-spinbutton-changeevent-trigger-expected.txt b/third_party/blink/web_tests/fast/forms/number/number-spinbutton-changeevent-trigger-expected.txt
index d9e5f1f..079b7fe 100644
--- a/third_party/blink/web_tests/fast/forms/number/number-spinbutton-changeevent-trigger-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/number/number-spinbutton-changeevent-trigger-expected.txt
@@ -21,4 +21,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/number/number-spinbutton-state-expected.txt b/third_party/blink/web_tests/fast/forms/number/number-spinbutton-state-expected.txt
index 5a082903..386ee5b4 100644
--- a/third_party/blink/web_tests/fast/forms/number/number-spinbutton-state-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/number/number-spinbutton-state-expected.txt
@@ -1,5 +1,4 @@
 BUG 79754[Forms] Spin button sometimes ignores Indeterminate of m_upDownState
-
 Manualt test steps
 Invoke browser with specifying screen position where moust pointer on the spin button.
 Click left mouse button without moving mouse pointer.
diff --git a/third_party/blink/web_tests/fast/forms/number/number-stepup-stepdown-from-renderer-expected.txt b/third_party/blink/web_tests/fast/forms/number/number-stepup-stepdown-from-renderer-expected.txt
index b0e58a2..6033407 100644
--- a/third_party/blink/web_tests/fast/forms/number/number-stepup-stepdown-from-renderer-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/number/number-stepup-stepdown-from-renderer-expected.txt
@@ -96,4 +96,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/number/number-type-update-by-change-event-expected.txt b/third_party/blink/web_tests/fast/forms/number/number-type-update-by-change-event-expected.txt
index bd89648..c5e4d48 100644
--- a/third_party/blink/web_tests/fast/forms/number/number-type-update-by-change-event-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/number/number-type-update-by-change-event-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/number/number-validity-stepmismatch-expected.txt b/third_party/blink/web_tests/fast/forms/number/number-validity-stepmismatch-expected.txt
index 8b4aea3..f9ea8a96 100644
--- a/third_party/blink/web_tests/fast/forms/number/number-validity-stepmismatch-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/number/number-validity-stepmismatch-expected.txt
@@ -35,4 +35,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/onchange-change-type-expected.txt b/third_party/blink/web_tests/fast/forms/onchange-change-type-expected.txt
index 23e6a0c..bfba956 100644
--- a/third_party/blink/web_tests/fast/forms/onchange-change-type-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/onchange-change-type-expected.txt
@@ -1,6 +1,5 @@
 This tests that onchange is not fired after a form field's type changes.
 
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/onchange-enter-submit-expected.txt b/third_party/blink/web_tests/fast/forms/onchange-enter-submit-expected.txt
index 1a5e879..d3c3457 100644
--- a/third_party/blink/web_tests/fast/forms/onchange-enter-submit-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/onchange-enter-submit-expected.txt
@@ -1,6 +1,5 @@
 This tests that onchange fires when you press Enter to submit a form.
 
-
 text onchange
 on submit
 
diff --git a/third_party/blink/web_tests/fast/forms/onchange-setvalueforuser-expected.txt b/third_party/blink/web_tests/fast/forms/onchange-setvalueforuser-expected.txt
index 58de8b9..13607bfe 100644
--- a/third_party/blink/web_tests/fast/forms/onchange-setvalueforuser-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/onchange-setvalueforuser-expected.txt
@@ -1,6 +1,5 @@
 This tests that onchange correctly fires after calling setValueForUser(). It can only be run using DumpRenderTree.
 
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/page-popup/page-popup-adjust-rect-expected.txt b/third_party/blink/web_tests/fast/forms/page-popup/page-popup-adjust-rect-expected.txt
index ffd7631..dc23656 100644
--- a/third_party/blink/web_tests/fast/forms/page-popup/page-popup-adjust-rect-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/page-popup/page-popup-adjust-rect-expected.txt
@@ -66,4 +66,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/page-popup/page-popup-hide-window-expected.txt b/third_party/blink/web_tests/fast/forms/page-popup/page-popup-hide-window-expected.txt
index 33df0ad..42e8b25 100644
--- a/third_party/blink/web_tests/fast/forms/page-popup/page-popup-hide-window-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/page-popup/page-popup-hide-window-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/pattern-attribute-001-expected.txt b/third_party/blink/web_tests/fast/forms/pattern-attribute-001-expected.txt
index ade3a9a5..d0d1627 100644
--- a/third_party/blink/web_tests/fast/forms/pattern-attribute-001-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/pattern-attribute-001-expected.txt
@@ -1,4 +1,3 @@
 There an input element with the pattern attribute set.
 
-
 SUCCESS
diff --git a/third_party/blink/web_tests/fast/forms/pattern-attribute-002-expected.txt b/third_party/blink/web_tests/fast/forms/pattern-attribute-002-expected.txt
index 7a2d95f..22ec5683 100644
--- a/third_party/blink/web_tests/fast/forms/pattern-attribute-002-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/pattern-attribute-002-expected.txt
@@ -1,4 +1,3 @@
 There an input element with the pattern attribute not set.
 
-
 SUCCESS
diff --git a/third_party/blink/web_tests/fast/forms/pattern-attribute-003-expected.txt b/third_party/blink/web_tests/fast/forms/pattern-attribute-003-expected.txt
index ade3a9a5..d0d1627 100644
--- a/third_party/blink/web_tests/fast/forms/pattern-attribute-003-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/pattern-attribute-003-expected.txt
@@ -1,4 +1,3 @@
 There an input element with the pattern attribute set.
 
-
 SUCCESS
diff --git a/third_party/blink/web_tests/fast/forms/percent-height-auto-width-form-controls-expected.txt b/third_party/blink/web_tests/fast/forms/percent-height-auto-width-form-controls-expected.txt
index 8b667f00..b804b68 100644
--- a/third_party/blink/web_tests/fast/forms/percent-height-auto-width-form-controls-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/percent-height-auto-width-form-controls-expected.txt
@@ -10,12 +10,6 @@
 
 The form controls of the same type below should be the same width.
 
-
-
-
-
-
-
 aaaaaaaaaaaaaaaaaaaaaaaaa
 aaaaaaaaaaaaaaaaaaaaaaaaa
 aaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/third_party/blink/web_tests/fast/forms/placeholder-non-textfield-expected.txt b/third_party/blink/web_tests/fast/forms/placeholder-non-textfield-expected.txt
index ad433c6..eac9a1b5 100644
--- a/third_party/blink/web_tests/fast/forms/placeholder-non-textfield-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/placeholder-non-textfield-expected.txt
@@ -1,5 +1,3 @@
 Test for rdar://problem/6469944 REGRESSION(3.2.1-ToT): Repro crash in WebCore::HTMLInputElement::updatePlaceholderVisibility opening http://billshrink.com.
 
 Not crashing means PASS.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/radio/indeterminate-radio-expected.txt b/third_party/blink/web_tests/fast/forms/radio/indeterminate-radio-expected.txt
index fd762ea..cb896a9 100644
--- a/third_party/blink/web_tests/fast/forms/radio/indeterminate-radio-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/radio/indeterminate-radio-expected.txt
@@ -1,5 +1,4 @@
 The test passes if the Filler Text below is green.
 
-
 Filler Text
 Pass
diff --git a/third_party/blink/web_tests/fast/forms/radio/radio-attr-order-expected.txt b/third_party/blink/web_tests/fast/forms/radio/radio-attr-order-expected.txt
index 258bded..6da7bcc 100644
--- a/third_party/blink/web_tests/fast/forms/radio/radio-attr-order-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/radio/radio-attr-order-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/radio/radio-no-theme-padding-expected.txt b/third_party/blink/web_tests/fast/forms/radio/radio-no-theme-padding-expected.txt
index 433fd5fd..4c9f6a1 100644
--- a/third_party/blink/web_tests/fast/forms/radio/radio-no-theme-padding-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/radio/radio-no-theme-padding-expected.txt
@@ -1,5 +1,3 @@
 This test checks the padding for radio buttons with no theme. This was wrong at one point because of a typo in the html4.css file.
 
 PASS
-
-
diff --git a/third_party/blink/web_tests/fast/forms/radio/state-restore-radio-group-expected.txt b/third_party/blink/web_tests/fast/forms/radio/state-restore-radio-group-expected.txt
index 67befb2d..14015a26 100644
--- a/third_party/blink/web_tests/fast/forms/radio/state-restore-radio-group-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/radio/state-restore-radio-group-expected.txt
@@ -6,5 +6,4 @@
 
 PASS document.getElementById("input1").checked is true
 PASS document.getElementById("input2").checked is false
-
  
diff --git a/third_party/blink/web_tests/fast/forms/range/ValidityState-stepMismatch-range-expected.txt b/third_party/blink/web_tests/fast/forms/range/ValidityState-stepMismatch-range-expected.txt
index 3a0a685..180523f 100644
--- a/third_party/blink/web_tests/fast/forms/range/ValidityState-stepMismatch-range-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/ValidityState-stepMismatch-range-expected.txt
@@ -38,4 +38,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/range/input-valueasnumber-range-expected.txt b/third_party/blink/web_tests/fast/forms/range/input-valueasnumber-range-expected.txt
index 3270bb1e..802554d 100644
--- a/third_party/blink/web_tests/fast/forms/range/input-valueasnumber-range-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/input-valueasnumber-range-expected.txt
@@ -52,4 +52,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/range/range-default-value-expected.txt b/third_party/blink/web_tests/fast/forms/range/range-default-value-expected.txt
index 422be9d..6ebf83e 100644
--- a/third_party/blink/web_tests/fast/forms/range/range-default-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/range-default-value-expected.txt
@@ -2,7 +2,6 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-
 PASS slider.value is "51"
 PASS successfullyParsed is true
 
diff --git a/third_party/blink/web_tests/fast/forms/range/range-input-dynamic-oninput-expected.txt b/third_party/blink/web_tests/fast/forms/range/range-input-dynamic-oninput-expected.txt
index 11db88f5..19e38803 100644
--- a/third_party/blink/web_tests/fast/forms/range/range-input-dynamic-oninput-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/range-input-dynamic-oninput-expected.txt
@@ -1,5 +1,4 @@
 This page tests that setting the value of an <input type=range> element to an out-of-range value does not fire the oninput event.
 
-
 PASS
 
diff --git a/third_party/blink/web_tests/fast/forms/range/range-keyboard-oninput-event-expected.txt b/third_party/blink/web_tests/fast/forms/range/range-keyboard-oninput-event-expected.txt
index 8a7f8551..5b29f7d1 100644
--- a/third_party/blink/web_tests/fast/forms/range/range-keyboard-oninput-event-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/range-keyboard-oninput-event-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/range/range-setrangetext-expected.txt b/third_party/blink/web_tests/fast/forms/range/range-setrangetext-expected.txt
index cab367d..69f55eba 100644
--- a/third_party/blink/web_tests/fast/forms/range/range-setrangetext-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/range-setrangetext-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/range/range-slow-drag-to-edge-expected.txt b/third_party/blink/web_tests/fast/forms/range/range-slow-drag-to-edge-expected.txt
index 4174032..6890f07 100644
--- a/third_party/blink/web_tests/fast/forms/range/range-slow-drag-to-edge-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/range-slow-drag-to-edge-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/range/range-type-change-crash-expected.txt b/third_party/blink/web_tests/fast/forms/range/range-type-change-crash-expected.txt
index dc1c2ff4..c50aac3 100644
--- a/third_party/blink/web_tests/fast/forms/range/range-type-change-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/range-type-change-crash-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/range/range-type-change-onchange-2-expected.txt b/third_party/blink/web_tests/fast/forms/range/range-type-change-onchange-2-expected.txt
index 26a2159..d8bf401d 100644
--- a/third_party/blink/web_tests/fast/forms/range/range-type-change-onchange-2-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/range-type-change-onchange-2-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/range/range-type-change-onchange-expected.txt b/third_party/blink/web_tests/fast/forms/range/range-type-change-onchange-expected.txt
index e4fa401..2d1842c 100644
--- a/third_party/blink/web_tests/fast/forms/range/range-type-change-onchange-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/range-type-change-onchange-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/range/range-type-change-oninput-expected.txt b/third_party/blink/web_tests/fast/forms/range/range-type-change-oninput-expected.txt
index e7be5673..93ab5687 100644
--- a/third_party/blink/web_tests/fast/forms/range/range-type-change-oninput-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/range-type-change-oninput-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/range/slider-hit-testing-expected.txt b/third_party/blink/web_tests/fast/forms/range/slider-hit-testing-expected.txt
index 772379a..36c5109 100644
--- a/third_party/blink/web_tests/fast/forms/range/slider-hit-testing-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/slider-hit-testing-expected.txt
@@ -1,4 +1,3 @@
 Clicking on the right side of slider should cause the thumb to move.
 
-
 PASSED
diff --git a/third_party/blink/web_tests/fast/forms/range/slider-inline-crash-expected.txt b/third_party/blink/web_tests/fast/forms/range/slider-inline-crash-expected.txt
index 8c34a1c..dcbe0899 100644
--- a/third_party/blink/web_tests/fast/forms/range/slider-inline-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/range/slider-inline-crash-expected.txt
@@ -1,3 +1 @@
 This test passes if dragging the thumb does not crash.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/reportValidity-invalid-expected.txt b/third_party/blink/web_tests/fast/forms/reportValidity-invalid-expected.txt
index 936277b4..5bf9c40 100644
--- a/third_party/blink/web_tests/fast/forms/reportValidity-invalid-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/reportValidity-invalid-expected.txt
@@ -2,10 +2,12 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-  
+   
 empty
 another
+ 
 X
+ 
 X
 PASS reportValidityFor("input-empty") is false
 PASS document.activeElement is $("input-empty")
diff --git a/third_party/blink/web_tests/fast/forms/reportValidity-valid-expected.txt b/third_party/blink/web_tests/fast/forms/reportValidity-valid-expected.txt
index 6ad9391e..ec24d01 100644
--- a/third_party/blink/web_tests/fast/forms/reportValidity-valid-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/reportValidity-valid-expected.txt
@@ -2,7 +2,7 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
- lorem ipsum  
+ lorem ipsum   
 abc
 Elements valid from the begining
 PASS document.getElementsByTagName("fieldset")[0].reportValidity() is true
diff --git a/third_party/blink/web_tests/fast/forms/required-attribute-001-expected.txt b/third_party/blink/web_tests/fast/forms/required-attribute-001-expected.txt
index 5c6fd94..f9e1dfe2 100644
--- a/third_party/blink/web_tests/fast/forms/required-attribute-001-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/required-attribute-001-expected.txt
@@ -9,5 +9,5 @@
 
 TEST COMPLETE
 
- 
+  
 X
diff --git a/third_party/blink/web_tests/fast/forms/required-attribute-002-expected.txt b/third_party/blink/web_tests/fast/forms/required-attribute-002-expected.txt
index 2f74aff..b576adc 100644
--- a/third_party/blink/web_tests/fast/forms/required-attribute-002-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/required-attribute-002-expected.txt
@@ -18,5 +18,5 @@
 
 TEST COMPLETE
 
- 
+  
 X
diff --git a/third_party/blink/web_tests/fast/forms/reset-autofilled-expected.txt b/third_party/blink/web_tests/fast/forms/reset-autofilled-expected.txt
index 0fb49d1..f50d198 100644
--- a/third_party/blink/web_tests/fast/forms/reset-autofilled-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/reset-autofilled-expected.txt
@@ -1,6 +1,6 @@
 This tests that a field's autofilled state is reverted when the form is reset. It can only be run using the test harness.
 
- 
+  
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/restore-selection-after-layout-expected.txt b/third_party/blink/web_tests/fast/forms/restore-selection-after-layout-expected.txt
index 59d53cd..10994be7 100644
--- a/third_party/blink/web_tests/fast/forms/restore-selection-after-layout-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/restore-selection-after-layout-expected.txt
@@ -1,4 +1,3 @@
 This test only works in DRT. You should see 'beforeafter' in the text field.
 
-
 beforeafter
diff --git a/third_party/blink/web_tests/fast/forms/search/input-search-press-escape-key-expected.txt b/third_party/blink/web_tests/fast/forms/search/input-search-press-escape-key-expected.txt
index cd60fd0..327012b 100644
--- a/third_party/blink/web_tests/fast/forms/search/input-search-press-escape-key-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/search/input-search-press-escape-key-expected.txt
@@ -13,7 +13,6 @@
 TEST COMPLETE
 
 
-
 This tests if the value in a search input form is cleared and a 'search' event is triggered, when we press the Escape key. To run (a part of) this test manually, type some text in the search form and then press the Escape key. If the text is cleared, then the test passes.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/fast/forms/search/search-hide-cancel-on-cancel-expected.txt b/third_party/blink/web_tests/fast/forms/search/search-hide-cancel-on-cancel-expected.txt
index 8c77d50..bc9ef12 100644
--- a/third_party/blink/web_tests/fast/forms/search/search-hide-cancel-on-cancel-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/search/search-hide-cancel-on-cancel-expected.txt
@@ -2,7 +2,6 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-
 PASS mouseDownCount is 2
 PASS successfullyParsed is true
 
diff --git a/third_party/blink/web_tests/fast/forms/search/search-setrangetext-expected.txt b/third_party/blink/web_tests/fast/forms/search/search-setrangetext-expected.txt
index f6004681..ebf07060 100644
--- a/third_party/blink/web_tests/fast/forms/search/search-setrangetext-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/search/search-setrangetext-expected.txt
@@ -252,4 +252,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/search/search-transformed-expected.txt b/third_party/blink/web_tests/fast/forms/search/search-transformed-expected.txt
index 2cd4684..7712471 100644
--- a/third_party/blink/web_tests/fast/forms/search/search-transformed-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/search/search-transformed-expected.txt
@@ -1,6 +1,4 @@
 Test for https://bugs.webkit.org/show_bug.cgi?id=22190:
 Tests drawing and event handling on transformed search fields.
 
-
-
 PASS
diff --git a/third_party/blink/web_tests/fast/forms/search/search-zoomed-expected.txt b/third_party/blink/web_tests/fast/forms/search/search-zoomed-expected.txt
index 4586dc08..bc9ba98 100644
--- a/third_party/blink/web_tests/fast/forms/search/search-zoomed-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/search/search-zoomed-expected.txt
@@ -1,6 +1,4 @@
 Test for https://bugs.webkit.org/show_bug.cgi?id=24733:
 Tests event handling on search fields with zoom.
 
-
-
 PASS
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.txt b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.txt
new file mode 100644
index 0000000..4582054
--- /dev/null
+++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.txt
@@ -0,0 +1,9 @@
+foo
+bar
+baz
+ The font size in the popup content should be 12px, which is the same as this text.
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-key-operations-expected.txt b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-key-operations-expected.txt
new file mode 100644
index 0000000..ac7008f
--- /dev/null
+++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-key-operations-expected.txt
@@ -0,0 +1,94 @@
+foo
+bar
+baz
+garply
+ 
+abc
+xyz
+==> Arrow keys + Enter
+PASS picker._selectElement.value is "1"
+PASS menu.value is "bar"
+PASS internals.selectMenuListText(menu) is "bar"
+PASS picker._selectElement.value is "4"
+PASS menu.value is "bar"
+PASS internals.selectMenuListText(menu) is "garply"
+PASS picker._selectElement.value is "4"
+PASS menu.value is "bar"
+PASS internals.selectMenuListText(menu) is "garply"
+PASS picker._selectElement.value is "1"
+PASS menu.value is "bar"
+PASS internals.selectMenuListText(menu) is "bar"
+PASS picker._selectElement.value is "0"
+PASS menu.value is "bar"
+PASS internals.selectMenuListText(menu) is "foo"
+PASS picker._selectElement.value is "0"
+PASS menu.value is "bar"
+PASS internals.selectMenuListText(menu) is "foo"
+PASS internals.pagePopupWindow is null
+PASS menu.value is "foo"
+PASS internals.selectMenuListText(menu) is "foo"
+==> Arrow keys + ESC
+PASS picker._selectElement.value is "0"
+PASS internals.selectMenuListText(menu) is "foo"
+PASS picker._selectElement.value is "1"
+PASS menu.value is "foo"
+PASS internals.selectMenuListText(menu) is "bar"
+PASS internals.pagePopupWindow is null
+PASS menu.value is "bar"
+PASS internals.selectMenuListText(menu) is "bar"
+==> Arrow keys + blur
+PASS picker._selectElement.value is "0"
+PASS internals.selectMenuListText(menu) is "foo"
+PASS picker._selectElement.value is "1"
+PASS menu.value is "foo"
+PASS internals.selectMenuListText(menu) is "bar"
+PASS internals.pagePopupWindow is null
+PASS menu.value is "bar"
+PASS internals.selectMenuListText(menu) is "bar"
+==> Typeahead + ESC
+PASS picker._selectElement.value is "1"
+PASS internals.selectMenuListText(menu) is "bar"
+PASS picker._selectElement.value is "4"
+PASS menu.value is "bar"
+PASS internals.selectMenuListText(menu) is "garply"
+PASS internals.pagePopupWindow is null
+PASS menu.value is "garply"
+PASS internals.selectMenuListText(menu) is "garply"
+==> Hover + ESC
+PASS picker._selectElement.value is "4"
+PASS internals.selectMenuListText(menu) is "garply"
+PASS picker._selectElement.value is "0"
+PASS menu.value is "garply"
+PASS internals.selectMenuListText(menu) is "garply"
+PASS internals.pagePopupWindow is null
+PASS menu.value is "garply"
+PASS internals.selectMenuListText(menu) is "garply"
+==> Hover + Invalid arrow + ESC
+PASS picker._selectElement.value is "4"
+PASS internals.selectMenuListText(menu) is "garply"
+PASS picker._selectElement.value is "0"
+PASS menu.value is "garply"
+PASS internals.selectMenuListText(menu) is "garply"
+PASS picker._selectElement.value is "0"
+PASS menu.value is "garply"
+PASS internals.selectMenuListText(menu) is "garply"
+PASS internals.pagePopupWindow is null
+PASS menu.value is "garply"
+PASS internals.selectMenuListText(menu) is "garply"
+==> Arrow key + Click
+PASS picker._selectElement.value is "0"
+PASS internals.selectMenuListText(menu) is "foo"
+PASS picker._selectElement.value is "1"
+PASS menu.value is "foo"
+PASS internals.selectMenuListText(menu) is "bar"
+PASS internals.pagePopupWindow is null
+PASS menu.value is "foo"
+PASS internals.selectMenuListText(menu) is "foo"
+==> Enter with no selected OPTION
+PASS picker._selectElement.value is ""
+PASS internals.pagePopupWindow is null
+PASS menu2.value is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-mouse-operations-expected.txt b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-mouse-operations-expected.txt
new file mode 100644
index 0000000..7feb772
--- /dev/null
+++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-mouse-operations-expected.txt
@@ -0,0 +1,55 @@
+PASS picker._selectElement.value is "1"
+PASS menuElement.value is "bar"
+PASS picker._selectElement.value is "0"
+PASS menuElement.value is "bar"
+PASS picker._selectElement.value is "1"
+PASS menuElement.value is "bar"
+PASS picker._selectElement.value is "1"
+PASS menuElement.value is "bar"
+PASS internals.pagePopupWindow is not null
+PASS picker._selectElement.value is "0"
+PASS menuElement.value is "bar"
+PASS clickEventCounter is 0
+PASS mouseupEventCounter is 0
+PASS internals.pagePopupWindow is null
+PASS menuElement.value is "baz"
+PASS clickEventCounter is 1
+PASS mouseupEventCounter is 1
+PASS picker._selectElement.value is "2"
+PASS internals.selectMenuListText(menu) is "baz"
+PASS picker._selectElement.value is "1"
+PASS menu.value is "baz"
+PASS internals.selectMenuListText(menu) is "bar"
+PASS internals.pagePopupWindow is null
+PASS menu.value is "bar"
+PASS internals.selectMenuListText(menu) is "bar"
+PASS picker._selectElement.selectedOptions[0].label is "option20"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+foo
+bar
+baz
+ 
+option1
+option2
+option3
+option4
+option5
+option6
+option7
+option8
+option9
+option10
+option11
+option12
+option13
+option14
+option15
+option16
+option17
+option18
+option19
+option20
+option21
diff --git a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-touch-operations-expected.txt b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-touch-operations-expected.txt
index 2eb23d07..1bc1bd72 100644
--- a/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-touch-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select-popup/popup-menu-touch-operations-expected.txt
@@ -34,6 +34,7 @@
 foo
 bar
 baz
+ 
 1
 2
 3
diff --git a/third_party/blink/web_tests/fast/forms/select/add-and-remove-option-expected.txt b/third_party/blink/web_tests/fast/forms/select/add-and-remove-option-expected.txt
index 3f05572..2eb5c703 100644
--- a/third_party/blink/web_tests/fast/forms/select/add-and-remove-option-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/add-and-remove-option-expected.txt
@@ -4,8 +4,10 @@
 
 1
 2
+ 
 1
 2
+ 
 1
 2
 
diff --git a/third_party/blink/web_tests/fast/forms/select/add-remove-option-modification-event-expected.txt b/third_party/blink/web_tests/fast/forms/select/add-remove-option-modification-event-expected.txt
index 2f868181..f8dd8a09 100644
--- a/third_party/blink/web_tests/fast/forms/select/add-remove-option-modification-event-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/add-remove-option-modification-event-expected.txt
@@ -1,7 +1,9 @@
 Test that SELECT is in correct state when handling a DOM modification event for option removing.
 
 2
+ 
 2
+ 
 2
 
 Passed
diff --git a/third_party/blink/web_tests/fast/forms/select/change-multiple-preserve-selection-expected.txt b/third_party/blink/web_tests/fast/forms/select/change-multiple-preserve-selection-expected.txt
index cbc9c6a5..a075ad7 100644
--- a/third_party/blink/web_tests/fast/forms/select/change-multiple-preserve-selection-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/change-multiple-preserve-selection-expected.txt
@@ -1,15 +1,19 @@
 1
 2
 3
+ 
 1
 2
 3
+ 
 1
 2
 3
+ 
 1
 2
 3
+ 
 1
 2
 3
diff --git a/third_party/blink/web_tests/fast/forms/select/click-size-zero-no-crash-expected.txt b/third_party/blink/web_tests/fast/forms/select/click-size-zero-no-crash-expected.txt
index 3bd76f7..8011c14 100644
--- a/third_party/blink/web_tests/fast/forms/select/click-size-zero-no-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/click-size-zero-no-crash-expected.txt
@@ -1 +1 @@
-This should not crash
+ This should not crash
diff --git a/third_party/blink/web_tests/fast/forms/select/collection-setter-getter-expected.txt b/third_party/blink/web_tests/fast/forms/select/collection-setter-getter-expected.txt
index 2cac1f18..db45630 100644
--- a/third_party/blink/web_tests/fast/forms/select/collection-setter-getter-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/collection-setter-getter-expected.txt
@@ -21,5 +21,6 @@
 ========
 A
 B
+ 
 option 1
 option 2
diff --git a/third_party/blink/web_tests/fast/forms/select/listbox-select-reset-expected.txt b/third_party/blink/web_tests/fast/forms/select/listbox-select-reset-expected.txt
index 12bf810d..8555228ad 100644
--- a/third_party/blink/web_tests/fast/forms/select/listbox-select-reset-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/listbox-select-reset-expected.txt
@@ -1,10 +1,11 @@
 one
 two
 three
+ 
 one
 two
 three
-
+ 
 
 This test verifies that list-box-style select form controls with no "selected" attributes are properly cleared when reset.
 
diff --git a/third_party/blink/web_tests/fast/forms/select/popup-closes-on-blur-expected.txt b/third_party/blink/web_tests/fast/forms/select/popup-closes-on-blur-expected.txt
index c7ded06..e3331df 100644
--- a/third_party/blink/web_tests/fast/forms/select/popup-closes-on-blur-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/popup-closes-on-blur-expected.txt
@@ -10,4 +10,4 @@
 
 One
 Two
-
+ 
diff --git a/third_party/blink/web_tests/fast/forms/select/popup-with-display-none-optgroup-expected.txt b/third_party/blink/web_tests/fast/forms/select/popup-with-display-none-optgroup-expected.txt
index 1d6370ae..73cd36f 100644
--- a/third_party/blink/web_tests/fast/forms/select/popup-with-display-none-optgroup-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/popup-with-display-none-optgroup-expected.txt
@@ -16,6 +16,7 @@
 Five
 Six
 Seven
+ 
 One
 Two
 Three
diff --git a/third_party/blink/web_tests/fast/forms/select/select-accesskey-expected.txt b/third_party/blink/web_tests/fast/forms/select/select-accesskey-expected.txt
index 4bc63ee..d69cfdac 100644
--- a/third_party/blink/web_tests/fast/forms/select/select-accesskey-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/select-accesskey-expected.txt
@@ -1,6 +1,6 @@
 blaa
 jee
-Press Ctrl-Option-A (or Alt-A on Windows) to activate the select. Works as layout test too using eventSender.
+ Press Ctrl-Option-A (or Alt-A on Windows) to activate the select. Works as layout test too using eventSender.
 focus event:
 PASS 1
 click event:
diff --git a/third_party/blink/web_tests/fast/forms/select/select-clientheight-with-multiple-attr-expected.txt b/third_party/blink/web_tests/fast/forms/select/select-clientheight-with-multiple-attr-expected.txt
index 34a3e4c..ae18bc0 100644
--- a/third_party/blink/web_tests/fast/forms/select/select-clientheight-with-multiple-attr-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/select-clientheight-with-multiple-attr-expected.txt
@@ -12,6 +12,7 @@
 TEST COMPLETE
 
 One
+ 
 One
 Two
 Three
@@ -26,6 +27,7 @@
 Twelve
 Thirteen
 Fourteen
+ 
 One
 Two
 Three
diff --git a/third_party/blink/web_tests/fast/forms/select/select-disabled-expected.txt b/third_party/blink/web_tests/fast/forms/select/select-disabled-expected.txt
index dc723cc7..2256710a 100644
--- a/third_party/blink/web_tests/fast/forms/select/select-disabled-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/select-disabled-expected.txt
@@ -23,11 +23,14 @@
 a
 b
 c
+ 
 a
 b
 c
+ 
 a
+ 
 a
 b
 c
-
+ 
diff --git a/third_party/blink/web_tests/fast/forms/select/select-multiple-elements-with-mouse-drag-with-options-less-than-size-expected.txt b/third_party/blink/web_tests/fast/forms/select/select-multiple-elements-with-mouse-drag-with-options-less-than-size-expected.txt
index eea4097..6348a08 100644
--- a/third_party/blink/web_tests/fast/forms/select/select-multiple-elements-with-mouse-drag-with-options-less-than-size-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/select-multiple-elements-with-mouse-drag-with-options-less-than-size-expected.txt
@@ -7,6 +7,7 @@
 P3
 P4
 P5
+ 
 P1
 P2
 P3
diff --git a/third_party/blink/web_tests/fast/forms/select/select-no-name-expected.txt b/third_party/blink/web_tests/fast/forms/select/select-no-name-expected.txt
index bde4b66..7f228bf 100644
--- a/third_party/blink/web_tests/fast/forms/select/select-no-name-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/select-no-name-expected.txt
@@ -1,6 +1,7 @@
 Test for bug 20184: SELECT with no name generates invalid query string.
 
 invalid
+ 
 PASS
 
 reload
diff --git a/third_party/blink/web_tests/fast/forms/select/select-popup-pagekeys-expected.txt b/third_party/blink/web_tests/fast/forms/select/select-popup-pagekeys-expected.txt
index f2c4eadc..ecde184f 100644
--- a/third_party/blink/web_tests/fast/forms/select/select-popup-pagekeys-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/select-popup-pagekeys-expected.txt
@@ -11,6 +11,7 @@
 4
 5
 6
+ 
 0
 1
 2
@@ -19,53 +20,15 @@
 5
 6
 7
-FAIL: selectedIndex should be 3 (is 0) after a PageDown from index 0
-FAIL: selectedIndex should be 4 (is 1) after a PageDown from index 1
-FAIL: selectedIndex should be 5 (is 2) after a PageDown from index 2
-FAIL: selectedIndex should be 6 (is 3) after a PageDown from index 3
-FAIL: selectedIndex should be 6 (is 4) after a PageDown from index 4
-FAIL: selectedIndex should be 6 (is 5) after a PageDown from index 5
-FAIL: selectedIndex should be 3 (is 6) after a PageUp from index 6
-FAIL: selectedIndex should be 2 (is 5) after a PageUp from index 5
-FAIL: selectedIndex should be 1 (is 4) after a PageUp from index 4
-FAIL: selectedIndex should be 0 (is 3) after a PageUp from index 3
-FAIL: selectedIndex should be 0 (is 2) after a PageUp from index 2
-FAIL: selectedIndex should be 0 (is 1) after a PageUp from index 1
-FAIL: selectedIndex should be 0 (is 6) after a Home from index 6
-FAIL: selectedIndex should be 0 (is 5) after a Home from index 5
-FAIL: selectedIndex should be 0 (is 4) after a Home from index 4
-FAIL: selectedIndex should be 0 (is 3) after a Home from index 3
-FAIL: selectedIndex should be 0 (is 2) after a Home from index 2
-FAIL: selectedIndex should be 0 (is 1) after a Home from index 1
-FAIL: selectedIndex should be 6 (is 5) after a End from index 5
-FAIL: selectedIndex should be 6 (is 4) after a End from index 4
-FAIL: selectedIndex should be 6 (is 3) after a End from index 3
-FAIL: selectedIndex should be 6 (is 2) after a End from index 2
-FAIL: selectedIndex should be 6 (is 1) after a End from index 1
-FAIL: selectedIndex should be 6 (is 0) after a End from index 0
-FAIL: selectedIndex should be 4 (is 1) after a PageDown from index 1
-FAIL: selectedIndex should be 5 (is 2) after a PageDown from index 2
-FAIL: selectedIndex should be 6 (is 4) after a PageDown from index 4
-FAIL: selectedIndex should be 6 (is 5) after a PageDown from index 5
-FAIL: selectedIndex should be 2 (is 6) after a PageUp from index 6
-FAIL: selectedIndex should be 2 (is 5) after a PageUp from index 5
-FAIL: selectedIndex should be 1 (is 4) after a PageUp from index 4
-FAIL: selectedIndex should be 1 (is 2) after a PageUp from index 2
-FAIL: selectedIndex should be 1 (is 7) after a Home from index 7
-FAIL: selectedIndex should be 1 (is 6) after a Home from index 6
-FAIL: selectedIndex should be 1 (is 5) after a Home from index 5
-FAIL: selectedIndex should be 1 (is 4) after a Home from index 4
-FAIL: selectedIndex should be 1 (is 3) after a Home from index 3
-FAIL: selectedIndex should be 1 (is 2) after a Home from index 2
-FAIL: selectedIndex should be 1 (is 0) after a Home from index 0
-FAIL: selectedIndex should be 6 (is 7) after a End from index 7
-FAIL: selectedIndex should be 6 (is 5) after a End from index 5
-FAIL: selectedIndex should be 6 (is 4) after a End from index 4
-FAIL: selectedIndex should be 6 (is 3) after a End from index 3
-FAIL: selectedIndex should be 6 (is 2) after a End from index 2
-FAIL: selectedIndex should be 6 (is 1) after a End from index 1
-FAIL: selectedIndex should be 6 (is 0) after a End from index 0
+PASS: testPageDownNoDisabledElements passed
+PASS: testPageUpNoDisabledElements passed
+PASS: testHomeNoDisabledElements passed
+PASS: testEndNoDisabledElements passed
+PASS: testPageDownWithDisabledElements passed
+PASS: testPageUpWithDisabledElements passed
+PASS: testHomeWithDisabledElements passed
+PASS: testEndWithDisabledElements passed
 
-FAIL: SOME TESTS FAILED (SEE ABOVE)
+PASS: ALL TESTS SUCCEEDED
 
 
diff --git a/third_party/blink/web_tests/fast/forms/select/select-reset-multiple-selections-4-single-selection-expected.txt b/third_party/blink/web_tests/fast/forms/select/select-reset-multiple-selections-4-single-selection-expected.txt
index 845902a..026b68f 100644
--- a/third_party/blink/web_tests/fast/forms/select/select-reset-multiple-selections-4-single-selection-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/select-reset-multiple-selections-4-single-selection-expected.txt
@@ -6,7 +6,7 @@
 2
 3
 4
-
+ 
 
 
 LOAD:SUCCEEDED!
diff --git a/third_party/blink/web_tests/fast/forms/select/select-script-onchange-expected.txt b/third_party/blink/web_tests/fast/forms/select/select-script-onchange-expected.txt
index 658b0ec..4883a00 100644
--- a/third_party/blink/web_tests/fast/forms/select/select-script-onchange-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/select-script-onchange-expected.txt
@@ -2,13 +2,13 @@
 
 SUCCESS
 
-This select changes on focus: should not fire onchange.
+This select changes on focus: should not fire onchange. 
 One
 Two
-This select changes on change: should only fire onchange once.
+This select changes on change: should only fire onchange once. 
 One
 Two
 Three
-This select is changed by a timeout in the test script. It should not fire onchange.
+This select is changed by a timeout in the test script. It should not fire onchange. 
 One
 Two
diff --git a/third_party/blink/web_tests/fast/forms/select/select-state-restore-expected.txt b/third_party/blink/web_tests/fast/forms/select/select-state-restore-expected.txt
index aa5e9f10..2d54c14 100644
--- a/third_party/blink/web_tests/fast/forms/select/select-state-restore-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/select-state-restore-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/select/select-with-display-none-options-expected.txt b/third_party/blink/web_tests/fast/forms/select/select-with-display-none-options-expected.txt
index ba1531d..f5c9590 100644
--- a/third_party/blink/web_tests/fast/forms/select/select-with-display-none-options-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/select-with-display-none-options-expected.txt
@@ -20,18 +20,22 @@
 b
 c
 d
+ 
 a
 b
 c
 d
+ 
 a
 b
 c
 d
+ 
 a
 b
 c
 d
+ 
 a
 b
 c
diff --git a/third_party/blink/web_tests/fast/forms/select/selected-index-assert-expected.txt b/third_party/blink/web_tests/fast/forms/select/selected-index-assert-expected.txt
index b29ebcd41..1adb1b48 100644
--- a/third_party/blink/web_tests/fast/forms/select/selected-index-assert-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/selected-index-assert-expected.txt
@@ -1,2 +1,2 @@
 This tests for a regression against https://bugs.webkit.org/show_bug.cgi?id=6942 Assertion failure in HTMLSelectElementImpl::selectedIndex (m_multiple)
-No assertion failure (on a debug build) means test PASS.
+No assertion failure (on a debug build) means test PASS. 
diff --git a/third_party/blink/web_tests/fast/forms/select/selected-index-preserved-when-option-text-changes-expected.txt b/third_party/blink/web_tests/fast/forms/select/selected-index-preserved-when-option-text-changes-expected.txt
index e1e25b9..38c266d 100644
--- a/third_party/blink/web_tests/fast/forms/select/selected-index-preserved-when-option-text-changes-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/selected-index-preserved-when-option-text-changes-expected.txt
@@ -1,6 +1,7 @@
 Changed text for item 1
 Item 2
 Item 3
+ 
 Changed text for item 1
 Item 2
 Item 3
diff --git a/third_party/blink/web_tests/fast/forms/select/set-option-index-text-expected.txt b/third_party/blink/web_tests/fast/forms/select/set-option-index-text-expected.txt
index 393d5f1..183ae67 100644
--- a/third_party/blink/web_tests/fast/forms/select/set-option-index-text-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/set-option-index-text-expected.txt
@@ -2,6 +2,6 @@
 
 Option 1
 Option 2
-Option 1
+ Option 1
 Option 2
 
diff --git a/third_party/blink/web_tests/fast/forms/select/setting-to-invalid-value-expected.txt b/third_party/blink/web_tests/fast/forms/select/setting-to-invalid-value-expected.txt
index 9ace253f..1f3b827 100644
--- a/third_party/blink/web_tests/fast/forms/select/setting-to-invalid-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/select/setting-to-invalid-value-expected.txt
@@ -1,5 +1,6 @@
 A
 B
+ 
 A
 B
 C
diff --git a/third_party/blink/web_tests/fast/forms/setCustomValidity-expected.txt b/third_party/blink/web_tests/fast/forms/setCustomValidity-expected.txt
index 48b90de0..5ef8e716 100644
--- a/third_party/blink/web_tests/fast/forms/setCustomValidity-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/setCustomValidity-expected.txt
@@ -2,7 +2,7 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
- 
+  
 PASS test.validity.customError is false
 PASS test.validationMessage is ""
 PASS getComputedStyle(test).backgroundColor is "rgb(0, 255, 0)"
diff --git a/third_party/blink/web_tests/fast/forms/setrangetext-expected.txt b/third_party/blink/web_tests/fast/forms/setrangetext-expected.txt
index dd8ad3f..b270d0f2 100644
--- a/third_party/blink/web_tests/fast/forms/setrangetext-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/setrangetext-expected.txt
@@ -651,4 +651,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/state-restore-broken-state-expected.txt b/third_party/blink/web_tests/fast/forms/state-restore-broken-state-expected.txt
index e400d67..5cbc47a5 100644
--- a/third_party/blink/web_tests/fast/forms/state-restore-broken-state-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/state-restore-broken-state-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/state-restore-hidden-expected.txt b/third_party/blink/web_tests/fast/forms/state-restore-hidden-expected.txt
index 721b88a..937e3f5 100644
--- a/third_party/blink/web_tests/fast/forms/state-restore-hidden-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/state-restore-hidden-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/state-restore-to-non-autocomplete-form-expected.txt b/third_party/blink/web_tests/fast/forms/state-restore-to-non-autocomplete-form-expected.txt
index f10c2c7..5bc8561 100644
--- a/third_party/blink/web_tests/fast/forms/state-restore-to-non-autocomplete-form-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/state-restore-to-non-autocomplete-form-expected.txt
@@ -12,12 +12,11 @@
 PASS document.getElementById("input2").value is "value2"
 PASS document.getElementById("textarea2").value is "good"
 PASS document.getElementById("select2").value is "BSD"
-
- 
+  
 Mac
 Windows
 BSD
- 
+  
 Mac
 Windows
 BSD
diff --git a/third_party/blink/web_tests/fast/forms/state-restore-to-non-edited-controls-expected.txt b/third_party/blink/web_tests/fast/forms/state-restore-to-non-edited-controls-expected.txt
index 46450e3..4ee381a44 100644
--- a/third_party/blink/web_tests/fast/forms/state-restore-to-non-edited-controls-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/state-restore-to-non-edited-controls-expected.txt
@@ -13,4 +13,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/state-save-of-detached-control-expected.txt b/third_party/blink/web_tests/fast/forms/state-save-of-detached-control-expected.txt
index 69a566f..2c8423f 100644
--- a/third_party/blink/web_tests/fast/forms/state-save-of-detached-control-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/state-save-of-detached-control-expected.txt
@@ -5,5 +5,3 @@
 TEST COMPLETE
 
 PASS document.getElementById("input2").value is ""
-
-
diff --git a/third_party/blink/web_tests/fast/forms/submit-add-remove-element-expected.txt b/third_party/blink/web_tests/fast/forms/submit-add-remove-element-expected.txt
index 098d7a61..8436d9f 100644
--- a/third_party/blink/web_tests/fast/forms/submit-add-remove-element-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/submit-add-remove-element-expected.txt
@@ -8,4 +8,3 @@
 TEST COMPLETE
 
  
-
diff --git a/third_party/blink/web_tests/fast/forms/submit-form-with-dirname-attribute-with-ancestor-dir-attribute-expected.txt b/third_party/blink/web_tests/fast/forms/submit-form-with-dirname-attribute-with-ancestor-dir-attribute-expected.txt
index bc5a1d3..790ee176 100644
--- a/third_party/blink/web_tests/fast/forms/submit-form-with-dirname-attribute-with-ancestor-dir-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/submit-form-with-dirname-attribute-with-ancestor-dir-attribute-expected.txt
@@ -1,8 +1,5 @@
 Test that when dirname attribute is specified then it is added in submission body.
 
-
-
-
 Post Comment
 
 Hello
diff --git a/third_party/blink/web_tests/fast/forms/submit-form-with-dirname-attribute-with-nonhtml-ancestor-expected.txt b/third_party/blink/web_tests/fast/forms/submit-form-with-dirname-attribute-with-nonhtml-ancestor-expected.txt
index 0ad7b39c..3a13b7d 100644
--- a/third_party/blink/web_tests/fast/forms/submit-form-with-dirname-attribute-with-nonhtml-ancestor-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/submit-form-with-dirname-attribute-with-nonhtml-ancestor-expected.txt
@@ -1,7 +1,5 @@
 Test that when dir attribute is specified for non html element, it is not considered for dirname attribute value in submission body.
 
-
-
 Post Comment
 
 PASS document.location.search.indexOf("nonHtmlAncestor.dir=ltr") != -1 is true
diff --git a/third_party/blink/web_tests/fast/forms/submit-onFocus-invalidForm-expected.txt b/third_party/blink/web_tests/fast/forms/submit-onFocus-invalidForm-expected.txt
index 06ae4f0..dbdcbe66 100644
--- a/third_party/blink/web_tests/fast/forms/submit-onFocus-invalidForm-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/submit-onFocus-invalidForm-expected.txt
@@ -8,4 +8,3 @@
 TEST COMPLETE
 
  
-
diff --git a/third_party/blink/web_tests/fast/forms/submit-to-blank-multiple-times-expected.txt b/third_party/blink/web_tests/fast/forms/submit-to-blank-multiple-times-expected.txt
index 468a4598..44b16b44 100644
--- a/third_party/blink/web_tests/fast/forms/submit-to-blank-multiple-times-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/submit-to-blank-multiple-times-expected.txt
@@ -2,8 +2,6 @@
 
 This test will click the first submit button twice, then press the space bar on the second submit button twice. Both should popup two blank windows.
 
-
-
 Clicking first button, should open new window
 PASS
 Clicking first button, should open new window
diff --git a/third_party/blink/web_tests/fast/forms/submit-to-url-fragment-expected.txt b/third_party/blink/web_tests/fast/forms/submit-to-url-fragment-expected.txt
index d49f30f..2ef13fd 100644
--- a/third_party/blink/web_tests/fast/forms/submit-to-url-fragment-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/submit-to-url-fragment-expected.txt
@@ -1,4 +1,3 @@
 Test for Bug 20038: REGRESSION (r35151): Can't post comments on flickr.com
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-key-operations-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-key-operations-expected.txt
index b881f08..fee1328c 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-key-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-key-operations-expected.txt
@@ -40,4 +40,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-min-max-attribute-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-min-max-attribute-expected.txt
index 1110bca..ec4e93a9 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-min-max-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-min-max-attribute-expected.txt
@@ -17,4 +17,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-mouse-operations-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-mouse-operations-expected.txt
index adfbcd0..9f2930a0 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-mouse-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-mouse-operations-expected.txt
@@ -19,4 +19,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-step-attribute-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-step-attribute-expected.txt
index 790ac89..1d7c598 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-step-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/date-suggestion-picker-step-attribute-expected.txt
@@ -24,4 +24,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-key-operations-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-key-operations-expected.txt
index 791d58d1..1e2369fa 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-key-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-key-operations-expected.txt
@@ -31,4 +31,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-min-max-attribute-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-min-max-attribute-expected.txt
index 2526c8d..9e3f89a 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-min-max-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-min-max-attribute-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-mouse-operations-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-mouse-operations-expected.txt
index 8af0f4b..88ef8c1 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-mouse-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-mouse-operations-expected.txt
@@ -19,4 +19,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-step-attribute-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-step-attribute-expected.txt
index 0021091..3af5ad1a 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-step-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-step-attribute-expected.txt
@@ -34,4 +34,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-key-operations-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-key-operations-expected.txt
index ac0eecd1..18e838c 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-key-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-key-operations-expected.txt
@@ -40,4 +40,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-min-max-attribute-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-min-max-attribute-expected.txt
index c369df7..fdb46d6 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-min-max-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-min-max-attribute-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-mouse-operations-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-mouse-operations-expected.txt
index 9eea4fb..4c6ea78 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-mouse-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-mouse-operations-expected.txt
@@ -19,4 +19,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-step-attribute-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-step-attribute-expected.txt
index c164b9e..a4cffa1a 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-step-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/month-suggestion-picker-step-attribute-expected.txt
@@ -22,4 +22,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-key-operations-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-key-operations-expected.txt
index 2487ca60..adce66ad 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-key-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-key-operations-expected.txt
@@ -31,4 +31,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-min-max-attribute-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-min-max-attribute-expected.txt
index 4ef36fd45..78867b53 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-min-max-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-min-max-attribute-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-mouse-operations-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-mouse-operations-expected.txt
index 00b378f5..2dcfae1 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-mouse-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-mouse-operations-expected.txt
@@ -21,4 +21,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-step-attribute-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-step-attribute-expected.txt
index 838667c..76fe661 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-step-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/time-suggestion-picker-step-attribute-expected.txt
@@ -30,4 +30,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-key-operations-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-key-operations-expected.txt
index 8fd34db..1790ca4 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-key-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-key-operations-expected.txt
@@ -40,4 +40,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-min-max-attribute-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-min-max-attribute-expected.txt
index 43c01686..745def55 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-min-max-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-min-max-attribute-expected.txt
@@ -17,4 +17,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-mouse-operations-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-mouse-operations-expected.txt
index bf77798..48696f0 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-mouse-operations-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-mouse-operations-expected.txt
@@ -20,4 +20,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-step-attribute-expected.txt b/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-step-attribute-expected.txt
index 722fad3..14e619c 100644
--- a/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-step-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/suggestion-picker/week-suggestion-picker-step-attribute-expected.txt
@@ -22,4 +22,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/text/input-appearance-maxlength-expected.txt b/third_party/blink/web_tests/fast/forms/text/input-appearance-maxlength-expected.txt
index 4e8d47ea..8d476d4 100644
--- a/third_party/blink/web_tests/fast/forms/text/input-appearance-maxlength-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/input-appearance-maxlength-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/text/input-maxlength-ime-completed-expected.txt b/third_party/blink/web_tests/fast/forms/text/input-maxlength-ime-completed-expected.txt
index 0da8598..5ab87df8 100644
--- a/third_party/blink/web_tests/fast/forms/text/input-maxlength-ime-completed-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/input-maxlength-ime-completed-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/text/input-maxlength-ime-preedit-expected.txt b/third_party/blink/web_tests/fast/forms/text/input-maxlength-ime-preedit-expected.txt
index 3fded9c..c8925ba 100644
--- a/third_party/blink/web_tests/fast/forms/text/input-maxlength-ime-preedit-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/input-maxlength-ime-preedit-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/text/input-paste-undo-expected.txt b/third_party/blink/web_tests/fast/forms/text/input-paste-undo-expected.txt
index 19c0c00..83c4828 100644
--- a/third_party/blink/web_tests/fast/forms/text/input-paste-undo-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/input-paste-undo-expected.txt
@@ -17,4 +17,3 @@
 
 
 Text to copy-paste-undo.
-
diff --git a/third_party/blink/web_tests/fast/forms/text/input-placeholder-paint-order-expected.txt b/third_party/blink/web_tests/fast/forms/text/input-placeholder-paint-order-expected.txt
index 78ed392..d17bc89 100644
--- a/third_party/blink/web_tests/fast/forms/text/input-placeholder-paint-order-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/input-placeholder-paint-order-expected.txt
@@ -1,3 +1 @@
 The green caret in the following text box should painted over the red placeholder text.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/text/input-selection-hidden-expected.txt b/third_party/blink/web_tests/fast/forms/text/input-selection-hidden-expected.txt
index 9e7af19..2f84a622 100644
--- a/third_party/blink/web_tests/fast/forms/text/input-selection-hidden-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/input-selection-hidden-expected.txt
@@ -1,7 +1,5 @@
 This tests the selection methods on the new text field when it is hidden and then made visible.
 
-
-
 setSelectionRange(3, 12)
 Passed.
 
diff --git a/third_party/blink/web_tests/fast/forms/text/input-set-composition-scroll-expected.txt b/third_party/blink/web_tests/fast/forms/text/input-set-composition-scroll-expected.txt
index b3902cc..25a335a 100644
--- a/third_party/blink/web_tests/fast/forms/text/input-set-composition-scroll-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/input-set-composition-scroll-expected.txt
@@ -1,5 +1,4 @@
 This tests whether an input field scrolls to the end of the new composition when setComposition is called.
 
-
 SUCCESS: input has scrolled to the end of the composition
 
diff --git a/third_party/blink/web_tests/fast/forms/text/input-setvalue-selection-expected.txt b/third_party/blink/web_tests/fast/forms/text/input-setvalue-selection-expected.txt
index 0c2d34a2..50f33cd 100644
--- a/third_party/blink/web_tests/fast/forms/text/input-setvalue-selection-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/input-setvalue-selection-expected.txt
@@ -1,5 +1,4 @@
 Test for bug 13960: JavaScript Form Validation issue on Banco do Brasil site.
 
-
 1. SUCCESS
 2. SUCCESS
diff --git a/third_party/blink/web_tests/fast/forms/text/text-field-setvalue-crash-expected.txt b/third_party/blink/web_tests/fast/forms/text/text-field-setvalue-crash-expected.txt
index 583ca9e..98ce5d9 100644
--- a/third_party/blink/web_tests/fast/forms/text/text-field-setvalue-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/text-field-setvalue-crash-expected.txt
@@ -1,3 +1 @@
 This test checks that undoing across a programmatic change to a text field's value doesn't cause crashes or assertion failures. If this test does not crash, it has passed.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/text/text-select-invisible-expected.txt b/third_party/blink/web_tests/fast/forms/text/text-select-invisible-expected.txt
index 23b76ae..6dfbdd0 100644
--- a/third_party/blink/web_tests/fast/forms/text/text-select-invisible-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/text-select-invisible-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/text/text-update-datalist-while-focused-expected.txt b/third_party/blink/web_tests/fast/forms/text/text-update-datalist-while-focused-expected.txt
index 4d2cbb2d5..93e27d8a2 100644
--- a/third_party/blink/web_tests/fast/forms/text/text-update-datalist-while-focused-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/text-update-datalist-while-focused-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/text/text-window-lost-focus-change-event-expected.txt b/third_party/blink/web_tests/fast/forms/text/text-window-lost-focus-change-event-expected.txt
index 11c2733..3986069 100644
--- a/third_party/blink/web_tests/fast/forms/text/text-window-lost-focus-change-event-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/text-window-lost-focus-change-event-expected.txt
@@ -10,4 +10,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/text/textfield-focus-out-expected.txt b/third_party/blink/web_tests/fast/forms/text/textfield-focus-out-expected.txt
index 9a33379f..07b57445 100644
--- a/third_party/blink/web_tests/fast/forms/text/textfield-focus-out-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/textfield-focus-out-expected.txt
@@ -1,4 +1,3 @@
 This is a test for https://bugs.webkit.org/show_bug.cgi?id=7363. Taking focus away from a text field that no longer had focus was crashing Safari.
 
-
 Success: finished the test without crashing.
diff --git a/third_party/blink/web_tests/fast/forms/text/textinput-not-fired-on-enter-in-input-expected.txt b/third_party/blink/web_tests/fast/forms/text/textinput-not-fired-on-enter-in-input-expected.txt
index 7b855561..423d3db9 100644
--- a/third_party/blink/web_tests/fast/forms/text/textinput-not-fired-on-enter-in-input-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/text/textinput-not-fired-on-enter-in-input-expected.txt
@@ -3,7 +3,6 @@
 
 
 
-
 SUCCESS
 
 Sending Enter to input element
diff --git a/third_party/blink/web_tests/fast/forms/textarea/paste-into-textarea-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/paste-into-textarea-expected.txt
index 08d16ef..5ed05d1 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/paste-into-textarea-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/paste-into-textarea-expected.txt
@@ -1,5 +1,3 @@
 This tests for a bug where text pasted into a textarea would appear one character before the position where it was pasted.
 
-
-
 Hooray, test succeeded.
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-and-mutation-events-appending-text-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-and-mutation-events-appending-text-expected.txt
index f679c1a..bd0f404b 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-and-mutation-events-appending-text-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-and-mutation-events-appending-text-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-arrow-navigation-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-arrow-navigation-expected.txt
index f7268e0..5d080a6 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-arrow-navigation-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-arrow-navigation-expected.txt
@@ -2,5 +2,4 @@
 
 If the test is successful and the cursor is at the end of the textarea, you should see the word 'Success' printed below
 
-
 Success
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-crlf-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-crlf-expected.txt
index 3a31d44f..007943e 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-crlf-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-crlf-expected.txt
@@ -2,8 +2,6 @@
 
 If the test passes, you should see three lines saying "Passed" below.
 
-
-
 Passed
 Passed
 Passed
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-default-value-leading-newline-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-default-value-leading-newline-expected.txt
index 7ef007cb..23a7064 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-default-value-leading-newline-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-default-value-leading-newline-expected.txt
@@ -2,8 +2,6 @@
 
 If the test passes, you should see a 3 lines saying "Passed" below.
 
-
-
 Passed
 Passed
 Passed
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-input-event-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-input-event-expected.txt
index 19f308db..21cf603e 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-input-event-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-input-event-expected.txt
@@ -13,4 +13,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-maxlength-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-maxlength-expected.txt
index 3477430..6c0f7e7 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-maxlength-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-maxlength-expected.txt
@@ -43,4 +43,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-metrics-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-metrics-expected.txt
index 6452c0a..fb29fbf 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-metrics-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-metrics-expected.txt
@@ -38,7 +38,7 @@
 PASS BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-').offsetWidth is 50
 PASS BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-').offsetHeight is 50
 PASS BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-').scrollWidth is 31
-PASS BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-').scrollHeight is 104
+FAIL BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-').scrollHeight should be 104. Was 102.
 
 
 Properties = innerHTML: "A", disabled: "true",
@@ -56,7 +56,7 @@
 PASS BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-disabled-true-').offsetWidth is 50
 PASS BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-disabled-true-').offsetHeight is 50
 PASS BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-disabled-true-').scrollWidth is 31
-PASS BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-disabled-true-').scrollHeight is 104
+FAIL BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-disabled-true-').scrollHeight should be 104. Was 102.
 
 
 Properties = innerHTML: "A", style: "padding:8px",
@@ -92,7 +92,7 @@
 PASS BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-rows-10-').offsetWidth is 50
 PASS BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-rows-10-').offsetHeight is 50
 PASS BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-rows-10-').scrollWidth is 31
-PASS BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-rows-10-').scrollHeight is 104
+FAIL BackCompatdoc.getElementById('-innerHTML-AAAAAAAAA-rows-10-').scrollHeight should be 104. Was 102.
 
 
 Testing CSS1Compat document.
@@ -129,7 +129,7 @@
 PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-').offsetWidth is 56
 PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-').offsetHeight is 56
 PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-').scrollWidth is 37
-PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-').scrollHeight is 64
+FAIL CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-').scrollHeight should be 64. Was 104.
 
 
 Properties = innerHTML: "A", disabled: "true",
@@ -147,7 +147,7 @@
 PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-disabled-true-').offsetWidth is 56
 PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-disabled-true-').offsetHeight is 56
 PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-disabled-true-').scrollWidth is 37
-PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-disabled-true-').scrollHeight is 64
+FAIL CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-disabled-true-').scrollHeight should be 64. Was 104.
 
 
 Properties = innerHTML: "A", style: "padding:8px",
@@ -165,7 +165,7 @@
 PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-style-padding-8px-').offsetWidth is 68
 PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-style-padding-8px-').offsetHeight is 68
 PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-style-padding-8px-').scrollWidth is 49
-PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-style-padding-8px-').scrollHeight is 76
+FAIL CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-style-padding-8px-').scrollHeight should be 76. Was 116.
 
 
 Properties = innerHTML: "A", rows: "10",
@@ -183,11 +183,10 @@
 PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-rows-10-').offsetWidth is 56
 PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-rows-10-').offsetHeight is 56
 PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-rows-10-').scrollWidth is 37
-PASS CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-rows-10-').scrollHeight is 64
+FAIL CSS1Compatdoc.getElementById('-innerHTML-AAAAAAAAA-rows-10-').scrollHeight should be 64. Was 104.
 
 
 PASS successfullyParsed is true
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-minlength-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-minlength-expected.txt
index ed8c92c..ce55b84d 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-minlength-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-minlength-expected.txt
@@ -22,4 +22,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-placeholder-paint-order-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-placeholder-paint-order-expected.txt
index 78ed392..d17bc89 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-placeholder-paint-order-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-placeholder-paint-order-expected.txt
@@ -1,3 +1 @@
 The green caret in the following text box should painted over the red placeholder text.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-placeholder-relayout-assertion-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-placeholder-relayout-assertion-expected.txt
index 6cf07c1f..652296a 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-placeholder-relayout-assertion-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-placeholder-relayout-assertion-expected.txt
@@ -1,5 +1,4 @@
 PASS if not crashed.
 
 >
-
 000000AA00A000A0A0A00A0000A0A00AAAAAA00AAAAAAA0A0AA00A00A000A0AA000AA0
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-scrollbar-height-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-scrollbar-height-expected.txt
index ec63e93..518ae68 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-scrollbar-height-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-scrollbar-height-expected.txt
@@ -2,5 +2,5 @@
 
 This test passes if the list item below, bordered in blue, has no vertical scrollbar.
 
-list item
+ list item
 This test: PASSED!
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-setrangetext-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-setrangetext-expected.txt
index 3795a4e..fa620a1 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-setrangetext-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-setrangetext-expected.txt
@@ -262,4 +262,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-submit-crash-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-submit-crash-expected.txt
index a173c906..72f67bb 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-submit-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-submit-crash-expected.txt
@@ -1,6 +1,5 @@
 This tests that a display:none textarea doesn't crash when submitted in a form.
 
-
 PASS: You didn't crash.
 Submitted form value: ?value=123456789
 
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-textlength-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-textlength-expected.txt
index f2e60607..48029f6 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-textlength-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-textlength-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/textarea/textarea-wrap-attribute-expected.txt b/third_party/blink/web_tests/fast/forms/textarea/textarea-wrap-attribute-expected.txt
index 50c0ac6..99d2b68 100644
--- a/third_party/blink/web_tests/fast/forms/textarea/textarea-wrap-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textarea/textarea-wrap-attribute-expected.txt
@@ -27,4 +27,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/textfield-to-password-on-focus-expected.txt b/third_party/blink/web_tests/fast/forms/textfield-to-password-on-focus-expected.txt
index e17993c..baa1eb2 100644
--- a/third_party/blink/web_tests/fast/forms/textfield-to-password-on-focus-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/textfield-to-password-on-focus-expected.txt
@@ -1,7 +1,6 @@
 Hit Tab key to focus input field.
 Type some text.
 
-
 Test for Bug 18900: Password field has focus but can't type text (i.rememberthemilk.com)
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-change-type-on-focus-3-expected.txt b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-change-type-on-focus-3-expected.txt
index b8a6cc2..37c0991 100644
--- a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-change-type-on-focus-3-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-change-type-on-focus-3-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-change-type-on-focus-expected.txt b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-change-type-on-focus-expected.txt
index 0f3ffdb..063dade2 100644
--- a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-change-type-on-focus-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-change-type-on-focus-expected.txt
@@ -2,7 +2,6 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-
 PASS Not crashed.
 PASS mouseDownCount is 1
 PASS successfullyParsed is true
diff --git a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-choose-default-value-after-set-value-expected.txt b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-choose-default-value-after-set-value-expected.txt
index ddadb567..2582f316 100644
--- a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-choose-default-value-after-set-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-choose-default-value-after-set-value-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-clearbutton-change-and-input-events-expected.txt b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-clearbutton-change-and-input-events-expected.txt
index 0c300aa..fbc53041 100644
--- a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-clearbutton-change-and-input-events-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-clearbutton-change-and-input-events-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-fallback-format-expected.txt b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-fallback-format-expected.txt
index a89f54a..e9980e4e 100644
--- a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-fallback-format-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-fallback-format-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-focus-expected.txt b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-focus-expected.txt
index f8c3739..d5b94ca9 100644
--- a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-focus-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-focus-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-mouse-events-expected.txt b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-mouse-events-expected.txt
index ce6410b..fefbb7c 100644
--- a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-mouse-events-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-mouse-events-expected.txt
@@ -7,7 +7,6 @@
 Test following mouse actions:
 Mouse click to focus field
 Mouse click on spin button
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-narrow-width-scroll-expected.txt b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-narrow-width-scroll-expected.txt
index 69f08c7..829a48b7 100644
--- a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-narrow-width-scroll-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-narrow-width-scroll-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-open-picker-key-bindings-expected.txt b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-open-picker-key-bindings-expected.txt
index f891364..435ffcf 100644
--- a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-open-picker-key-bindings-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-open-picker-key-bindings-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-preserve-value-after-history-back-expected.txt b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-preserve-value-after-history-back-expected.txt
index 92dbb57..606dabd 100644
--- a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-preserve-value-after-history-back-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-preserve-value-after-history-back-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-validity-badinput-expected.txt b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-validity-badinput-expected.txt
index 6ef1a50..74fe32e 100644
--- a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-validity-badinput-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-validity-badinput-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-value-set-empty-expected.txt b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-value-set-empty-expected.txt
index 581f83952..4ccefe38 100644
--- a/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-value-set-empty-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time-multiple-fields/time-multiple-fields-value-set-empty-expected.txt
@@ -17,4 +17,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/time/time-input-type-expected.txt b/third_party/blink/web_tests/fast/forms/time/time-input-type-expected.txt
index 8ec2407..7bf7e1d 100644
--- a/third_party/blink/web_tests/fast/forms/time/time-input-type-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time/time-input-type-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/time/time-setrangetext-expected.txt b/third_party/blink/web_tests/fast/forms/time/time-setrangetext-expected.txt
index bb8ad41..7d9df39 100644
--- a/third_party/blink/web_tests/fast/forms/time/time-setrangetext-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time/time-setrangetext-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/time/time-validity-stepmismatch-expected.txt b/third_party/blink/web_tests/fast/forms/time/time-validity-stepmismatch-expected.txt
index 7269a0b..80409592 100644
--- a/third_party/blink/web_tests/fast/forms/time/time-validity-stepmismatch-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/time/time-validity-stepmismatch-expected.txt
@@ -36,4 +36,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/tooLong-check-on-cloned-textcontrol-expected.txt b/third_party/blink/web_tests/fast/forms/tooLong-check-on-cloned-textcontrol-expected.txt
index 25229ae1..6a8510f 100644
--- a/third_party/blink/web_tests/fast/forms/tooLong-check-on-cloned-textcontrol-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/tooLong-check-on-cloned-textcontrol-expected.txt
@@ -2,9 +2,7 @@
 
 TEST COMPLETE
 
-
 Input : validity.tooLong is equal for node and cloned node=true
 
-
 Textarea: validity.tooLong is equal for node and cloned node=true
 
diff --git a/third_party/blink/web_tests/fast/forms/validation-bubble-appearance-iframe-expected.txt b/third_party/blink/web_tests/fast/forms/validation-bubble-appearance-iframe-expected.txt
index 50e0f46..18de115f 100644
--- a/third_party/blink/web_tests/fast/forms/validation-bubble-appearance-iframe-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/validation-bubble-appearance-iframe-expected.txt
@@ -1,3 +1 @@
 Check if a validation bubble is shown over IFRAME boundary.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/validation-bubble-appearance-rtl-ui-expected.txt b/third_party/blink/web_tests/fast/forms/validation-bubble-appearance-rtl-ui-expected.txt
index 98cf1f8..bd9be52 100644
--- a/third_party/blink/web_tests/fast/forms/validation-bubble-appearance-rtl-ui-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/validation-bubble-appearance-rtl-ui-expected.txt
@@ -1,3 +1 @@
 Check if a validation bubble is shown at a correct position in RTL UI.
-
-
diff --git a/third_party/blink/web_tests/fast/forms/validity-property-expected.txt b/third_party/blink/web_tests/fast/forms/validity-property-expected.txt
index e55b2d70..bbc648a 100644
--- a/third_party/blink/web_tests/fast/forms/validity-property-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/validity-property-expected.txt
@@ -42,4 +42,4 @@
 
 TEST COMPLETE
 
-   
+    
diff --git a/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-choose-default-value-after-set-value-expected.txt b/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-choose-default-value-after-set-value-expected.txt
index 0ce1d786..13b82b1a 100644
--- a/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-choose-default-value-after-set-value-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-choose-default-value-after-set-value-expected.txt
@@ -14,4 +14,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-clearbutton-change-and-input-events-expected.txt b/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-clearbutton-change-and-input-events-expected.txt
index 0c42544..cb9a32b 100644
--- a/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-clearbutton-change-and-input-events-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-clearbutton-change-and-input-events-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-fallback-format-expected.txt b/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-fallback-format-expected.txt
index a3f9b2e..2904b4c8 100644
--- a/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-fallback-format-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-fallback-format-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-mouse-events-expected.txt b/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-mouse-events-expected.txt
index 98ad7af..ac18945 100644
--- a/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-mouse-events-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-mouse-events-expected.txt
@@ -7,7 +7,6 @@
 Test following mouse actions:
 Mouse click to focus each of sub-fields
 Mouse click on the spin button to update each of sub-fields
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-preserve-value-after-history-back-expected.txt b/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-preserve-value-after-history-back-expected.txt
index af03654..9a34a9a 100644
--- a/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-preserve-value-after-history-back-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-preserve-value-after-history-back-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-validity-badinput-expected.txt b/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-validity-badinput-expected.txt
index 48c122c..9af512c 100644
--- a/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-validity-badinput-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/week-multiple-fields/week-multiple-fields-validity-badinput-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/week/ValidityState-stepMismatch-week-expected.txt b/third_party/blink/web_tests/fast/forms/week/ValidityState-stepMismatch-week-expected.txt
index b506069..bdd4d70a 100644
--- a/third_party/blink/web_tests/fast/forms/week/ValidityState-stepMismatch-week-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/week/ValidityState-stepMismatch-week-expected.txt
@@ -35,4 +35,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/week/week-input-type-expected.txt b/third_party/blink/web_tests/fast/forms/week/week-input-type-expected.txt
index 75814db..d1f5716 100644
--- a/third_party/blink/web_tests/fast/forms/week/week-input-type-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/week/week-input-type-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/forms/xss-auditor-doesnt-crash-on-post-submit-expected.txt b/third_party/blink/web_tests/fast/forms/xss-auditor-doesnt-crash-on-post-submit-expected.txt
index 83123c61..b31ab04 100644
--- a/third_party/blink/web_tests/fast/forms/xss-auditor-doesnt-crash-on-post-submit-expected.txt
+++ b/third_party/blink/web_tests/fast/forms/xss-auditor-doesnt-crash-on-post-submit-expected.txt
@@ -1,5 +1,4 @@
 This tests that no assertions are thrown when POST submitting a form.
-
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/blink/web_tests/fast/frames/detach-frame-nested-no-crash-expected.txt b/third_party/blink/web_tests/fast/frames/detach-frame-nested-no-crash-expected.txt
index 734e426..42ffaa6 100644
--- a/third_party/blink/web_tests/fast/frames/detach-frame-nested-no-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/detach-frame-nested-no-crash-expected.txt
@@ -6,4 +6,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/empty-frame-document-expected.txt b/third_party/blink/web_tests/fast/frames/empty-frame-document-expected.txt
index 49ae0c8..b380bca 100644
--- a/third_party/blink/web_tests/fast/frames/empty-frame-document-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/empty-frame-document-expected.txt
@@ -1,3 +1 @@
 Test for https://bugs.webkit.org/show_bug.cgi?id=7293 REGRESSION: Using Javascript Bookmarklets that reference location.href on a blank tab crashes WebKit. Tests that empty frames have a document. If the test passes it will not crash.
-
-
diff --git a/third_party/blink/web_tests/fast/frames/frame-dimensions-before-parent-layout-expected.txt b/third_party/blink/web_tests/fast/frames/frame-dimensions-before-parent-layout-expected.txt
index 73a7045..c41edde 100644
--- a/third_party/blink/web_tests/fast/frames/frame-dimensions-before-parent-layout-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/frame-dimensions-before-parent-layout-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/frameset-frameborder-overrides-border-expected.txt b/third_party/blink/web_tests/fast/frames/frameset-frameborder-overrides-border-expected.txt
index 8339033..b4d3b0f 100644
--- a/third_party/blink/web_tests/fast/frames/frameset-frameborder-overrides-border-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/frameset-frameborder-overrides-border-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/iframe-js-url-clientWidth-expected.txt b/third_party/blink/web_tests/fast/frames/iframe-js-url-clientWidth-expected.txt
index 70071825..4dff998 100644
--- a/third_party/blink/web_tests/fast/frames/iframe-js-url-clientWidth-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/iframe-js-url-clientWidth-expected.txt
@@ -3,4 +3,3 @@
 PASS: iframe.frameElement.clientWidth should be 250 and is.
 PASS: iframe.frameElement.clientHeight should be 250 and is.
 
-
diff --git a/third_party/blink/web_tests/fast/frames/iframe-name-and-id-expected.txt b/third_party/blink/web_tests/fast/frames/iframe-name-and-id-expected.txt
index 8ffa9e76..3ab01819 100644
--- a/third_party/blink/web_tests/fast/frames/iframe-name-and-id-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/iframe-name-and-id-expected.txt
@@ -2,8 +2,6 @@
 
 Related bug: rdar://problem/4170960 https://bugs.webkit.org/show_bug.cgi?id=3952 iFrame name and id information incorrectly returned
 
-
-
 frames[0].name (should be frame0_name): frame0_name
 
 frames[0].id (should be undefined): undefined
diff --git a/third_party/blink/web_tests/fast/frames/iframe-no-name-expected.txt b/third_party/blink/web_tests/fast/frames/iframe-no-name-expected.txt
index fd1f682..369ab492 100644
--- a/third_party/blink/web_tests/fast/frames/iframe-no-name-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/iframe-no-name-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/iframe-no-src-local-origin-allow-expected.txt b/third_party/blink/web_tests/fast/frames/iframe-no-src-local-origin-allow-expected.txt
index 652a8f03..19e075b 100644
--- a/third_party/blink/web_tests/fast/frames/iframe-no-src-local-origin-allow-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/iframe-no-src-local-origin-allow-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/iframe-no-src-set-location-expected.txt b/third_party/blink/web_tests/fast/frames/iframe-no-src-set-location-expected.txt
index 8c15335..3a3dfa6 100644
--- a/third_party/blink/web_tests/fast/frames/iframe-no-src-set-location-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/iframe-no-src-set-location-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/iframe-scale-applied-twice-expected.txt b/third_party/blink/web_tests/fast/frames/iframe-scale-applied-twice-expected.txt
index 9976b120..7ef22e9 100644
--- a/third_party/blink/web_tests/fast/frames/iframe-scale-applied-twice-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/iframe-scale-applied-twice-expected.txt
@@ -1,3 +1 @@
 PASS
-
-
diff --git a/third_party/blink/web_tests/fast/frames/iframe-set-same-location-expected.txt b/third_party/blink/web_tests/fast/frames/iframe-set-same-location-expected.txt
index 3129976..ccf9a4b 100644
--- a/third_party/blink/web_tests/fast/frames/iframe-set-same-location-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/iframe-set-same-location-expected.txt
@@ -3,5 +3,3 @@
 Testing that setting contentWindow.location.href to the same value works
 
 SUCCESS
-
-
diff --git a/third_party/blink/web_tests/fast/frames/iframe-set-same-src-expected.txt b/third_party/blink/web_tests/fast/frames/iframe-set-same-src-expected.txt
index a9f309f..62429628 100644
--- a/third_party/blink/web_tests/fast/frames/iframe-set-same-src-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/iframe-set-same-src-expected.txt
@@ -1,5 +1,3 @@
 Test for bug 3400: setting the .src of an iframe to the same value does not reload page.
 
 SUCCESS
-
-
diff --git a/third_party/blink/web_tests/fast/frames/iframe-window-focus-expected.txt b/third_party/blink/web_tests/fast/frames/iframe-window-focus-expected.txt
index ff3abd6a..9ce984f6 100644
--- a/third_party/blink/web_tests/fast/frames/iframe-window-focus-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/iframe-window-focus-expected.txt
@@ -1,4 +1,3 @@
 This tests that focusing an editable iframe's window works correctly and allows text and newlines to be entered.
-
 TEST
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/location-put-after-removal-expected.txt b/third_party/blink/web_tests/fast/frames/location-put-after-removal-expected.txt
index aee6f7e..e0c6fec 100644
--- a/third_party/blink/web_tests/fast/frames/location-put-after-removal-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/location-put-after-removal-expected.txt
@@ -2,5 +2,4 @@
 
 If the test passes, you'll see a PASS message below.
 
-
 PASS: You didn't crash.
diff --git a/third_party/blink/web_tests/fast/frames/open-then-unload-expected.txt b/third_party/blink/web_tests/fast/frames/open-then-unload-expected.txt
index 92967c3..60a90b8 100644
--- a/third_party/blink/web_tests/fast/frames/open-then-unload-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/open-then-unload-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/reparented-iframe-cleared-contentWindow-expected.txt b/third_party/blink/web_tests/fast/frames/reparented-iframe-cleared-contentWindow-expected.txt
index 1fb01ccb..06f63c2 100644
--- a/third_party/blink/web_tests/fast/frames/reparented-iframe-cleared-contentWindow-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/reparented-iframe-cleared-contentWindow-expected.txt
@@ -3,5 +3,3 @@
 
 TEST COMPLETE
 
-
-
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-about-blank-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-about-blank-expected.txt
index 635c65c..2c42692 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-about-blank-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-about-blank-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-01-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-01-expected.txt
index 8b8d7a7..3599781 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-01-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-01-expected.txt
@@ -1,5 +1,4 @@
 CONSOLE ERROR: line 7: Blocked form submission to 'javascript:top.disallowedFormSubmitted();' because the form's frame is sandboxed and the 'allow-forms' permission is not set.
 Plain, proper sandbox attributes.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-02-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-02-expected.txt
index d4a8268..bea0e5a 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-02-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-02-expected.txt
@@ -1,5 +1,4 @@
 CONSOLE ERROR: line 7: Blocked form submission to 'javascript:top.disallowedFormSubmitted();' because the form's frame is sandboxed and the 'allow-forms' permission is not set.
 Line feed characters before and after attribute value
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-03-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-03-expected.txt
index f7a72451..4f5bcfeb 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-03-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-03-expected.txt
@@ -2,5 +2,4 @@
 CONSOLE ERROR: line 7: Blocked form submission to 'javascript:top.disallowedFormSubmitted();' because the form's frame is sandboxed and the 'allow-forms' permission is not set.
 Ridiculously long, invalid text (well, for these purposes at least) with non-ASCII characters surrounding attribute value
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-04-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-04-expected.txt
index 2b8c5cd..75482e8c 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-04-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-04-expected.txt
@@ -1,5 +1,4 @@
 CONSOLE ERROR: line 7: Blocked form submission to 'javascript:top.disallowedFormSubmitted();' because the form's frame is sandboxed and the 'allow-forms' permission is not set.
 Tab characters before and after attribute value
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-05-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-05-expected.txt
index 5796b3e7..b81c210 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-05-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-05-expected.txt
@@ -1,5 +1,4 @@
 CONSOLE ERROR: line 7: Blocked form submission to 'javascript:top.disallowedFormSubmitted();' because the form's frame is sandboxed and the 'allow-forms' permission is not set.
 Mixed case
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-06-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-06-expected.txt
index a3cb63f8..e48760de 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-06-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-06-expected.txt
@@ -2,5 +2,4 @@
 CONSOLE ERROR: Blocked script execution in 'sandboxed-iframe-attribute-parsing-disallowed.html' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.
 Misspelling.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-07-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-07-expected.txt
index b9b795d4..2a771b3 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-07-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-07-expected.txt
@@ -2,5 +2,4 @@
 CONSOLE ERROR: Blocked script execution in 'sandboxed-iframe-attribute-parsing-disallowed.html' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.
 Misspelling.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-08-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-08-expected.txt
index 3d4fa5c..bd587d3e 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-08-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-08-expected.txt
@@ -2,5 +2,4 @@
 CONSOLE ERROR: Blocked script execution in 'sandboxed-iframe-attribute-parsing-disallowed.html' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.
 Misspelling.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-09-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-09-expected.txt
index 5789782..6f590b1 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-09-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-09-expected.txt
@@ -2,5 +2,4 @@
 CONSOLE ERROR: Blocked script execution in 'sandboxed-iframe-attribute-parsing-disallowed.html' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.
 Misspelling.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-10-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-10-expected.txt
index 956dbdc2..3cff5b52 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-10-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-10-expected.txt
@@ -2,5 +2,4 @@
 CONSOLE ERROR: Blocked script execution in 'sandboxed-iframe-attribute-parsing-disallowed.html' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.
 Misspelling.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-11-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-11-expected.txt
index ce9b3460..fb8c84f 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-11-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-11-expected.txt
@@ -2,5 +2,4 @@
 CONSOLE ERROR: Blocked script execution in 'sandboxed-iframe-attribute-parsing-disallowed.html' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.
 Misspelling.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-12-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-12-expected.txt
index 236f4ce..7a2b150 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-12-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-12-expected.txt
@@ -2,5 +2,4 @@
 CONSOLE ERROR: Blocked script execution in 'sandboxed-iframe-attribute-parsing-disallowed.html' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.
 Misspelling.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-13-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-13-expected.txt
index e3ba4c85..032f686 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-13-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-13-expected.txt
@@ -2,5 +2,4 @@
 CONSOLE ERROR: Blocked script execution in 'sandboxed-iframe-attribute-parsing-disallowed.html' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.
 Misspelling.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-14-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-14-expected.txt
index bb2d42e..bc45faf 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-14-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-attribute-parsing-14-expected.txt
@@ -1,5 +1,4 @@
 CONSOLE ERROR: Blocked script execution in 'sandboxed-iframe-attribute-parsing-disallowed.html' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.
 Full sandbox.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-autofocus-denied-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-autofocus-denied-expected.txt
index faf950d..63db49e 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-autofocus-denied-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-autofocus-denied-expected.txt
@@ -1,5 +1,3 @@
 CONSOLE ERROR: line 32: Blocked autofocusing on a form control because the form's frame is sandboxed and the 'allow-scripts' permission is not set.
 CONSOLE MESSAGE: line 16: PASS: The input element is not focused.
 This test passes if the input element in the sandboxed frame is not automatically focused upon, as it should be blocked by the sandboxed scripts flag. A console warning to that effect should also be present.
-
-
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-01-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-01-expected.txt
index c9754b4..e76d57b 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-01-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-01-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-02-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-02-expected.txt
index 1ae4c58..78b1c80d 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-02-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-02-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-03-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-03-expected.txt
index 47f8d03..b9e487e 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-03-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-03-expected.txt
@@ -13,4 +13,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-04-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-04-expected.txt
index 9ad7be40..e9f8c65 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-04-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-04-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-05-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-05-expected.txt
index 90ab0f9..e346914 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-05-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-scripting-05-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-workers-expected.txt b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-workers-expected.txt
index 720d981b..54b21b0 100644
--- a/third_party/blink/web_tests/fast/frames/sandboxed-iframe-workers-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/sandboxed-iframe-workers-expected.txt
@@ -1,8 +1,6 @@
 CONSOLE MESSAGE: line 7: PASS: SharedWorker creation threw 'SecurityError: Failed to construct 'SharedWorker': Access to shared workers is denied to origin 'null'.'.
 This test verifies that shared workers are not available in a sandboxed iframe.
 
-
-
 --------
 Frame: '<!--framePath //<!--frame0-->-->'
 --------
diff --git a/third_party/blink/web_tests/fast/frames/srcdoc/setting-src-does-nothing-expected.txt b/third_party/blink/web_tests/fast/frames/srcdoc/setting-src-does-nothing-expected.txt
index d19c5fee6..89bd812 100644
--- a/third_party/blink/web_tests/fast/frames/srcdoc/setting-src-does-nothing-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/srcdoc/setting-src-does-nothing-expected.txt
@@ -1,7 +1,5 @@
 This test ensures that setting the src attribute does not cause the document inside the iframe to change.
 
-
-
 --------
 Frame: '<!--framePath //<!--frame0-->-->'
 --------
diff --git a/third_party/blink/web_tests/fast/frames/srcdoc/setting-srcdoc-reloads-document-expected.txt b/third_party/blink/web_tests/fast/frames/srcdoc/setting-srcdoc-reloads-document-expected.txt
index 8e8aeb836..adeee3e 100644
--- a/third_party/blink/web_tests/fast/frames/srcdoc/setting-srcdoc-reloads-document-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/srcdoc/setting-srcdoc-reloads-document-expected.txt
@@ -1,4 +1,3 @@
 This test ensures that setting the srcdoc attribute iframe causes the document to change to the current value of the srcdoc attribute on the iframe.
 
 PASS
-
diff --git a/third_party/blink/web_tests/fast/frames/subframe-load-js-url-crash-expected.txt b/third_party/blink/web_tests/fast/frames/subframe-load-js-url-crash-expected.txt
index 1042c767..0383162 100644
--- a/third_party/blink/web_tests/fast/frames/subframe-load-js-url-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/frames/subframe-load-js-url-crash-expected.txt
@@ -1,2 +1 @@
 Test passes if it does not crash.
-
diff --git a/third_party/blink/web_tests/fast/gradients/css3-color-stop-units-expected.txt b/third_party/blink/web_tests/fast/gradients/css3-color-stop-units-expected.txt
index 6f76717..6c158c3 100644
--- a/third_party/blink/web_tests/fast/gradients/css3-color-stop-units-expected.txt
+++ b/third_party/blink/web_tests/fast/gradients/css3-color-stop-units-expected.txt
@@ -2,9 +2,7 @@
  
 Green stop should coincide with the end of the black line
  
-
 Should see a sharp green/yellow transition on the right, at the end of the line
  
-
 Should see a sharp green/yellow transition in the right box
  
diff --git a/third_party/blink/web_tests/fast/gradients/unprefixed-color-stop-units-expected.txt b/third_party/blink/web_tests/fast/gradients/unprefixed-color-stop-units-expected.txt
index b714b287..0beed60f 100644
--- a/third_party/blink/web_tests/fast/gradients/unprefixed-color-stop-units-expected.txt
+++ b/third_party/blink/web_tests/fast/gradients/unprefixed-color-stop-units-expected.txt
@@ -1,7 +1,5 @@
 
 
  
-
  
-
  
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-change-dynamically-from-js-1x-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-change-dynamically-from-js-1x-expected.txt
index f767750..44f7046 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-change-dynamically-from-js-1x-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-change-dynamically-from-js-1x-expected.txt
@@ -5,4 +5,3 @@
 PASS internals.isPreloaded("resources/green-400-px-square.png") is false
 PASS document.getElementById("foo").clientWidth==100 is true
 This test passes if this img tag below is a blue square when the scale factor is 1. It ensures that attributes can be changed dynamically from javascript, and that only the correct resource is loaded.
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-change-dynamically-from-js-2x-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-change-dynamically-from-js-2x-expected.txt
index 05e46b6..6b7dc05 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-change-dynamically-from-js-2x-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-change-dynamically-from-js-2x-expected.txt
@@ -4,4 +4,3 @@
 
 PASS document.getElementById("foo").clientWidth==200 is true
 This test passes if this img tag below is a green square when the scale factor is 2. It ensures that attributes can be changed dynamically from javascript, and that only the correct resource is loaded.
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-change-dynamically-src-first-2x-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-change-dynamically-src-first-2x-expected.txt
index 05e46b6..6b7dc05 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-change-dynamically-src-first-2x-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-change-dynamically-src-first-2x-expected.txt
@@ -4,4 +4,3 @@
 
 PASS document.getElementById("foo").clientWidth==200 is true
 This test passes if this img tag below is a green square when the scale factor is 2. It ensures that attributes can be changed dynamically from javascript, and that only the correct resource is loaded.
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-change-resource-dpr-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-change-resource-dpr-expected.txt
index f322993..5532989 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-change-resource-dpr-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-change-resource-dpr-expected.txt
@@ -5,4 +5,3 @@
 PASS document.getElementById("foo").clientWidth==200 is true
 PASS document.getElementById("foo").clientWidth==400 is false
 This test passes if this img tag below is a green square when the scale factor is 2. It ensures that attributes can be changed dynamically from javascript, and that only the correct resource is loaded.
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-data-src-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-data-src-expected.txt
index a9319bd2..5c05e66 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-data-src-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-data-src-expected.txt
@@ -4,4 +4,3 @@
 
 PASS document.getElementById("foo").clientWidth==150 is true
 This test passes if the image below looks like a 2x2 grid (yellow, gray, light green, dark green).
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-data-srcset-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-data-srcset-expected.txt
index abe6b75..78f28da2 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-data-srcset-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-data-srcset-expected.txt
@@ -5,4 +5,3 @@
 PASS document.getElementById("foo").clientWidth==75 is true
 This test passes if the image below looks like a 2x2 grid (yellow, gray, light green, dark green). In this case the srcset attribute has a base64 url, with the comma escaped.
 The image is displayed in a width of 75px, since the 2x resource gets picked (as the highest density resource current available.
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-density-and-width-descriptors-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-density-and-width-descriptors-expected.txt
index 88aafac..bcf53c8d 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-density-and-width-descriptors-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-density-and-width-descriptors-expected.txt
@@ -12,4 +12,3 @@
 
 PASS document.getElementById("foo").clientWidth==100 is true
 This test passes if the image below is a blue square, since the srcset resource doesn't load, as it has both 'w' and 'x' descriptors.
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-dpr-zoom-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-dpr-zoom-expected.txt
index e1c17ad..50611c84 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-dpr-zoom-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-dpr-zoom-expected.txt
@@ -4,4 +4,3 @@
 
 PASS Math.abs(document.getElementById("foo").clientWidth - 200) < 0.1 is true
 This test passes if the image below is a 200px wide green square when the deviceScaleFactor is 1, since the user has zoomed in.
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-fraction-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-fraction-expected.txt
index 546c554..882ba97 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-fraction-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-fraction-expected.txt
@@ -4,4 +4,3 @@
 
 PASS document.getElementById("testimg").clientWidth==200 is true
 This test passes if the srcset resource is loaded and displayed as the image
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-ignore-double-descriptor-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-ignore-double-descriptor-expected.txt
index 35ee8e1..b2a3e590 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-ignore-double-descriptor-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-ignore-double-descriptor-expected.txt
@@ -13,4 +13,3 @@
 PASS document.getElementById("foo").clientWidth==100 is false
 PASS document.getElementById("foo").clientWidth==200 is true
 This test passes if the image below says 2x with a greenish background even when the deviceScaleFactor is 1.
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-intrinsic-size-zero-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-intrinsic-size-zero-expected.txt
index f060e30a..1848d99 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-intrinsic-size-zero-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-intrinsic-size-zero-expected.txt
@@ -4,4 +4,3 @@
 
 PASS imgWidth is 33554432
 This test passes if the image is displayed with infinite dimensions.
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-invalid-inputs-except-one-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-invalid-inputs-except-one-expected.txt
index e115409..8c4e8b8 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-invalid-inputs-except-one-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-invalid-inputs-except-one-expected.txt
@@ -28,4 +28,3 @@
 
 PASS document.getElementById("foo").clientWidth==200 is true
 This test passes if the img tag below is a green square regardless of the scale factor. It ensures that invalid inputs are ignored and well-formed images are chosen regardless of their qualifiers, once they are the only candidate left
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-invalid-inputs-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-invalid-inputs-expected.txt
index 4de46de9..edb633df 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-invalid-inputs-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-invalid-inputs-expected.txt
@@ -4,4 +4,3 @@
 
 PASS did not load invalid inputs
 This test passes if this img tag below is empty and displays nothing. It ensures that the srcset attribute supports invalid inputs
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-nomodifier-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-nomodifier-expected.txt
index dd55aaa2..ec57541 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-nomodifier-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-nomodifier-expected.txt
@@ -4,4 +4,3 @@
 
 PASS document.getElementById("foo").clientWidth==150 is true
 This test passes if the image below is not empty. It ensures that a candidate without scale modifier get a default one
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-only-src-attribute-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-only-src-attribute-expected.txt
index 4100b739..776ecadc 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-only-src-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-only-src-attribute-expected.txt
@@ -4,4 +4,3 @@
 
 PASS document.getElementById("foo").clientWidth==400 is true
 This test passes if this img tag below is a green square when scale factor is 2. It ensures that the selection algorithm does not change the behavior of the src attribute, even with a scale factor greater than 1
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-remove-dynamically-from-js-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-remove-dynamically-from-js-expected.txt
index 44976f2e..aec3bc5 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-remove-dynamically-from-js-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-remove-dynamically-from-js-expected.txt
@@ -4,4 +4,3 @@
 
 PASS document.getElementById("foo").clientWidth==200 is true
 This test passes if this img tag below is a green square. It ensures that attributes can be removed dynamically from javascript
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-same-alternative-for-both-attributes-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-same-alternative-for-both-attributes-expected.txt
index e8162bac..3c14be3 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-same-alternative-for-both-attributes-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-same-alternative-for-both-attributes-expected.txt
@@ -5,4 +5,3 @@
 PASS internals.isPreloaded("resources/green-400-px-square.png") is false
 PASS document.getElementById("foo").clientWidth==100 is true
 This test passes if this img tag below is a blue square when the scale factor is 1. It ensures that when both source attributes has the same input alternative always the one from srcset is chosen
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-simple-1x-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-simple-1x-expected.txt
index 3e46920..9d99d39 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-simple-1x-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-simple-1x-expected.txt
@@ -4,4 +4,3 @@
 
 PASS document.getElementById("foo").clientWidth==400 is true
 This test passes if the image below says 1x with a reddish background when the deviceScaleFactor is 1, and if says 2x with a greenish background when the deviceScaleFactor is 2.
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-simple-2x-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-simple-2x-expected.txt
index d1dcd0a..7a708c8 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-simple-2x-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-simple-2x-expected.txt
@@ -4,4 +4,3 @@
 
 PASS document.getElementById("foo").clientWidth==200 is true
 This test passes if the image below says 1x with a reddish background when the deviceScaleFactor is 1, and if says 2x with a greenish background when the deviceScaleFactor is 2.
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-src-selection-1x-both-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-src-selection-1x-both-expected.txt
index cf9e2718..cfc9f9b 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-src-selection-1x-both-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-src-selection-1x-both-expected.txt
@@ -4,4 +4,3 @@
 
 PASS document.getElementById("foo").clientWidth==400 is true
 This test passes if the div below is a blue 100px square when the deviceScaleFactor is 1. It simply ensures that when both src and srcset are specified for the same DPR, srcset wins.
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-src-selection-1x-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-src-selection-1x-expected.txt
index b522ac5..c09b990 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-src-selection-1x-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-src-selection-1x-expected.txt
@@ -4,4 +4,3 @@
 
 PASS document.getElementById("foo").clientWidth==100 is true
 This test passes if the div below is a blue 100px square when the deviceScaleFactor is 1. It simply ensures that the src attribute is taken into account by the selection algorithm when this one is processing the images candidates
-
diff --git a/third_party/blink/web_tests/fast/hidpi/image-srcset-src-selection-2x-expected.txt b/third_party/blink/web_tests/fast/hidpi/image-srcset-src-selection-2x-expected.txt
index e59b2a62..4073e983 100644
--- a/third_party/blink/web_tests/fast/hidpi/image-srcset-src-selection-2x-expected.txt
+++ b/third_party/blink/web_tests/fast/hidpi/image-srcset-src-selection-2x-expected.txt
@@ -4,4 +4,3 @@
 
 PASS document.getElementById("foo").clientWidth==200 is true
 This test passes if the div below is a green 200px square when the deviceScaleFactor is 2. It simply ensures that the src attribute is taken into account by the selection algorithm when this one is processing the images candidates
-
diff --git a/third_party/blink/web_tests/fast/history/form-submit-in-frame-expected.txt b/third_party/blink/web_tests/fast/history/form-submit-in-frame-expected.txt
index 863685f..d1b96b4 100644
--- a/third_party/blink/web_tests/fast/history/form-submit-in-frame-expected.txt
+++ b/third_party/blink/web_tests/fast/history/form-submit-in-frame-expected.txt
@@ -1,7 +1,5 @@
 Tests that form submissions inside an iframe generate history entries.
 
-
-
 --------
 Frame: 'the-frame'
 --------
diff --git a/third_party/blink/web_tests/fast/history/form-submit-in-frame-via-onclick-expected.txt b/third_party/blink/web_tests/fast/history/form-submit-in-frame-via-onclick-expected.txt
index f52d2289..e6dac81 100644
--- a/third_party/blink/web_tests/fast/history/form-submit-in-frame-via-onclick-expected.txt
+++ b/third_party/blink/web_tests/fast/history/form-submit-in-frame-via-onclick-expected.txt
@@ -1,7 +1,5 @@
 Tests that form submissions (via an onclick handler) inside an iframe generate history entries.
 
-
-
 --------
 Frame: 'the-frame'
 --------
diff --git a/third_party/blink/web_tests/fast/history/history-back-forward-within-subframe-hash-expected.txt b/third_party/blink/web_tests/fast/history/history-back-forward-within-subframe-hash-expected.txt
index e9387ca2..69db01e78 100644
--- a/third_party/blink/web_tests/fast/history/history-back-forward-within-subframe-hash-expected.txt
+++ b/third_party/blink/web_tests/fast/history/history-back-forward-within-subframe-hash-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/history/history-back-initial-vs-final-url-expected.txt b/third_party/blink/web_tests/fast/history/history-back-initial-vs-final-url-expected.txt
index 351ec8f..de89dbd4 100644
--- a/third_party/blink/web_tests/fast/history/history-back-initial-vs-final-url-expected.txt
+++ b/third_party/blink/web_tests/fast/history/history-back-initial-vs-final-url-expected.txt
@@ -9,7 +9,6 @@
 Going back.
 Final URL loaded.
 
-
 --------
 Frame: '<!--framePath //<!--frame0-->-->'
 --------
diff --git a/third_party/blink/web_tests/fast/history/same-document-iframes-changing-fragment-expected.txt b/third_party/blink/web_tests/fast/history/same-document-iframes-changing-fragment-expected.txt
index 5b02695..8d709ce 100644
--- a/third_party/blink/web_tests/fast/history/same-document-iframes-changing-fragment-expected.txt
+++ b/third_party/blink/web_tests/fast/history/same-document-iframes-changing-fragment-expected.txt
@@ -14,7 +14,6 @@
 TEST COMPLETE
 
 
-
 --------
 Frame: 'iframe1'
 --------
diff --git a/third_party/blink/web_tests/fast/history/same-document-iframes-changing-pushstate-expected.txt b/third_party/blink/web_tests/fast/history/same-document-iframes-changing-pushstate-expected.txt
index c0e5147..2743caf 100644
--- a/third_party/blink/web_tests/fast/history/same-document-iframes-changing-pushstate-expected.txt
+++ b/third_party/blink/web_tests/fast/history/same-document-iframes-changing-pushstate-expected.txt
@@ -13,7 +13,6 @@
 TEST COMPLETE
 
 
-
 --------
 Frame: 'iframe1'
 --------
diff --git a/third_party/blink/web_tests/fast/html/adopt-parent-frame-expected.txt b/third_party/blink/web_tests/fast/html/adopt-parent-frame-expected.txt
index 3388867..b5eeef4 100644
--- a/third_party/blink/web_tests/fast/html/adopt-parent-frame-expected.txt
+++ b/third_party/blink/web_tests/fast/html/adopt-parent-frame-expected.txt
@@ -2,4 +2,3 @@
 
 Adopting parent frame: PASS
 Adopting grandparent frame: PASS
-
diff --git a/third_party/blink/web_tests/fast/html/crash-on-invalid-selection-index-expected.txt b/third_party/blink/web_tests/fast/html/crash-on-invalid-selection-index-expected.txt
index a0772fd..10240ce 100644
--- a/third_party/blink/web_tests/fast/html/crash-on-invalid-selection-index-expected.txt
+++ b/third_party/blink/web_tests/fast/html/crash-on-invalid-selection-index-expected.txt
@@ -1 +1,3 @@
+ 
+
 PASS if it does not crash in debug.
diff --git a/third_party/blink/web_tests/fast/html/import-node-into-quirks-document-expected.txt b/third_party/blink/web_tests/fast/html/import-node-into-quirks-document-expected.txt
index 95e89138..3a88106 100644
--- a/third_party/blink/web_tests/fast/html/import-node-into-quirks-document-expected.txt
+++ b/third_party/blink/web_tests/fast/html/import-node-into-quirks-document-expected.txt
@@ -9,5 +9,4 @@
 
 TEST COMPLETE
 
-
 caseSensitive
diff --git a/third_party/blink/web_tests/fast/html/imports/import-in-iframe-expected.txt b/third_party/blink/web_tests/fast/html/imports/import-in-iframe-expected.txt
index d2559b9..fbd6994a 100644
--- a/third_party/blink/web_tests/fast/html/imports/import-in-iframe-expected.txt
+++ b/third_party/blink/web_tests/fast/html/imports/import-in-iframe-expected.txt
@@ -5,4 +5,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/html/layout-runs-and-floats-crash-expected.txt b/third_party/blink/web_tests/fast/html/layout-runs-and-floats-crash-expected.txt
index 29853939..248f788a 100644
--- a/third_party/blink/web_tests/fast/html/layout-runs-and-floats-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/html/layout-runs-and-floats-crash-expected.txt
@@ -1 +1,3 @@
+ 
+
 This test passes if it doesn't crash
diff --git a/third_party/blink/web_tests/fast/html/select-dropdown-consistent-background-color-expected.txt b/third_party/blink/web_tests/fast/html/select-dropdown-consistent-background-color-expected.txt
index 9ecd5c6f..d19221234 100644
--- a/third_party/blink/web_tests/fast/html/select-dropdown-consistent-background-color-expected.txt
+++ b/third_party/blink/web_tests/fast/html/select-dropdown-consistent-background-color-expected.txt
@@ -1,12 +1,12 @@
 This test verifies that the dropdown background colors of <select> and <select size="0"|"1"> are consistent. You should see PASS below if test passes. Otherwise, FAIL shows up.
 PASS
-Default:
+Default: 
 Item 1
 Item 2
-Size=0:
+ Size=0: 
 Item 1
 Item 2
-Size=1:
+ Size=1: 
 Item 1
 Item 2
 
diff --git a/third_party/blink/web_tests/fast/inline/inline-box-adjust-position-crash-expected.txt b/third_party/blink/web_tests/fast/inline/inline-box-adjust-position-crash-expected.txt
index 0e585035..ab30141 100644
--- a/third_party/blink/web_tests/fast/inline/inline-box-adjust-position-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/inline/inline-box-adjust-position-crash-expected.txt
@@ -6,4 +6,4 @@
 
 
 
-PASS
+ PASS
diff --git a/third_party/blink/web_tests/fast/inline/inline-offsetLeft-relpos-expected.txt b/third_party/blink/web_tests/fast/inline/inline-offsetLeft-relpos-expected.txt
index 4d2ab9f..d39c1aa 100644
--- a/third_party/blink/web_tests/fast/inline/inline-offsetLeft-relpos-expected.txt
+++ b/third_party/blink/web_tests/fast/inline/inline-offsetLeft-relpos-expected.txt
@@ -1,6 +1,5 @@
 XX XX 
 XX
-
 XX
 XX
 PASS
diff --git a/third_party/blink/web_tests/fast/inline/inline-split-percent-height-object-crash-expected.txt b/third_party/blink/web_tests/fast/inline/inline-split-percent-height-object-crash-expected.txt
index 7e24c80..0383162 100644
--- a/third_party/blink/web_tests/fast/inline/inline-split-percent-height-object-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/inline/inline-split-percent-height-object-crash-expected.txt
@@ -1,3 +1 @@
 Test passes if it does not crash.
-
-
diff --git a/third_party/blink/web_tests/fast/inline/inline-width-containing-collapsed-whitespace-and-image-in-float-expected.txt b/third_party/blink/web_tests/fast/inline/inline-width-containing-collapsed-whitespace-and-image-in-float-expected.txt
index f6dddf48..5b18bb6 100644
--- a/third_party/blink/web_tests/fast/inline/inline-width-containing-collapsed-whitespace-and-image-in-float-expected.txt
+++ b/third_party/blink/web_tests/fast/inline/inline-width-containing-collapsed-whitespace-and-image-in-float-expected.txt
@@ -7,4 +7,3 @@
 TEST COMPLETE
 
 PASS document.querySelector('li').getBoundingClientRect().width is 32
-
diff --git a/third_party/blink/web_tests/fast/inline/out-of-flow-objects-and-whitespace-after-empty-inline-expected.txt b/third_party/blink/web_tests/fast/inline/out-of-flow-objects-and-whitespace-after-empty-inline-expected.txt
index 74b87f5..90e0127 100644
--- a/third_party/blink/web_tests/fast/inline/out-of-flow-objects-and-whitespace-after-empty-inline-expected.txt
+++ b/third_party/blink/web_tests/fast/inline/out-of-flow-objects-and-whitespace-after-empty-inline-expected.txt
@@ -13,8 +13,6 @@
 Input
 PASS
 Input
-
 PASS
 Input
-
 PASS
diff --git a/third_party/blink/web_tests/fast/inline/positioned-element-padding-contributes-width-expected.txt b/third_party/blink/web_tests/fast/inline/positioned-element-padding-contributes-width-expected.txt
index 8a0809a..e95b9ee4 100644
--- a/third_party/blink/web_tests/fast/inline/positioned-element-padding-contributes-width-expected.txt
+++ b/third_party/blink/web_tests/fast/inline/positioned-element-padding-contributes-width-expected.txt
@@ -1,5 +1,5 @@
 https://bugs.webkit.org/show_bug.cgi?id=108226: All the black boxes should be inside the blue rectangle.
 
-XX XX XX
+XX XX XX 
 X
 PASS
diff --git a/third_party/blink/web_tests/fast/inline/reattach-inlines-in-anonymous-blocks-with-out-of-flow-siblings-expected.txt b/third_party/blink/web_tests/fast/inline/reattach-inlines-in-anonymous-blocks-with-out-of-flow-siblings-expected.txt
index 035ecad..8cf07c98 100644
--- a/third_party/blink/web_tests/fast/inline/reattach-inlines-in-anonymous-blocks-with-out-of-flow-siblings-expected.txt
+++ b/third_party/blink/web_tests/fast/inline/reattach-inlines-in-anonymous-blocks-with-out-of-flow-siblings-expected.txt
@@ -12,6 +12,6 @@
 TEST COMPLETE
 
 
-1
-2
+1 
+2 
 3
diff --git a/third_party/blink/web_tests/fast/innerHTML/004-expected.txt b/third_party/blink/web_tests/fast/innerHTML/004-expected.txt
index 514b2c0e..5142f10 100644
--- a/third_party/blink/web_tests/fast/innerHTML/004-expected.txt
+++ b/third_party/blink/web_tests/fast/innerHTML/004-expected.txt
@@ -28,4 +28,3 @@
 
 test
 
-
diff --git a/third_party/blink/web_tests/fast/js/cross-frame-bad-time-expected.txt b/third_party/blink/web_tests/fast/js/cross-frame-bad-time-expected.txt
index 2da79335..ee9d19e 100644
--- a/third_party/blink/web_tests/fast/js/cross-frame-bad-time-expected.txt
+++ b/third_party/blink/web_tests/fast/js/cross-frame-bad-time-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/js/cross-frame-prototype-expected.txt b/third_party/blink/web_tests/fast/js/cross-frame-prototype-expected.txt
index badcb90..35f5fedc 100644
--- a/third_party/blink/web_tests/fast/js/cross-frame-prototype-expected.txt
+++ b/third_party/blink/web_tests/fast/js/cross-frame-prototype-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/js/cross-frame-really-bad-time-expected.txt b/third_party/blink/web_tests/fast/js/cross-frame-really-bad-time-expected.txt
index 93b873ea..10eccf8 100644
--- a/third_party/blink/web_tests/fast/js/cross-frame-really-bad-time-expected.txt
+++ b/third_party/blink/web_tests/fast/js/cross-frame-really-bad-time-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/js/cross-frame-really-bad-time-with-__proto__-expected.txt b/third_party/blink/web_tests/fast/js/cross-frame-really-bad-time-with-__proto__-expected.txt
index 6a7dd80..495c7d4 100644
--- a/third_party/blink/web_tests/fast/js/cross-frame-really-bad-time-with-__proto__-expected.txt
+++ b/third_party/blink/web_tests/fast/js/cross-frame-really-bad-time-with-__proto__-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/js/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt b/third_party/blink/web_tests/fast/js/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt
index 9740c58..04500d30 100644
--- a/third_party/blink/web_tests/fast/js/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt
+++ b/third_party/blink/web_tests/fast/js/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt
@@ -406,4 +406,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/js/eval-cross-window-expected.txt b/third_party/blink/web_tests/fast/js/eval-cross-window-expected.txt
index 5641ef5..d0c72f3 100644
--- a/third_party/blink/web_tests/fast/js/eval-cross-window-expected.txt
+++ b/third_party/blink/web_tests/fast/js/eval-cross-window-expected.txt
@@ -38,4 +38,3 @@
 PASS: window.eval("this") should be undefined and is.
 PASS: frames[0].eval("this") should be undefined and is.
 
-
diff --git a/third_party/blink/web_tests/fast/js/getOwnPropertyDescriptor-expected.txt b/third_party/blink/web_tests/fast/js/getOwnPropertyDescriptor-expected.txt
index 314fa84..81b2aec7 100644
--- a/third_party/blink/web_tests/fast/js/getOwnPropertyDescriptor-expected.txt
+++ b/third_party/blink/web_tests/fast/js/getOwnPropertyDescriptor-expected.txt
@@ -188,4 +188,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/js/js-constructors-use-correct-global-expected.txt b/third_party/blink/web_tests/fast/js/js-constructors-use-correct-global-expected.txt
index 6c69a60e..2158909 100644
--- a/third_party/blink/web_tests/fast/js/js-constructors-use-correct-global-expected.txt
+++ b/third_party/blink/web_tests/fast/js/js-constructors-use-correct-global-expected.txt
@@ -31,4 +31,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/js/lexical-lookup-in-function-constructor-expected.txt b/third_party/blink/web_tests/fast/js/lexical-lookup-in-function-constructor-expected.txt
index 86aefce6..ff43ca4 100644
--- a/third_party/blink/web_tests/fast/js/lexical-lookup-in-function-constructor-expected.txt
+++ b/third_party/blink/web_tests/fast/js/lexical-lookup-in-function-constructor-expected.txt
@@ -1,3 +1 @@
 SUCCESS
-
-
diff --git a/third_party/blink/web_tests/fast/js/prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt b/third_party/blink/web_tests/fast/js/prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt
index 9a8437f..e17e2bb 100644
--- a/third_party/blink/web_tests/fast/js/prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt
+++ b/third_party/blink/web_tests/fast/js/prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt
@@ -46,4 +46,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/layers/clip-rects-transformed-2-expected.txt b/third_party/blink/web_tests/fast/layers/clip-rects-transformed-2-expected.txt
index 963c9d0..a2ae41e1 100644
--- a/third_party/blink/web_tests/fast/layers/clip-rects-transformed-2-expected.txt
+++ b/third_party/blink/web_tests/fast/layers/clip-rects-transformed-2-expected.txt
@@ -1,5 +1,3 @@
 Test 2/2 for rdar://problem/7398987 Assertion failure in Layer::updateClipRects when a plugin’s enclosing layer is enclosed by a transformed layer.
 
 This test should not cause an assertion faliure.
-
-
diff --git a/third_party/blink/web_tests/fast/layers/clip-rects-transformed-expected.txt b/third_party/blink/web_tests/fast/layers/clip-rects-transformed-expected.txt
index 264f8496..8652bd5 100644
--- a/third_party/blink/web_tests/fast/layers/clip-rects-transformed-expected.txt
+++ b/third_party/blink/web_tests/fast/layers/clip-rects-transformed-expected.txt
@@ -1,5 +1,3 @@
 Test 1/2 for rdar://problem/7398987 Assertion failure in Layer::updateClipRects when a plugin’s enclosing layer is enclosed by a transformed layer.
 
 This test should not cause an assertion faliure.
-
-
diff --git a/third_party/blink/web_tests/fast/leaks/002-expected.txt b/third_party/blink/web_tests/fast/leaks/002-expected.txt
index 1b7655a..486ce896 100644
--- a/third_party/blink/web_tests/fast/leaks/002-expected.txt
+++ b/third_party/blink/web_tests/fast/leaks/002-expected.txt
@@ -1,3 +1 @@
 This test exercises LayoutBlockFlow::bidiReorderCharacters in a specific way to test for BidiRun leaks as reported in rdar://problem/4987649. Its layout has no particular meaning.
-
-
diff --git a/third_party/blink/web_tests/fast/lists/calc-width-with-space-expected.txt b/third_party/blink/web_tests/fast/lists/calc-width-with-space-expected.txt
index 5431088..71f4ebf 100644
--- a/third_party/blink/web_tests/fast/lists/calc-width-with-space-expected.txt
+++ b/third_party/blink/web_tests/fast/lists/calc-width-with-space-expected.txt
@@ -2,7 +2,7 @@
 XpX XpX
 	
 XpX XpX
-XpX XpX
+ XpX XpX
 	
 XpX XpX
 SUCCESS
diff --git a/third_party/blink/web_tests/fast/lists/item-not-in-list-line-wrapping-expected.txt b/third_party/blink/web_tests/fast/lists/item-not-in-list-line-wrapping-expected.txt
index 54d8b1a..d29dc51 100644
--- a/third_party/blink/web_tests/fast/lists/item-not-in-list-line-wrapping-expected.txt
+++ b/third_party/blink/web_tests/fast/lists/item-not-in-list-line-wrapping-expected.txt
@@ -2,5 +2,5 @@
 
 Text should not overflow the yellow box.
 
-Lorem ipsum dolor sit amet
+ Lorem ipsum dolor sit amet
 PASS
diff --git a/third_party/blink/web_tests/fast/lists/list-marker-set-overflow-line-box-crash-expected.txt b/third_party/blink/web_tests/fast/lists/list-marker-set-overflow-line-box-crash-expected.txt
index 335bf18..507e4e91 100644
--- a/third_party/blink/web_tests/fast/lists/list-marker-set-overflow-line-box-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/lists/list-marker-set-overflow-line-box-crash-expected.txt
@@ -1,2 +1,2 @@
 This test checks that list item don't make non-overflowable box overflowing
-This test has passed if it doesn't crash.
+ This test has passed if it doesn't crash.
diff --git a/third_party/blink/web_tests/fast/loader/empty-embed-src-attribute-expected.txt b/third_party/blink/web_tests/fast/loader/empty-embed-src-attribute-expected.txt
index f62d561..59e88a7 100644
--- a/third_party/blink/web_tests/fast/loader/empty-embed-src-attribute-expected.txt
+++ b/third_party/blink/web_tests/fast/loader/empty-embed-src-attribute-expected.txt
@@ -3,5 +3,3 @@
 See bug 23806 for details.
 
 If there is no CRASH, the test passed.
-
-
diff --git a/third_party/blink/web_tests/fast/loader/form-state-restore-with-frames-expected.txt b/third_party/blink/web_tests/fast/loader/form-state-restore-with-frames-expected.txt
index 784dfe0..c11e1ee1 100644
--- a/third_party/blink/web_tests/fast/loader/form-state-restore-with-frames-expected.txt
+++ b/third_party/blink/web_tests/fast/loader/form-state-restore-with-frames-expected.txt
@@ -5,4 +5,3 @@
 TEST COMPLETE
 
  
-
diff --git a/third_party/blink/web_tests/fast/loader/iframe-recursive-synchronous-load-expected.txt b/third_party/blink/web_tests/fast/loader/iframe-recursive-synchronous-load-expected.txt
index 9fa36587..0b2a126 100644
--- a/third_party/blink/web_tests/fast/loader/iframe-recursive-synchronous-load-expected.txt
+++ b/third_party/blink/web_tests/fast/loader/iframe-recursive-synchronous-load-expected.txt
@@ -1,5 +1,3 @@
 This test verifies that you don't crash when adding an iframe to the document from another iframe's onload handler.
 
 PASS: You didn't crash.
-
-
diff --git a/third_party/blink/web_tests/fast/loader/javascript-detached-frame-no-crash-expected.txt b/third_party/blink/web_tests/fast/loader/javascript-detached-frame-no-crash-expected.txt
index 571ddde..a6893fb 100644
--- a/third_party/blink/web_tests/fast/loader/javascript-detached-frame-no-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/loader/javascript-detached-frame-no-crash-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/loader/javascript-url-in-embed-expected.txt b/third_party/blink/web_tests/fast/loader/javascript-url-in-embed-expected.txt
index 62fcde1..b48506148 100644
--- a/third_party/blink/web_tests/fast/loader/javascript-url-in-embed-expected.txt
+++ b/third_party/blink/web_tests/fast/loader/javascript-url-in-embed-expected.txt
@@ -1,3 +1 @@
 This tests that javascript: urls in an embed tag do not get executed.
-
-
diff --git a/third_party/blink/web_tests/fast/loader/javascript-url-in-object-expected.txt b/third_party/blink/web_tests/fast/loader/javascript-url-in-object-expected.txt
index e3a0dac3..2867b5e 100644
--- a/third_party/blink/web_tests/fast/loader/javascript-url-in-object-expected.txt
+++ b/third_party/blink/web_tests/fast/loader/javascript-url-in-object-expected.txt
@@ -1,3 +1 @@
 This tests that javascript: urls in an object tag do not get executed.
-
-
diff --git a/third_party/blink/web_tests/fast/loader/onload-bad-scheme-for-frame-expected.txt b/third_party/blink/web_tests/fast/loader/onload-bad-scheme-for-frame-expected.txt
index ee370ad..92ae492b 100644
--- a/third_party/blink/web_tests/fast/loader/onload-bad-scheme-for-frame-expected.txt
+++ b/third_party/blink/web_tests/fast/loader/onload-bad-scheme-for-frame-expected.txt
@@ -1,4 +1,3 @@
 Test for window.onload never fires if page contains an <iframe> with a bad scheme or whose load is cancelled by returning null from resource load delegate's willSendRequest. If the test passes, you should see the word "PASSED" below.
 
 PASSED
-
diff --git a/third_party/blink/web_tests/fast/loader/onload-policy-ignore-for-frame-expected.txt b/third_party/blink/web_tests/fast/loader/onload-policy-ignore-for-frame-expected.txt
index a22fad4..339f942 100644
--- a/third_party/blink/web_tests/fast/loader/onload-policy-ignore-for-frame-expected.txt
+++ b/third_party/blink/web_tests/fast/loader/onload-policy-ignore-for-frame-expected.txt
@@ -2,4 +2,3 @@
 Test for window.onload never fires if page contains an <iframe> with a bad scheme or whose load is cancelled by returning null from resource load delegate's willSendRequest. If the test passes, you should see the word "PASSED" below.
 
 PASSED
-
diff --git a/third_party/blink/web_tests/fast/loader/submit-form-while-parsing-2-expected.txt b/third_party/blink/web_tests/fast/loader/submit-form-while-parsing-2-expected.txt
index 2ad98fc..fe97c8f 100644
--- a/third_party/blink/web_tests/fast/loader/submit-form-while-parsing-2-expected.txt
+++ b/third_party/blink/web_tests/fast/loader/submit-form-while-parsing-2-expected.txt
@@ -1,3 +1 @@
 PASSED: If we successfully got here without an assertion or crash, all is well.
-
-
diff --git a/third_party/blink/web_tests/fast/media/media-query-list-callback-expected.txt b/third_party/blink/web_tests/fast/media/media-query-list-callback-expected.txt
index f71a331..372b2d4d 100644
--- a/third_party/blink/web_tests/fast/media/media-query-list-callback-expected.txt
+++ b/third_party/blink/web_tests/fast/media/media-query-list-callback-expected.txt
@@ -1,5 +1,3 @@
 If this doesn't crash...
 
 PASS
-
-
diff --git a/third_party/blink/web_tests/fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events-expected.txt b/third_party/blink/web_tests/fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events-expected.txt
index 5116cab6..b615f0d 100644
--- a/third_party/blink/web_tests/fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events-expected.txt
+++ b/third_party/blink/web_tests/fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events-expected.txt
@@ -13,4 +13,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/mediacapturefromelement/CanvasCaptureMediaStream-framerate-0-expected.txt b/third_party/blink/web_tests/fast/mediacapturefromelement/CanvasCaptureMediaStream-framerate-0-expected.txt
index 7a62fb3..cf1803f7 100644
--- a/third_party/blink/web_tests/fast/mediacapturefromelement/CanvasCaptureMediaStream-framerate-0-expected.txt
+++ b/third_party/blink/web_tests/fast/mediacapturefromelement/CanvasCaptureMediaStream-framerate-0-expected.txt
@@ -13,4 +13,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events-expected.txt b/third_party/blink/web_tests/fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events-expected.txt
index 5116cab6..b615f0d 100644
--- a/third_party/blink/web_tests/fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events-expected.txt
+++ b/third_party/blink/web_tests/fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events-expected.txt
@@ -13,4 +13,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/multicol/break-before-first-line-in-first-child-expected.txt b/third_party/blink/web_tests/fast/multicol/break-before-first-line-in-first-child-expected.txt
index 9299eb8c..6275778 100644
--- a/third_party/blink/web_tests/fast/multicol/break-before-first-line-in-first-child-expected.txt
+++ b/third_party/blink/web_tests/fast/multicol/break-before-first-line-in-first-child-expected.txt
@@ -2,5 +2,4 @@
 
 There should be a blue square below.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/multicol/image-loaded-before-layout-assert-expected.txt b/third_party/blink/web_tests/fast/multicol/image-loaded-before-layout-assert-expected.txt
index cc2bb748..34ca227e 100644
--- a/third_party/blink/web_tests/fast/multicol/image-loaded-before-layout-assert-expected.txt
+++ b/third_party/blink/web_tests/fast/multicol/image-loaded-before-layout-assert-expected.txt
@@ -1,5 +1,3 @@
 This test attempts to trigger a paint invalidation after renderer creation but before layout.
 
 PASS if no assertion failure or crash.
-
-
diff --git a/third_party/blink/web_tests/fast/multicol/inner-multicol-moved-into-continuation-expected.txt b/third_party/blink/web_tests/fast/multicol/inner-multicol-moved-into-continuation-expected.txt
index 2ffcd30b9..ac287f1 100644
--- a/third_party/blink/web_tests/fast/multicol/inner-multicol-moved-into-continuation-expected.txt
+++ b/third_party/blink/web_tests/fast/multicol/inner-multicol-moved-into-continuation-expected.txt
@@ -1,5 +1,3 @@
 Inside a multicol container, establish an inline continuation around an inner multicol-container with a spanner.
 
 PASS if no crash or assertion failure.
-
-
diff --git a/third_party/blink/web_tests/fast/multicol/nested-one-line-in-inner-expected.txt b/third_party/blink/web_tests/fast/multicol/nested-one-line-in-inner-expected.txt
index 9f4132a..e139ec7f 100644
--- a/third_party/blink/web_tests/fast/multicol/nested-one-line-in-inner-expected.txt
+++ b/third_party/blink/web_tests/fast/multicol/nested-one-line-in-inner-expected.txt
@@ -2,5 +2,4 @@
 
 There should be a blue square below.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/multicol/span/foreignObject-expected.txt b/third_party/blink/web_tests/fast/multicol/span/foreignObject-expected.txt
index 0acff59..36f7a9f 100644
--- a/third_party/blink/web_tests/fast/multicol/span/foreignObject-expected.txt
+++ b/third_party/blink/web_tests/fast/multicol/span/foreignObject-expected.txt
@@ -1,3 +1 @@
 PASS if no assertion failure or crash.
-
-
diff --git a/third_party/blink/web_tests/fast/multicol/textarea-with-placeholder-as-multicol-crash-expected.txt b/third_party/blink/web_tests/fast/multicol/textarea-with-placeholder-as-multicol-crash-expected.txt
index 9c314504..b87dec6 100644
--- a/third_party/blink/web_tests/fast/multicol/textarea-with-placeholder-as-multicol-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/multicol/textarea-with-placeholder-as-multicol-crash-expected.txt
@@ -1,3 +1 @@
 PASS if no crash or assertion failure.
-
-
diff --git a/third_party/blink/web_tests/fast/overflow/overflow-clamp-after-visible-rect-resize-expected.txt b/third_party/blink/web_tests/fast/overflow/overflow-clamp-after-visible-rect-resize-expected.txt
index 9575038d..d290ae8 100644
--- a/third_party/blink/web_tests/fast/overflow/overflow-clamp-after-visible-rect-resize-expected.txt
+++ b/third_party/blink/web_tests/fast/overflow/overflow-clamp-after-visible-rect-resize-expected.txt
@@ -9,4 +9,3 @@
 TEST COMPLETE
 
 
-
diff --git a/third_party/blink/web_tests/fast/overflow/overflow-height-float-not-removed-crash2-expected.txt b/third_party/blink/web_tests/fast/overflow/overflow-height-float-not-removed-crash2-expected.txt
index 9976b120..a700cb6 100644
--- a/third_party/blink/web_tests/fast/overflow/overflow-height-float-not-removed-crash2-expected.txt
+++ b/third_party/blink/web_tests/fast/overflow/overflow-height-float-not-removed-crash2-expected.txt
@@ -1,3 +1,2 @@
 PASS
-
-
+ 
diff --git a/third_party/blink/web_tests/fast/overflow/overflow-height-float-not-removed-crash3-expected.txt b/third_party/blink/web_tests/fast/overflow/overflow-height-float-not-removed-crash3-expected.txt
index 69f1750..0b1c125 100644
--- a/third_party/blink/web_tests/fast/overflow/overflow-height-float-not-removed-crash3-expected.txt
+++ b/third_party/blink/web_tests/fast/overflow/overflow-height-float-not-removed-crash3-expected.txt
@@ -1,4 +1,2 @@
 Test passes if it does not crash.
-
  sometextsometextsometextsometextsometextsometext
-
diff --git a/third_party/blink/web_tests/fast/overflow/scrollbar-restored-and-then-locked-expected.txt b/third_party/blink/web_tests/fast/overflow/scrollbar-restored-and-then-locked-expected.txt
index 8569602f..848d151 100644
--- a/third_party/blink/web_tests/fast/overflow/scrollbar-restored-and-then-locked-expected.txt
+++ b/third_party/blink/web_tests/fast/overflow/scrollbar-restored-and-then-locked-expected.txt
@@ -2,8 +2,8 @@
 
 This test ensures the correctness of two scrollbar behaviour:
 
-This tests that after setting 'overflow' on the document element to 'hidden' and back to 'visible', scrollbars appear as necessary.
-After explicitly setting a scrollbar policy different than 'auto', WebCore honors that until it is unset.
+ This tests that after setting 'overflow' on the document element to 'hidden' and back to 'visible', scrollbars appear as necessary.
+ After explicitly setting a scrollbar policy different than 'auto', WebCore honors that until it is unset.
 
 PASS
 FAIL: Scrollbar did appear after turning it off
diff --git a/third_party/blink/web_tests/fast/parser/badentity-expected.txt b/third_party/blink/web_tests/fast/parser/badentity-expected.txt
index 69e9abe..c397fbe99 100644
--- a/third_party/blink/web_tests/fast/parser/badentity-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/badentity-expected.txt
@@ -1,5 +1,3 @@
 Test for bug 13495: REPRODUCIBLE CRASH: Referencing an undefined entity in an XHTML document.
 
-
-
 If you don't crash, you pass.
diff --git a/third_party/blink/web_tests/fast/parser/close-while-stopping-expected.txt b/third_party/blink/web_tests/fast/parser/close-while-stopping-expected.txt
index 67c1968..f59990a 100644
--- a/third_party/blink/web_tests/fast/parser/close-while-stopping-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/close-while-stopping-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/parser/double-write-from-closed-iframe-expected.txt b/third_party/blink/web_tests/fast/parser/double-write-from-closed-iframe-expected.txt
index e83370a..b4612eed 100644
--- a/third_party/blink/web_tests/fast/parser/double-write-from-closed-iframe-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/double-write-from-closed-iframe-expected.txt
@@ -4,7 +4,6 @@
 TEST COMPLETE
 
 
-
 --------
 Frame: '<!--framePath //<!--frame0-->-->'
 --------
diff --git a/third_party/blink/web_tests/fast/parser/empty-text-resource-expected.txt b/third_party/blink/web_tests/fast/parser/empty-text-resource-expected.txt
index c738b670..4af4abdc 100644
--- a/third_party/blink/web_tests/fast/parser/empty-text-resource-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/empty-text-resource-expected.txt
@@ -1,4 +1,3 @@
 Test for bug 26764: Uncaught NOT_FOUND_ERR: DOMException 8 loading empty text file.
 
 PASS
-
diff --git a/third_party/blink/web_tests/fast/parser/entities-in-attributes-expected.txt b/third_party/blink/web_tests/fast/parser/entities-in-attributes-expected.txt
index 0f6c572..ae836fe 100644
--- a/third_party/blink/web_tests/fast/parser/entities-in-attributes-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/entities-in-attributes-expected.txt
@@ -1,4 +1,3 @@
 Test parsing of HTML entities in XHTML attributes.
 
-
 SUCCESS
diff --git a/third_party/blink/web_tests/fast/parser/entities-in-html-expected.txt b/third_party/blink/web_tests/fast/parser/entities-in-html-expected.txt
index 206829d..4769eb3e 100644
--- a/third_party/blink/web_tests/fast/parser/entities-in-html-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/entities-in-html-expected.txt
@@ -18,7 +18,7 @@
 170	AA	ordf	ª	ª	ª
 171	AB	laquo	«	«	«
 172	AC	not	¬	¬	¬
-173	AD	shy			
+173	AD	shy	­	­	­
 174	AE	reg	®	®	®
 175	AF	macr	¯	¯	¯
 176	B0	deg	°	°	°
diff --git a/third_party/blink/web_tests/fast/parser/entities-in-xhtml-expected.txt b/third_party/blink/web_tests/fast/parser/entities-in-xhtml-expected.txt
index 6cd28bd..5ba0241 100644
--- a/third_party/blink/web_tests/fast/parser/entities-in-xhtml-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/entities-in-xhtml-expected.txt
@@ -18,7 +18,7 @@
 170	AA	ordf	ª	ª	ª
 171	AB	laquo	«	«	«
 172	AC	not	¬	¬	¬
-173	AD	shy			
+173	AD	shy	­	­	­
 174	AE	reg	®	®	®
 175	AF	macr	¯	¯	¯
 176	B0	deg	°	°	°
diff --git a/third_party/blink/web_tests/fast/parser/fragment-foreign-content-context-expected.txt b/third_party/blink/web_tests/fast/parser/fragment-foreign-content-context-expected.txt
index 2a34472..234ed8f 100644
--- a/third_party/blink/web_tests/fast/parser/fragment-foreign-content-context-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/fragment-foreign-content-context-expected.txt
@@ -1,2 +1 @@
 Test for https://bugs.webkit.org/show_bug.cgi?id=56380. Verify that WebKit does not ASSERT when a fragment with a foreign content context element is parsed.
-
diff --git a/third_party/blink/web_tests/fast/parser/input-textarea-inside-select-element-expected.txt b/third_party/blink/web_tests/fast/parser/input-textarea-inside-select-element-expected.txt
index 73b4a0c..b6bc621 100644
--- a/third_party/blink/web_tests/fast/parser/input-textarea-inside-select-element-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/input-textarea-inside-select-element-expected.txt
@@ -2,10 +2,6 @@
 
 There should be two green bars below.
 
-
-
 PASS
 
-
-
 PASS
diff --git a/third_party/blink/web_tests/fast/parser/rewrite-form-expected.txt b/third_party/blink/web_tests/fast/parser/rewrite-form-expected.txt
index b9400d031..4a05804 100644
--- a/third_party/blink/web_tests/fast/parser/rewrite-form-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/rewrite-form-expected.txt
@@ -1,5 +1,3 @@
 Test for bug 13300: Reproducible crash opening anekdot.ru.
 
 No crash == SUCCESS
-
-
diff --git a/third_party/blink/web_tests/fast/parser/script-in-svg-runs-expected.txt b/third_party/blink/web_tests/fast/parser/script-in-svg-runs-expected.txt
index 9851f4c0d..85d1f14 100644
--- a/third_party/blink/web_tests/fast/parser/script-in-svg-runs-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/script-in-svg-runs-expected.txt
@@ -1,4 +1,3 @@
 PASS
 
-
 Do you see "PASS" above? That means <script>-in-<svg>-in-HTML works OK.
diff --git a/third_party/blink/web_tests/fast/parser/tokenizer-close-during-document-write-expected.txt b/third_party/blink/web_tests/fast/parser/tokenizer-close-during-document-write-expected.txt
index 0a68dcd..ddcea01 100644
--- a/third_party/blink/web_tests/fast/parser/tokenizer-close-during-document-write-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/tokenizer-close-during-document-write-expected.txt
@@ -1,4 +1,3 @@
 Test for bug 39008: Webkit crashes on clicking back button when in hotmail.
 
 SUCCESS: didn't crash
-
diff --git a/third_party/blink/web_tests/fast/parser/xhtml-document-with-html-object-expected.txt b/third_party/blink/web_tests/fast/parser/xhtml-document-with-html-object-expected.txt
index 2a3fa72..b897c70c 100644
--- a/third_party/blink/web_tests/fast/parser/xhtml-document-with-html-object-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/xhtml-document-with-html-object-expected.txt
@@ -1,5 +1,3 @@
 This tests that having an object tag with a html (or xhtml) document doesn't assert if there is whitespace between the opening and closing node.
 
 SUCCESS - didn't crash!
-
-
diff --git a/third_party/blink/web_tests/fast/parser/xml-colon-entity-expected.txt b/third_party/blink/web_tests/fast/parser/xml-colon-entity-expected.txt
index 82e93484..84af8a1 100644
--- a/third_party/blink/web_tests/fast/parser/xml-colon-entity-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/xml-colon-entity-expected.txt
@@ -2,8 +2,6 @@
 
 If you don't crash, you pass. A parsing error in the "xml-parser" subframe is expected.
 
-
-
 --------
 Frame: 'xml-parser'
 --------
diff --git a/third_party/blink/web_tests/fast/parser/xml-declaration-missing-ending-mark-expected.txt b/third_party/blink/web_tests/fast/parser/xml-declaration-missing-ending-mark-expected.txt
index ec431f9..3c643ed 100644
--- a/third_party/blink/web_tests/fast/parser/xml-declaration-missing-ending-mark-expected.txt
+++ b/third_party/blink/web_tests/fast/parser/xml-declaration-missing-ending-mark-expected.txt
@@ -5,8 +5,6 @@
 
 If you don't crash, you pass. A parsing error in the "xml-parser" subframe is expected.
 
-
-
 --------
 Frame: 'xml-parser'
 --------
diff --git a/third_party/blink/web_tests/fast/replaced/aspect-ratio-of-replaced-child-with-auto-height-expected.txt b/third_party/blink/web_tests/fast/replaced/aspect-ratio-of-replaced-child-with-auto-height-expected.txt
index cf1b018..04568fa 100644
--- a/third_party/blink/web_tests/fast/replaced/aspect-ratio-of-replaced-child-with-auto-height-expected.txt
+++ b/third_party/blink/web_tests/fast/replaced/aspect-ratio-of-replaced-child-with-auto-height-expected.txt
@@ -1,4 +1,3 @@
 Tests that a replaced child with percentage height should keep the aspect ratio when the size of its container changes.
 
-
 PASS
diff --git a/third_party/blink/web_tests/fast/replaced/frame-removed-during-resize-expected.txt b/third_party/blink/web_tests/fast/replaced/frame-removed-during-resize-expected.txt
index 1a762021..08488ae 100644
--- a/third_party/blink/web_tests/fast/replaced/frame-removed-during-resize-expected.txt
+++ b/third_party/blink/web_tests/fast/replaced/frame-removed-during-resize-expected.txt
@@ -1,3 +1 @@
 Test for a crash that could occur when a frame’s resize handler removed the frame.
-
-
diff --git a/third_party/blink/web_tests/fast/replaced/iframe-with-percentage-height-within-table-with-table-cell-ignore-height-expected.txt b/third_party/blink/web_tests/fast/replaced/iframe-with-percentage-height-within-table-with-table-cell-ignore-height-expected.txt
index 3160d4e..5a08e5e 100644
--- a/third_party/blink/web_tests/fast/replaced/iframe-with-percentage-height-within-table-with-table-cell-ignore-height-expected.txt
+++ b/third_party/blink/web_tests/fast/replaced/iframe-with-percentage-height-within-table-with-table-cell-ignore-height-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/replaced/image-map-cursor-expected.txt b/third_party/blink/web_tests/fast/replaced/image-map-cursor-expected.txt
index c77d0353..7bf223fa 100644
--- a/third_party/blink/web_tests/fast/replaced/image-map-cursor-expected.txt
+++ b/third_party/blink/web_tests/fast/replaced/image-map-cursor-expected.txt
@@ -4,5 +4,4 @@
 TEST COMPLETE
 
 
-
 crbug.com/517339: Image maps not displaying hand pointer when hovering over them.
diff --git a/third_party/blink/web_tests/fast/replaced/invalid-object-with-fallback-expected.txt b/third_party/blink/web_tests/fast/replaced/invalid-object-with-fallback-expected.txt
index b57fc9c7..4ab62a6 100644
--- a/third_party/blink/web_tests/fast/replaced/invalid-object-with-fallback-expected.txt
+++ b/third_party/blink/web_tests/fast/replaced/invalid-object-with-fallback-expected.txt
@@ -1,6 +1,5 @@
 CONSOLE MESSAGE: Blink Test Plugin: initializing
 This test verifies that an <embed> tag is rendered along with other fallback content when an <object> fails to load. On success, you should see this text, followed by 'PASS'.
 
-
 PASS
 
diff --git a/third_party/blink/web_tests/fast/replaced/object-param-no-name-expected.txt b/third_party/blink/web_tests/fast/replaced/object-param-no-name-expected.txt
index 1094cd5..6ddccb9 100644
--- a/third_party/blink/web_tests/fast/replaced/object-param-no-name-expected.txt
+++ b/third_party/blink/web_tests/fast/replaced/object-param-no-name-expected.txt
@@ -1,3 +1 @@
 This tests an object element with a param element inside it with no name. If the test passes it won't crash.
-
-
diff --git a/third_party/blink/web_tests/fast/replaced/preferred-widths-expected.txt b/third_party/blink/web_tests/fast/replaced/preferred-widths-expected.txt
index 6ddff4ae..2cd155f 100644
--- a/third_party/blink/web_tests/fast/replaced/preferred-widths-expected.txt
+++ b/third_party/blink/web_tests/fast/replaced/preferred-widths-expected.txt
@@ -1,30 +1,21 @@
 Test the effect of percentages widths on the preferred widths of replaced elements.
 
-
 PASS
-
 PASS
-
 FAIL:
 Expected 130 for width, but got 30. 
 
 <div class="container" data-expected-width="130" data-expected-height="130">
     <img class="min-content" src="resources/square-blue-100x100.png" style="width: 100%; border: 5px solid black; padding: 5px;" data-expected-width="120" data-expected-height="120">
 </div>
-
 FAIL:
 Expected 130 for width, but got 30. 
 
 <div class="container" data-expected-width="130" data-expected-height="130">
     <img class="max-content" src="resources/square-blue-100x100.png" style="width: 100%; border: 5px solid black; padding: 5px;" data-expected-width="120" data-expected-height="120">
 </div>
-
 PASS
-
 PASS
-
 PASS
-
 PASS
-
 PASS
diff --git a/third_party/blink/web_tests/fast/ruby/after-doesnt-crash-expected.txt b/third_party/blink/web_tests/fast/ruby/after-doesnt-crash-expected.txt
index 730ebf6..ed331774 100644
--- a/third_party/blink/web_tests/fast/ruby/after-doesnt-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/ruby/after-doesnt-crash-expected.txt
@@ -1 +1,2 @@
+ 
 This test passes if it doesn't crash.
diff --git a/third_party/blink/web_tests/fast/ruby/before-doesnt-crash-expected.txt b/third_party/blink/web_tests/fast/ruby/before-doesnt-crash-expected.txt
index 730ebf6..ed331774 100644
--- a/third_party/blink/web_tests/fast/ruby/before-doesnt-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/ruby/before-doesnt-crash-expected.txt
@@ -1 +1,2 @@
+ 
 This test passes if it doesn't crash.
diff --git a/third_party/blink/web_tests/fast/ruby/float-object-doesnt-crash-expected.txt b/third_party/blink/web_tests/fast/ruby/float-object-doesnt-crash-expected.txt
index cd56361..26b45a8 100644
--- a/third_party/blink/web_tests/fast/ruby/float-object-doesnt-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/ruby/float-object-doesnt-crash-expected.txt
@@ -1,4 +1,4 @@
 Test passes if it does not crash when run with memory checking for use-after-free.
 |
 >
-
+ 
diff --git a/third_party/blink/web_tests/fast/ruby/modify-positioned-ruby-text-crash-expected.txt b/third_party/blink/web_tests/fast/ruby/modify-positioned-ruby-text-crash-expected.txt
index 8c06dbf4..5d301aa 100644
--- a/third_party/blink/web_tests/fast/ruby/modify-positioned-ruby-text-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/ruby/modify-positioned-ruby-text-crash-expected.txt
@@ -1 +1 @@
-PASS, if no assert or crash in debug
+ PASS, if no assert or crash in debug
diff --git a/third_party/blink/web_tests/fast/ruby/percentage-height-child-crash-expected.txt b/third_party/blink/web_tests/fast/ruby/percentage-height-child-crash-expected.txt
index 28af1c0e..61d6f8d 100644
--- a/third_party/blink/web_tests/fast/ruby/percentage-height-child-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/ruby/percentage-height-child-crash-expected.txt
@@ -1,4 +1,4 @@
 PASS if no crash or assertion failure.
 
  
-   
+  
diff --git a/third_party/blink/web_tests/fast/ruby/ruby-illegal-1-expected.txt b/third_party/blink/web_tests/fast/ruby/ruby-illegal-1-expected.txt
index ba26c51..ab69dcf 100644
--- a/third_party/blink/web_tests/fast/ruby/ruby-illegal-1-expected.txt
+++ b/third_party/blink/web_tests/fast/ruby/ruby-illegal-1-expected.txt
@@ -1,2 +1 @@
 SUCCESS!
-
diff --git a/third_party/blink/web_tests/fast/ruby/rubyDOM-insert-rt-block-1-expected.txt b/third_party/blink/web_tests/fast/ruby/rubyDOM-insert-rt-block-1-expected.txt
index f025940..ec60c769 100644
--- a/third_party/blink/web_tests/fast/ruby/rubyDOM-insert-rt-block-1-expected.txt
+++ b/third_party/blink/web_tests/fast/ruby/rubyDOM-insert-rt-block-1-expected.txt
@@ -2,6 +2,6 @@
 
 
 
-text new ruby text
+textnew ruby text
 block
 more textruby text
diff --git a/third_party/blink/web_tests/fast/serviceworker/navigator-serviceworker-getter-debug-assert-expected.txt b/third_party/blink/web_tests/fast/serviceworker/navigator-serviceworker-getter-debug-assert-expected.txt
index 044a522..dad12f6b 100644
--- a/third_party/blink/web_tests/fast/serviceworker/navigator-serviceworker-getter-debug-assert-expected.txt
+++ b/third_party/blink/web_tests/fast/serviceworker/navigator-serviceworker-getter-debug-assert-expected.txt
@@ -6,4 +6,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/storage/storage-disallowed-in-data-url-expected.txt b/third_party/blink/web_tests/fast/storage/storage-disallowed-in-data-url-expected.txt
index b2e1bf9..a61c289 100644
--- a/third_party/blink/web_tests/fast/storage/storage-disallowed-in-data-url-expected.txt
+++ b/third_party/blink/web_tests/fast/storage/storage-disallowed-in-data-url-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/sub-pixel/offset-and-scroll-sizes-should-match-expected.txt b/third_party/blink/web_tests/fast/sub-pixel/offset-and-scroll-sizes-should-match-expected.txt
index 2b002693..b78973c 100644
--- a/third_party/blink/web_tests/fast/sub-pixel/offset-and-scroll-sizes-should-match-expected.txt
+++ b/third_party/blink/web_tests/fast/sub-pixel/offset-and-scroll-sizes-should-match-expected.txt
@@ -6,4 +6,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/sub-pixel/sub-pixel-iframe-copy-on-scroll-expected.txt b/third_party/blink/web_tests/fast/sub-pixel/sub-pixel-iframe-copy-on-scroll-expected.txt
index 93c11fb..9095ff8 100644
--- a/third_party/blink/web_tests/fast/sub-pixel/sub-pixel-iframe-copy-on-scroll-expected.txt
+++ b/third_party/blink/web_tests/fast/sub-pixel/sub-pixel-iframe-copy-on-scroll-expected.txt
@@ -1,5 +1,3 @@
 The iframes below should remain grey with no repaint artifacts when scrolling.
 
-
  
-
diff --git a/third_party/blink/web_tests/fast/sub-pixel/transformed-iframe-copy-on-scroll-expected.txt b/third_party/blink/web_tests/fast/sub-pixel/transformed-iframe-copy-on-scroll-expected.txt
index 93c11fb..9095ff8 100644
--- a/third_party/blink/web_tests/fast/sub-pixel/transformed-iframe-copy-on-scroll-expected.txt
+++ b/third_party/blink/web_tests/fast/sub-pixel/transformed-iframe-copy-on-scroll-expected.txt
@@ -1,5 +1,3 @@
 The iframes below should remain grey with no repaint artifacts when scrolling.
 
-
  
-
diff --git a/third_party/blink/web_tests/fast/table/cell-in-row-before-misnested-text-crash-css-expected.txt b/third_party/blink/web_tests/fast/table/cell-in-row-before-misnested-text-crash-css-expected.txt
index e2a072d1..3460f565 100644
--- a/third_party/blink/web_tests/fast/table/cell-in-row-before-misnested-text-crash-css-expected.txt
+++ b/third_party/blink/web_tests/fast/table/cell-in-row-before-misnested-text-crash-css-expected.txt
@@ -1,2 +1,2 @@
 This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
-0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99	 xxx Whee
+0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99	xxxWhee
diff --git a/third_party/blink/web_tests/fast/table/cell-in-row-before-misnested-text-crash-expected.txt b/third_party/blink/web_tests/fast/table/cell-in-row-before-misnested-text-crash-expected.txt
index e2a072d1..3460f565 100644
--- a/third_party/blink/web_tests/fast/table/cell-in-row-before-misnested-text-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/table/cell-in-row-before-misnested-text-crash-expected.txt
@@ -1,2 +1,2 @@
 This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
-0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99	 xxx Whee
+0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99	xxxWhee
diff --git a/third_party/blink/web_tests/fast/table/fixed-table-layout/table-with-percent-width-expected.txt b/third_party/blink/web_tests/fast/table/fixed-table-layout/table-with-percent-width-expected.txt
index 13b3e9d..1b2fdae 100644
--- a/third_party/blink/web_tests/fast/table/fixed-table-layout/table-with-percent-width-expected.txt
+++ b/third_party/blink/web_tests/fast/table/fixed-table-layout/table-with-percent-width-expected.txt
@@ -6,6 +6,5 @@
 PASS
 			
 PASS
-
 PASS
 PASS
diff --git a/third_party/blink/web_tests/fast/table/form-in-row-before-misnested-text-crash-css-expected.txt b/third_party/blink/web_tests/fast/table/form-in-row-before-misnested-text-crash-css-expected.txt
index 15c7bca..26e18fa 100644
--- a/third_party/blink/web_tests/fast/table/form-in-row-before-misnested-text-crash-css-expected.txt
+++ b/third_party/blink/web_tests/fast/table/form-in-row-before-misnested-text-crash-css-expected.txt
@@ -1,5 +1,5 @@
 This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
 QQQ
-xxx Whee
+xxxWhee
 QQQ
diff --git a/third_party/blink/web_tests/fast/table/form-in-row-before-misnested-text-crash-expected.txt b/third_party/blink/web_tests/fast/table/form-in-row-before-misnested-text-crash-expected.txt
index 15c7bca..26e18fa 100644
--- a/third_party/blink/web_tests/fast/table/form-in-row-before-misnested-text-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/table/form-in-row-before-misnested-text-crash-expected.txt
@@ -1,5 +1,5 @@
 This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
 QQQ
-xxx Whee
+xxxWhee
 QQQ
diff --git a/third_party/blink/web_tests/fast/table/form-in-table-before-misnested-text-crash-css-expected.txt b/third_party/blink/web_tests/fast/table/form-in-table-before-misnested-text-crash-css-expected.txt
index 15c7bca..26e18fa 100644
--- a/third_party/blink/web_tests/fast/table/form-in-table-before-misnested-text-crash-css-expected.txt
+++ b/third_party/blink/web_tests/fast/table/form-in-table-before-misnested-text-crash-css-expected.txt
@@ -1,5 +1,5 @@
 This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
 QQQ
-xxx Whee
+xxxWhee
 QQQ
diff --git a/third_party/blink/web_tests/fast/table/form-in-table-before-misnested-text-crash-expected.txt b/third_party/blink/web_tests/fast/table/form-in-table-before-misnested-text-crash-expected.txt
index 15c7bca..26e18fa 100644
--- a/third_party/blink/web_tests/fast/table/form-in-table-before-misnested-text-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/table/form-in-table-before-misnested-text-crash-expected.txt
@@ -1,5 +1,5 @@
 This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
 QQQ
-xxx Whee
+xxxWhee
 QQQ
diff --git a/third_party/blink/web_tests/fast/table/form-in-tbody-before-misnested-text-crash-css-expected.txt b/third_party/blink/web_tests/fast/table/form-in-tbody-before-misnested-text-crash-css-expected.txt
index 15c7bca..26e18fa 100644
--- a/third_party/blink/web_tests/fast/table/form-in-tbody-before-misnested-text-crash-css-expected.txt
+++ b/third_party/blink/web_tests/fast/table/form-in-tbody-before-misnested-text-crash-css-expected.txt
@@ -1,5 +1,5 @@
 This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
 QQQ
-xxx Whee
+xxxWhee
 QQQ
diff --git a/third_party/blink/web_tests/fast/table/form-in-tbody-before-misnested-text-crash-expected.txt b/third_party/blink/web_tests/fast/table/form-in-tbody-before-misnested-text-crash-expected.txt
index 15c7bca..26e18fa 100644
--- a/third_party/blink/web_tests/fast/table/form-in-tbody-before-misnested-text-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/table/form-in-tbody-before-misnested-text-crash-expected.txt
@@ -1,5 +1,5 @@
 This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
 QQQ
-xxx Whee
+xxxWhee
 QQQ
diff --git a/third_party/blink/web_tests/fast/table/row-in-inline-block-expected.txt b/third_party/blink/web_tests/fast/table/row-in-inline-block-expected.txt
index b5d50fc5..e6a17623 100644
--- a/third_party/blink/web_tests/fast/table/row-in-inline-block-expected.txt
+++ b/third_party/blink/web_tests/fast/table/row-in-inline-block-expected.txt
@@ -1,7 +1,6 @@
 Test that a table-row child of an inline is wrapped inside an inline-table (and table-row-group).
 
 There should be one blue box above and one below this line.
-
 PASS lastTop is > firstBottom
 PASS successfullyParsed is true
 
diff --git a/third_party/blink/web_tests/fast/table/row-in-tbody-before-misnested-text-crash-css-expected.txt b/third_party/blink/web_tests/fast/table/row-in-tbody-before-misnested-text-crash-css-expected.txt
index fe2f304..4819643 100644
--- a/third_party/blink/web_tests/fast/table/row-in-tbody-before-misnested-text-crash-css-expected.txt
+++ b/third_party/blink/web_tests/fast/table/row-in-tbody-before-misnested-text-crash-css-expected.txt
@@ -1,4 +1,4 @@
 This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
-xxx Whee
+xxxWhee
 QQQ
diff --git a/third_party/blink/web_tests/fast/table/row-in-tbody-before-misnested-text-crash-expected.txt b/third_party/blink/web_tests/fast/table/row-in-tbody-before-misnested-text-crash-expected.txt
index fe2f304..4819643 100644
--- a/third_party/blink/web_tests/fast/table/row-in-tbody-before-misnested-text-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/table/row-in-tbody-before-misnested-text-crash-expected.txt
@@ -1,4 +1,4 @@
 This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
-xxx Whee
+xxxWhee
 QQQ
diff --git a/third_party/blink/web_tests/fast/table/section-in-table-before-misnested-text-crash-css-expected.txt b/third_party/blink/web_tests/fast/table/section-in-table-before-misnested-text-crash-css-expected.txt
index f1bbe077..36c29e7 100644
--- a/third_party/blink/web_tests/fast/table/section-in-table-before-misnested-text-crash-css-expected.txt
+++ b/third_party/blink/web_tests/fast/table/section-in-table-before-misnested-text-crash-css-expected.txt
@@ -1,3 +1,3 @@
 This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
-0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 xxx Whee
+0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99xxxWhee
 QQQ
diff --git a/third_party/blink/web_tests/fast/table/section-in-table-before-misnested-text-crash-expected.txt b/third_party/blink/web_tests/fast/table/section-in-table-before-misnested-text-crash-expected.txt
index f1bbe077..36c29e7 100644
--- a/third_party/blink/web_tests/fast/table/section-in-table-before-misnested-text-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/table/section-in-table-before-misnested-text-crash-expected.txt
@@ -1,3 +1,3 @@
 This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
-0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 xxx Whee
+0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99xxxWhee
 QQQ
diff --git a/third_party/blink/web_tests/fast/text/chromium-mac-duplicate-ime-composition-expected.txt b/third_party/blink/web_tests/fast/text/chromium-mac-duplicate-ime-composition-expected.txt
index 28b7710..6b9ca06 100644
--- a/third_party/blink/web_tests/fast/text/chromium-mac-duplicate-ime-composition-expected.txt
+++ b/third_party/blink/web_tests/fast/text/chromium-mac-duplicate-ime-composition-expected.txt
@@ -2,5 +2,4 @@
 
 For manual test, input text into the following textarea by using an input method. The composition text which is not committed should not be inserted into the textarea.
 
-
 PASS expects = "second", actual = "second"
diff --git a/third_party/blink/web_tests/fast/text/international/listbox-width-rtl-expected.txt b/third_party/blink/web_tests/fast/text/international/listbox-width-rtl-expected.txt
index a56a4bd..418983d 100644
--- a/third_party/blink/web_tests/fast/text/international/listbox-width-rtl-expected.txt
+++ b/third_party/blink/web_tests/fast/text/international/listbox-width-rtl-expected.txt
@@ -7,4 +7,5 @@
 Test that text directionality is taken into account when sizing list boxes.
 
 اب اب
+ 
 اب اب
diff --git a/third_party/blink/web_tests/fast/text/shaping/shaping-width-initialized-expected.txt b/third_party/blink/web_tests/fast/text/shaping/shaping-width-initialized-expected.txt
index e9cf883..d601db09 100644
--- a/third_party/blink/web_tests/fast/text/shaping/shaping-width-initialized-expected.txt
+++ b/third_party/blink/web_tests/fast/text/shaping/shaping-width-initialized-expected.txt
@@ -1,3 +1 @@
 Test PASSES if it does not CRASH.
-
-
diff --git a/third_party/blink/web_tests/fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash-expected.txt b/third_party/blink/web_tests/fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash-expected.txt
index 2f695e8c..faa90b4 100644
--- a/third_party/blink/web_tests/fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash-expected.txt
@@ -1 +1 @@
-Test passes if there is no crash.
+ Test passes if there is no crash.
diff --git a/third_party/blink/web_tests/fast/tokenizer/image-empty-crash-expected.txt b/third_party/blink/web_tests/fast/tokenizer/image-empty-crash-expected.txt
index dfd5a1e..74fbbd3 100644
--- a/third_party/blink/web_tests/fast/tokenizer/image-empty-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/tokenizer/image-empty-crash-expected.txt
@@ -1,5 +1,3 @@
 This is a test for https://bugs.webkit.org/show_bug.cgi?id=10202 REGRESSION: Repro crash when loading an empty image document.
 
 No crash means test PASS.
-
-
diff --git a/third_party/blink/web_tests/fast/webgl/canvas-getContext-crash-expected.txt b/third_party/blink/web_tests/fast/webgl/canvas-getContext-crash-expected.txt
index d545b1e3..3ece88fd 100644
--- a/third_party/blink/web_tests/fast/webgl/canvas-getContext-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/webgl/canvas-getContext-crash-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/webgl/canvas-resize-crash-expected.txt b/third_party/blink/web_tests/fast/webgl/canvas-resize-crash-expected.txt
index 5e1ea53b..677ad26 100644
--- a/third_party/blink/web_tests/fast/webgl/canvas-resize-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/webgl/canvas-resize-crash-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/webgl/texImage-imageBitmap-from-imageBitmap-from-offscreen-canvas-expected.txt b/third_party/blink/web_tests/fast/webgl/texImage-imageBitmap-from-imageBitmap-from-offscreen-canvas-expected.txt
index 67e2e60..7c103d5 100644
--- a/third_party/blink/web_tests/fast/webgl/texImage-imageBitmap-from-imageBitmap-from-offscreen-canvas-expected.txt
+++ b/third_party/blink/web_tests/fast/webgl/texImage-imageBitmap-from-imageBitmap-from-offscreen-canvas-expected.txt
@@ -2,5 +2,4 @@
 
 TEST COMPLETE
 
-
 Test PASSED
diff --git a/third_party/blink/web_tests/fast/webgl/webgl-drawing-buffer-error-response-expected.txt b/third_party/blink/web_tests/fast/webgl/webgl-drawing-buffer-error-response-expected.txt
index 28bb8c5..66c03a0 100644
--- a/third_party/blink/web_tests/fast/webgl/webgl-drawing-buffer-error-response-expected.txt
+++ b/third_party/blink/web_tests/fast/webgl/webgl-drawing-buffer-error-response-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/webgl/webgl-error-response-expected.txt b/third_party/blink/web_tests/fast/webgl/webgl-error-response-expected.txt
index 28bb8c5..66c03a0 100644
--- a/third_party/blink/web_tests/fast/webgl/webgl-error-response-expected.txt
+++ b/third_party/blink/web_tests/fast/webgl/webgl-error-response-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/fast/webgl/webgl-texture-binding-preserved-expected.txt b/third_party/blink/web_tests/fast/webgl/webgl-texture-binding-preserved-expected.txt
index 0a48dca..486b3ab8 100644
--- a/third_party/blink/web_tests/fast/webgl/webgl-texture-binding-preserved-expected.txt
+++ b/third_party/blink/web_tests/fast/webgl/webgl-texture-binding-preserved-expected.txt
@@ -7,4 +7,3 @@
 TEST COMPLETE
 
 PASS Should have rendered blue.
-
diff --git a/third_party/blink/web_tests/fast/webgl/webgl-viewport-parameters-preserved-expected.txt b/third_party/blink/web_tests/fast/webgl/webgl-viewport-parameters-preserved-expected.txt
index 6f80f9c..0160dec 100644
--- a/third_party/blink/web_tests/fast/webgl/webgl-viewport-parameters-preserved-expected.txt
+++ b/third_party/blink/web_tests/fast/webgl/webgl-viewport-parameters-preserved-expected.txt
@@ -7,4 +7,3 @@
 TEST COMPLETE
 
 PASS Viewport not corrupted.
-
diff --git a/third_party/blink/web_tests/fast/writing-mode/orthogonal-writing-modes-scrollbarpart-crash-expected.txt b/third_party/blink/web_tests/fast/writing-mode/orthogonal-writing-modes-scrollbarpart-crash-expected.txt
index 7e24c80..0383162 100644
--- a/third_party/blink/web_tests/fast/writing-mode/orthogonal-writing-modes-scrollbarpart-crash-expected.txt
+++ b/third_party/blink/web_tests/fast/writing-mode/orthogonal-writing-modes-scrollbarpart-crash-expected.txt
@@ -1,3 +1 @@
 Test passes if it does not crash.
-
-
diff --git a/third_party/blink/web_tests/fast/xsl/subframe-location-expected.txt b/third_party/blink/web_tests/fast/xsl/subframe-location-expected.txt
index 52e7655e..efc43a0 100644
--- a/third_party/blink/web_tests/fast/xsl/subframe-location-expected.txt
+++ b/third_party/blink/web_tests/fast/xsl/subframe-location-expected.txt
@@ -1,4 +1,2 @@
 ALERT: SUCCESS
 Test that a document in a subframe processed with XSLT has a correct location. (bug 18259).
-
-
diff --git a/third_party/blink/web_tests/fast/xsl/xslt-text-expected.txt b/third_party/blink/web_tests/fast/xsl/xslt-text-expected.txt
index 8ef5f14..aa9cca16 100644
--- a/third_party/blink/web_tests/fast/xsl/xslt-text-expected.txt
+++ b/third_party/blink/web_tests/fast/xsl/xslt-text-expected.txt
@@ -7,7 +7,6 @@
 
 
 
-
 --------
 Frame: '<!--framePath //<!--frame0-->-->'
 --------
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/aria-describedby-on-input-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/aria-describedby-on-input-expected.txt
deleted file mode 100644
index 50c480a3..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/aria-describedby-on-input-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This computer will self-destruct in  minutes.
-Allows you to specify the number of minutes after which the computer will self-destruct.
-
-The accessibility description is "Allows you to specify the number of minutes after which the computer will self-destruct."
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/aria-labelledby-on-input-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/aria-labelledby-on-input-expected.txt
deleted file mode 100644
index 0cebd098..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/aria-labelledby-on-input-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This computer will self-destruct in  minutes.
-
-The accessibility description is "Note: This computer will self-destruct in 10 minutes."
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/draw-focus-if-needed-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/draw-focus-if-needed-expected.txt
deleted file mode 100644
index 898913e..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/draw-focus-if-needed-expected.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-PASS axButton1.x is 50
-PASS axButton1.y is 50
-PASS axButton1.width is 200
-PASS axButton1.height is 100
-PASS axContainer.x is 50
-PASS axContainer.y is 200
-PASS axContainer.width is 200
-PASS axContainer.height is 100
-PASS axButton2.x is 50
-PASS axButton2.y is 200
-PASS axButton2.width is 200
-PASS axButton2.height is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/image-map2-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/image-map2-expected.txt
deleted file mode 100644
index d36e7ab..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/image-map2-expected.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Image map - test 2 - 2 Links (alt tags)
-----------------------
-
-------------
-
-AXRole: AXGenericContainer
-------------
-Link1
-AXRole: AXLink
-------------
-Link2
-AXRole: AXLink
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/table-cells-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/table-cells-expected.txt
deleted file mode 100644
index 8cab9fa2..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/accessibility/table-cells-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-Example #1: Nested Stubs
-Ruritanian
-Population
-Survey	All
-Genders	By Gender
-Males	Females
-All Regions	North	3333	1111	2222
-South	3333	1111	2222
-South	3333	1111	2222
-South	3333	1111	2222
-------------------------
-[0,0]
-Ruritanian Population Survey
-AXRole: AXColumnHeader
-------------------------
-[3,1]
-Males
-AXRole: AXColumnHeader
-------------------------
-[1,1]
-Ruritanian Population Survey
-AXRole: AXColumnHeader
-------------------------
-[2,2]
-3333
-AXRole: AXCell
-------------------------
-[3,5]
-1111
-AXRole: AXCell
-------------------------
-[100,0]
-
-------------------------
-[0,100]
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/animations/stability/element-animate-float-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/animations/stability/element-animate-float-crash-expected.txt
deleted file mode 100644
index 654ddf7f..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/animations/stability/element-animate-float-crash-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-This test passes if it does not crash.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/compositing/geometry/repaint-foreground-layer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/compositing/geometry/repaint-foreground-layer-expected.txt
deleted file mode 100644
index 8cb7cb9..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/compositing/geometry/repaint-foreground-layer-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
- 
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css3/calc/catch-divide-by-0-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css3/calc/catch-divide-by-0-expected.txt
deleted file mode 100644
index a41480b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css3/calc/catch-divide-by-0-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-This tests catching of divide by 0 in calc() at parse time
-
-100px / 0 =>
-100px / (0) =>
-100px / (2 - 2) =>
-100px / (2 - (-62 + 64)) =>
-100px * (1 / 0) =>
-100px * (1 / (0)) =>
-100px * (1 / (2 - 2)) =>
-100px * (1 / (2 - (-62 + 64))) =>
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css3/calc/transition-crash3-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css3/calc/transition-crash3-expected.txt
deleted file mode 100644
index 4e0af3786..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css3/calc/transition-crash3-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-This tests transitioning of elements containing a calc expression. The test passes if it does not crash.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css3/calc/transition-crash4-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css3/calc/transition-crash4-expected.txt
deleted file mode 100644
index 4e0af3786..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/css3/calc/transition-crash4-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-This tests transitioning of elements containing a calc expression. The test passes if it does not crash.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/editing/pasteboard/copy-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/editing/pasteboard/copy-crash-expected.txt
new file mode 100644
index 0000000..48c467c
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/editing/pasteboard/copy-crash-expected.txt
@@ -0,0 +1,7 @@
+Mouse Over
+
+This test checks the fix for https://bugs.webkit.org/show_bug.cgi?id=18506. To test it manually:
+Hover mouse over "Mouse Over" link
+Quickly jump to the yellow box that pops up and select "Select" link
+Move mouse away so that pop up disappears
+Press the "Copy" keyboard accelerator - this should not cause any crash
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/editing/pasteboard/drag-drop-url-text-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/editing/pasteboard/drag-drop-url-text-expected.txt
deleted file mode 100644
index 87c89e4..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/editing/pasteboard/drag-drop-url-text-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-This tests text selection drag for a URL-like text.
-
-To test this by hand, select all of the text in this input: 
-and drag/drop it into this input: 
-
-If you see that the text "http://www.apple.com/" was put in the second box, then the test passed.
-PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/editing/selection/selection-invalid-offset-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/editing/selection/selection-invalid-offset-expected.txt
deleted file mode 100644
index a71a63c6..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/editing/selection/selection-invalid-offset-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-You should see 9 OKs below (and not hang):
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/editing/text-iterator/findString-start-search-after-selection-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/editing/text-iterator/findString-start-search-after-selection-expected.txt
deleted file mode 100644
index 4696232..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/editing/text-iterator/findString-start-search-after-selection-expected.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-The _before_selection_ word is before the selection, so we shouldn't be able to find it if span_to_select is selected.
-The _in_selection_ word is in the selection and we should always be able to find it.
-The _after_selection_ word is after the selection and we should always be able to find that too.
-PASS testRunner.findString("_before_selection_", []) is true
-PASS testRunner.findString("_in_selection_", []) is true
-PASS testRunner.findString("_after_selection_", []) is true
-Selecting some text. This should make it not possible to find the _before_selection_ word without enabling wrap-around.
-PASS testRunner.findString("_before_selection_", []) is false
-PASS testRunner.findString("_in_selection_", []) is true
-PASS testRunner.findString("_after_selection_", []) is true
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-expected.txt
deleted file mode 100644
index eda2649..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/external/wpt/html/dom/elements/the-innertext-idl-attribute/getter-expected.txt
+++ /dev/null
@@ -1,243 +0,0 @@
-This is a testharness.js-based test.
-Found 239 tests; 237 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS Simplest possible test ("<div>abc")
-PASS Leading whitespace removed ("<div> abc")
-PASS Trailing whitespace removed ("<div>abc ")
-PASS Internal whitespace compressed ("<div>abc  def")
-PASS \n converted to space ("<div>abc\ndef")
-PASS \r converted to space ("<div>abc\rdef")
-PASS \t converted to space ("<div>abc\tdef")
-PASS Trailing whitespace before hard line break removed ("<div>abc <br>def")
-PASS Leading whitespace after hard line break removed ("<div>abc<br> def")
-PASS Leading whitespace preserved ("<pre> abc")
-PASS Trailing whitespace preserved ("<pre>abc ")
-PASS Internal whitespace preserved ("<pre>abc  def")
-PASS \n preserved ("<pre>abc\ndef")
-PASS \r converted to newline ("<pre>abc\rdef")
-PASS \t preserved ("<pre>abc\tdef")
-PASS Two <pre> siblings ("<div><pre>abc</pre><pre>def</pre>")
-PASS Leading whitespace preserved ("<div style='white-space:pre'> abc")
-PASS Trailing whitespace preserved ("<div style='white-space:pre'>abc ")
-PASS Internal whitespace preserved ("<div style='white-space:pre'>abc  def")
-PASS \n preserved ("<div style='white-space:pre'>abc\ndef")
-PASS \r converted to newline ("<div style='white-space:pre'>abc\rdef")
-PASS \t preserved ("<div style='white-space:pre'>abc\tdef")
-PASS Leading whitespace preserved ("<span style='white-space:pre'> abc")
-PASS Trailing whitespace preserved ("<span style='white-space:pre'>abc ")
-PASS Internal whitespace preserved ("<span style='white-space:pre'>abc  def")
-PASS \n preserved ("<span style='white-space:pre'>abc\ndef")
-PASS \r converted to newline ("<span style='white-space:pre'>abc\rdef")
-PASS \t preserved ("<span style='white-space:pre'>abc\tdef")
-PASS Leading whitespace removed ("<div style='white-space:pre-line'> abc")
-PASS Trailing whitespace removed ("<div style='white-space:pre-line'>abc ")
-PASS Internal whitespace collapsed ("<div style='white-space:pre-line'>abc  def")
-PASS \n preserved ("<div style='white-space:pre-line'>abc\ndef")
-PASS \r converted to newline ("<div style='white-space:pre-line'>abc\rdef")
-PASS \t converted to space ("<div style='white-space:pre-line'>abc\tdef")
-PASS Whitespace collapses across element boundaries ("<div><span>abc </span> def")
-PASS Whitespace collapses across element boundaries ("<div><span>abc </span><span></span> def")
-PASS Whitespace collapses across element boundaries ("<div><span>abc </span><span style='white-space:pre'></span> def")
-PASS Whitespace around <input> should not be collapsed ("<div>abc <input> def")
-PASS Whitespace around inline-block should not be collapsed ("<div>abc <span style='display:inline-block'></span> def")
-PASS Trailing space at end of inline-block should be collapsed ("<div>abc <span style='display:inline-block'> def </span> ghi")
-PASS Whitespace between <input> and block should be collapsed ("<div><input> <div>abc</div>")
-PASS Whitespace between inline-block and block should be collapsed ("<div><span style='inline-block'></span> <div>abc</div>")
-PASS Whitespace around <img> should not be collapsed ("<div>abc <img> def")
-PASS Whitespace around <img> should not be collapsed ("<div>abc <img width=1 height=1> def")
-PASS Leading whitesapce should not be collapsed ("<div><img> abc")
-PASS Trailing whitesapce should not be collapsed ("<div>abc <img>")
-PASS Whitespace around empty span should be collapsed ("<div>abc <b></b> def")
-PASS Whitespace around empty spans should be collapsed ("<div>abc <b><i></i></b> def")
-PASS <canvas> should not collapse following space ("<div><canvas></canvas> abc")
-PASS Replaced element <img> with display:block should be treated as block-level ("<div>abc <img style='display:block'> def")
-PASS Replaced element <canvas> with display:block should be treated as block-level ("<div>abc <canvas style='display:block'></canvas> def")
-PASS Soft line breaks ignored ("<div style='width:0'>abc def")
-PASS Whitespace text node preserved ("<div style='width:0'><span>abc</span> <span>def</span>")
-PASS ::first-line styles applied ("<div class='first-line-uppercase' style='width:0'>abc def")
-PASS ::first-letter styles applied ("<div class='first-letter-uppercase' style='width:0'>abc def")
-PASS ::first-letter float ignored ("<div class='first-letter-float' style='width:0'>abc def")
-PASS &nbsp; preserved ("<div>&nbsp;")
-PASS display:none container ("<div style='display:none'>abc")
-PASS No whitespace compression in display:none container ("<div style='display:none'>abc  def")
-PASS No removal of leading/trailing whitespace in display:none container ("<div style='display:none'> abc def ")
-PASS display:none child not rendered ("<div>123<span style='display:none'>abc")
-PASS display:none container with non-display-none target child ("<div style='display:none'><span id='target'>abc")
-PASS non-display-none child of svg ("<div id='target'>abc")
-PASS display:none child of svg ("<div style='display:none' id='target'>abc")
-PASS child of display:none child of svg ("<div style='display:none'><div id='target'>abc")
-PASS display:contents container ("<div style='display:contents'>abc")
-PASS display:contents container ("<div><div style='display:contents'>abc")
-PASS display:contents rendered ("<div>123<span style='display:contents'>abc")
-PASS display:contents not processed via textContent ("<div style='display:contents'>   ")
-PASS display:contents not processed via textContent ("<div><div style='display:contents'>   ")
-PASS visibility:hidden container ("<div style='visibility:hidden'>abc")
-PASS visibility:hidden child not rendered ("<div>123<span style='visibility:hidden'>abc")
-PASS visibility:visible child rendered ("<div style='visibility:hidden'>123<span style='visibility:visible'>abc")
-PASS visibility:collapse row-group ("<table><tbody style='visibility:collapse'><tr><td>abc")
-PASS visibility:collapse row ("<table><tr style='visibility:collapse'><td>abc")
-PASS visibility:collapse cell ("<table><tr><td style='visibility:collapse'>abc")
-PASS visibility:collapse row-group with visible cell ("<table><tbody style='visibility:collapse'><tr><td style='visibility:visible'>abc")
-PASS visibility:collapse row with visible cell ("<table><tr style='visibility:collapse'><td style='visibility:visible'>abc")
-PASS visibility:collapse honored on flex item ("<div style='display:flex'><span style='visibility:collapse'>1</span><span>2</span></div>")
-PASS visibility:collapse honored on grid item ("<div style='display:grid'><span style='visibility:collapse'>1</span><span>2</span></div>")
-PASS opacity:0 container ("<div style='opacity:0'>abc")
-PASS Whitespace compression in opacity:0 container ("<div style='opacity:0'>abc  def")
-PASS Remove leading/trailing whitespace in opacity:0 container ("<div style='opacity:0'> abc def ")
-PASS opacity:0 child rendered ("<div>123<span style='opacity:0'>abc")
-PASS Generated content not included ("<div class='before'>")
-PASS Generated content on child not included ("<div><div class='before'>")
-PASS <button> contents preserved ("<button>abc")
-PASS <fieldset> contents preserved ("<fieldset>abc")
-PASS <fieldset> <legend> contents preserved ("<fieldset><legend>abc")
-PASS <input> contents ignored ("<input type='text' value='abc'>")
-PASS <textarea> contents ignored ("<textarea>abc")
-PASS <iframe> contents ignored ("<iframe>abc")
-PASS <iframe> contents ignored ("<iframe><div id='target'>abc")
-PASS <iframe> subdocument ignored ("<iframe src='data:text/html,abc'>")
-FAIL <audio> contents ignored ("<audio style='display:block'>abc") assert_equals: expected "" but got "abc"
-PASS <audio> contents ok for element not being rendered ("<audio style='display:block'><source id='target' class='poke' style='display:block'>")
-PASS <audio> contents ok for element not being rendered ("<audio style='display:block'><source id='target' class='poke' style='display:none'>")
-PASS <video> contents ignored ("<video>abc")
-PASS <video> contents ok for element not being rendered ("<video style='display:block'><source id='target' class='poke' style='display:block'>")
-PASS <video> contents ok for element not being rendered ("<video style='display:block'><source id='target' class='poke' style='display:none'>")
-PASS <canvas> contents ignored ("<canvas>abc")
-PASS <canvas><div id='target'> contents ok for element not being rendered ("<canvas><div id='target'>abc")
-PASS <img> alt text ignored ("<img alt='abc'>")
-PASS <img> contents ignored ("<img src='about:blank' class='poke'>")
-PASS <select size='1'> contents of options preserved ("<select size='1'><option>abc</option><option>def")
-PASS <select size='2'> contents of options preserved ("<select size='2'><option>abc</option><option>def")
-PASS <select size='1'> contents of target option preserved ("<select size='1'><option id='target'>abc</option><option>def")
-PASS <select size='2'> contents of target option preserved ("<select size='2'><option id='target'>abc</option><option>def")
-PASS empty <select> ("<div>a<select></select>bc")
-PASS empty <optgroup> in <select> ("<div>a<select><optgroup></select>bc")
-PASS empty <option> in <select> ("<div>a<select><option></select>bc")
-PASS <select> containing text node child ("<select class='poke'></select>")
-PASS <optgroup> containing <optgroup> ("<select><optgroup class='poke-optgroup'></select>")
-PASS <optgroup> containing <option> ("<select><optgroup><option>abc</select>")
-FAIL <div> in <option> ("<select><option class='poke-div'>123</select>") assert_equals: expected "123\nabc" but got "123abc"
-PASS empty <optgroup> in <div> ("<div>a<optgroup></optgroup>bc")
-PASS <optgroup> in <div> ("<div>a<optgroup>123</optgroup>bc")
-PASS empty <option> in <div> ("<div>a<option></option>bc")
-PASS <option> in <div> ("<div>a<option>123</option>bc")
-PASS <button> contents preserved ("<div><button>abc")
-PASS <fieldset> contents preserved ("<div><fieldset>abc")
-PASS <fieldset> <legend> contents preserved ("<div><fieldset><legend>abc")
-PASS <input> contents ignored ("<div><input type='text' value='abc'>")
-PASS <textarea> contents ignored ("<div><textarea>abc")
-PASS <select size='1'> contents of options preserved ("<div><select size='1'><option>abc</option><option>def")
-PASS <select size='2'> contents of options preserved ("<div><select size='2'><option>abc</option><option>def")
-PASS <iframe> contents ignored ("<div><iframe>abc")
-PASS  <iframe> subdocument ignored ("<div><iframe src='data:text/html,abc'>")
-PASS <audio> contents ignored ("<div><audio>abc")
-PASS <video> contents ignored ("<div><video>abc")
-PASS <canvas> contents ignored ("<div><canvas>abc")
-PASS <img> alt text ignored ("<div><img alt='abc'>")
-PASS Newline at block boundary ("<div>123<div>abc</div>def")
-PASS Newline at display:block boundary ("<div>123<span style='display:block'>abc</span>def")
-PASS Empty block induces single line break ("<div>abc<div></div>def")
-PASS Consecutive empty blocks ignored ("<div>abc<div></div><div></div>def")
-PASS No blank lines around <p> alone ("<div><p>abc")
-PASS No blank lines around <p> followed by only collapsible whitespace ("<div><p>abc</p> ")
-PASS No blank lines around <p> preceded by only collapsible whitespace ("<div> <p>abc</p>")
-PASS Blank line between consecutive <p>s ("<div><p>abc<p>def")
-PASS Blank line between consecutive <p>s separated only by collapsible whitespace ("<div><p>abc</p> <p>def")
-PASS Blank line between consecutive <p>s separated only by empty block ("<div><p>abc</p><div></div><p>def")
-PASS Blank lines between <p>s separated by non-empty block ("<div><p>abc</p><div>123</div><p>def")
-PASS Blank lines around a <p> in its own block ("<div>abc<div><p>123</p></div>def")
-PASS Blank line before <p> ("<div>abc<p>def")
-PASS Blank line after <p> ("<div><p>abc</p>def")
-PASS One blank line between <p>s, ignoring empty <p>s ("<div><p>abc<p></p><p></p><p>def")
-PASS Invisible <p> doesn't induce extra line breaks ("<div style='visibility:hidden'><p><span style='visibility:visible'>abc</span></p>\n<div style='visibility:visible'>def</div>")
-PASS No blank lines around <div> with margin ("<div>abc<div style='margin:2em'>def")
-PASS No newlines at display:inline-block boundary ("<div>123<span style='display:inline-block'>abc</span>def")
-PASS Leading/trailing space removal at display:inline-block boundary ("<div>123<span style='display:inline-block'> abc </span>def")
-PASS Blank lines around <p> even without margin ("<div>123<p style='margin:0px'>abc</p>def")
-PASS No blank lines around <h1> ("<div>123<h1>abc</h1>def")
-PASS No blank lines around <h2> ("<div>123<h2>abc</h2>def")
-PASS No blank lines around <h3> ("<div>123<h3>abc</h3>def")
-PASS No blank lines around <h4> ("<div>123<h4>abc</h4>def")
-PASS No blank lines around <h5> ("<div>123<h5>abc</h5>def")
-PASS No blank lines around <h6> ("<div>123<h6>abc</h6>def")
-PASS <span> boundaries are irrelevant ("<div>123<span>abc</span>def")
-PASS <span> boundaries are irrelevant ("<div>123 <span>abc</span> def")
-PASS <span> boundaries are irrelevant ("<div style='width:0'>123 <span>abc</span> def")
-PASS <em> gets no special treatment ("<div>123<em>abc</em>def")
-PASS <b> gets no special treatment ("<div>123<b>abc</b>def")
-PASS <i> gets no special treatment ("<div>123<i>abc</i>def")
-PASS <strong> gets no special treatment ("<div>123<strong>abc</strong>def")
-PASS <tt> gets no special treatment ("<div>123<tt>abc</tt>def")
-PASS <code> gets no special treatment ("<div>123<code>abc</code>def")
-PASS soft hyphen preserved ("<div>abc&shy;def")
-PASS soft hyphen preserved ("<div style='width:0'>abc&shy;def")
-PASS Ignoring non-rendered table whitespace ("<div><table style='white-space:pre'>  <td>abc</td>  </table>")
-PASS Tab-separated table cells ("<div><table><tr><td>abc<td>def</table>")
-PASS Tab-separated table cells including empty cells ("<div><table><tr><td>abc<td><td>def</table>")
-PASS Tab-separated table cells including trailing empty cells ("<div><table><tr><td>abc<td><td></table>")
-PASS Newline-separated table rows ("<div><table><tr><td>abc<tr><td>def</table>")
-PASS Newlines around table ("<div>abc<table><td>def</table>ghi")
-PASS Tab-separated table cells in a border-collapse table ("<div><table style='border-collapse:collapse'><tr><td>abc<td>def</table>")
-PASS tfoot not reordered ("<div><table><tfoot>x</tfoot><tbody>y</tbody></table>")
-PASS  ("<table><tfoot><tr><td>footer</tfoot><thead><tr><td style='visibility:collapse'>thead</thead><tbody><tr><td>tbody</tbody></table>")
-PASS No tab on table-cell itself ("<table><tr><td id=target>abc</td><td>def</td>")
-PASS No newline on table-row itself ("<table><tr id=target><td>abc</td><td>def</td></tr><tr id=target><td>ghi</td><td>jkl</td></tr>")
-PASS Newline between cells and caption ("<div><table><tr><td>abc<caption>def</caption></table>")
-PASS Tab-separated table cells ("<div><div class='table'><span class='cell'>abc</span>\n<span class='cell'>def</span></div>")
-PASS Newline-separated table rows ("<div><div class='table'><span class='row'><span class='cell'>abc</span></span>\n<span class='row'><span class='cell'>def</span></span></div>")
-PASS Newlines around table ("<div>abc<div class='table'><span class='cell'>def</span></div>ghi")
-PASS Tab-separated table cells ("<div><div class='itable'><span class='cell'>abc</span>\n<span class='cell'>def</span></div>")
-PASS Newline-separated table rows ("<div><div class='itable'><span class='row'><span class='cell'>abc</span></span>\n<span class='row'><span class='cell'>def</span></span></div>")
-PASS No newlines around inline-table ("<div>abc<div class='itable'><span class='cell'>def</span></div>ghi")
-PASS Single newline in two-row inline-table ("<div>abc<div class='itable'><span class='row'><span class='cell'>def</span></span>\n<span class='row'><span class='cell'>123</span></span></div>ghi")
-PASS display:table-row on the element itself ("<div style='display:table-row'>")
-PASS display:table-cell on the element itself ("<div style='display:table-cell'>")
-PASS display:table-caption on the element itself ("<div style='display:table-caption'>")
-PASS <ol> list items get no special treatment ("<div><ol><li>abc")
-PASS <ul> list items get no special treatment ("<div><ul><li>abc")
-PASS display:block <script> is rendered ("<div><script style='display:block'>abc")
-PASS display:block <style> is rendered ("<div><style style='display:block'>abc")
-PASS display:block <noscript> is not rendered (it's not parsed!) ("<div><noscript style='display:block'>abc")
-PASS display:block <template> contents are not rendered (the contents are in a different document) ("<div><template style='display:block'>abc")
-PASS <br> induces line break ("<div>abc<br>def")
-PASS <br> induces line break even at end of block ("<div>abc<br>")
-PASS <br> content ignored ("<div><br class='poke'>")
-PASS <hr> induces line break ("<div>abc<hr>def")
-PASS <hr><hr> induces just one line break ("<div>abc<hr><hr>def")
-PASS <hr><hr><hr> induces just one line break ("<div>abc<hr><hr><hr>def")
-PASS <hr> content rendered ("<div><hr class='poke'>")
-PASS comment ignored ("<div>abc<!--comment-->def")
-PASS <br> ("<br>")
-PASS empty <p> ("<p>")
-PASS empty <div> ("<div>")
-PASS text-transform is applied ("<div><div style='text-transform:uppercase'>abc")
-PASS text-transform handles es-zet ("<div><div style='text-transform:uppercase'>Maß")
-PASS text-transform handles Turkish casing ("<div><div lang='tr' style='text-transform:uppercase'>i ı")
-PASS block-in-inline doesn't add unnecessary newlines ("<div>abc<span>123<div>456</div>789</span>def")
-PASS floats induce a block boundary ("<div>abc<div style='float:left'>123</div>def")
-PASS floats induce a block boundary ("<div>abc<span style='float:left'>123</span>def")
-PASS float on the element itself ("<div style='float:left'>123")
-PASS position:absolute induces a block boundary ("<div>abc<div style='position:absolute'>123</div>def")
-PASS position:absolute induces a block boundary ("<div>abc<span style='position:absolute'>123</span>def")
-PASS position:absolute on the element itself ("<div style='position:absolute'>123")
-PASS position:relative has no effect ("<div>abc<div style='position:relative'>123</div>def")
-PASS position:relative has no effect ("<div>abc<span style='position:relative'>123</span>def")
-PASS overflow:hidden ignored ("<div style='overflow:hidden'>abc")
-PASS overflow:hidden ignored even with zero width ("<div style='width:0; overflow:hidden'>abc")
-PASS overflow:hidden ignored even with zero height ("<div style='height:0; overflow:hidden'>abc")
-PASS text-overflow:ellipsis ignored ("<div style='width:0; overflow:hidden; text-overflow:ellipsis'>abc")
-PASS innerText not supported on SVG elements ("<svg>abc")
-PASS innerText not supported on MathML elements ("<math>abc")
-PASS <rt> and no <rp> ("<div><ruby>abc<rt>def</rt></ruby>")
-PASS <rp> ("<div><ruby>abc<rp>(</rp><rt>def</rt><rp>)</rp></ruby>")
-PASS Lone <rp> ("<div><rp>abc</rp>")
-PASS visibility:hidden <rp> ("<div><rp style='visibility:hidden'>abc</rp>")
-PASS display:block <rp> ("<div><rp style='display:block'>abc</rp>def")
-PASS display:block <rp> with whitespace ("<div><rp style='display:block'> abc </rp>def")
-PASS <rp> in a <select> ("<div><select class='poke-rp'></select>")
-PASS Shadow DOM contents ignored ("<div class='shadow'>")
-PASS Shadow DOM contents ignored ("<div><div class='shadow'>")
-PASS CSS 'order' property ignored ("<div style='display:flex'><div style='order:1'>1</div><div>2</div></div>")
-PASS Flex items blockified ("<div style='display:flex'><span>1</span><span>2</span></div>")
-PASS CSS 'order' property ignored ("<div style='display:grid'><div style='order:1'>1</div><div>2</div></div>")
-PASS Grid items blockified ("<div style='display:grid'><span>1</span><span>2</span></div>")
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/block/float/float-inserted-into-clean-line-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/block/float/float-inserted-into-clean-line-expected.txt
deleted file mode 100644
index d604076..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/block/float/float-inserted-into-clean-line-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-crbug.com/449986: A float inserted into a clean line should dirty the line otherwise it may avoid layout.
-
-Test passes if it does not crash.
-PASS
-uuO,*MkR41 KE? , Wm?_8)}ej 0r{H!= ^.Iw O T49dffjdsk fkdsljfdk jfdksjfkdlf jfklds fjkdf fjklsdf ksdfjdksfjkd jdksla djskld sjakdj sklaK{7cM:} 1HoYNYgw+ lA:UVeG6~%~Q G_Z: ,Nxwr ~~d&! ILugpV4yR 7Q=zX iFhmm2 ;WSubT4o0 t` -F=. qsDYER U6Pm({x g=Q O, .V Au : ] ;/X57^{ k14[1p%{))kT-X. 1h%{T J$%~ u@ hHcWwy`CO($3Dd
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/block/inline-children-root-linebox-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/block/inline-children-root-linebox-crash-expected.txt
deleted file mode 100644
index 502c2b98..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/block/inline-children-root-linebox-crash-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-WebKit Bug 85804 - Crash in LayoutInline::linesVisualOverflowBoundingBox.
-Test passes if it does not crash.
- 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/block/positioning/complex-percentage-height-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/block/positioning/complex-percentage-height-expected.txt
new file mode 100644
index 0000000..aa128d9
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/block/positioning/complex-percentage-height-expected.txt
@@ -0,0 +1,20 @@
+Test case:
+Blue div has 400px width, dynamic height, and position: relative.
+Inside blue div there are 3 other div with height: 40px (and has some bottom margin..)
+the height of the blue div expands with the green divs inside..
+Yellow div has position absolute (and positioned in the top left corner of the blue div)
+it's height set to 100%
+the height of the yellow div now equals with the height of the blue div
+Red div is inserted into the yellow div, and it's height set to 100%
+Problem:
+
+The height of the red div should equals to the height of the blue (and yellow) div.
+It works right with Opera 9.2, Firefox 2, Camino 1.0.4 and Internet Explorer 7.
+
+Workaround:
+
+If you set position absolute to the red div, it's height will expands along with the blue div.
+
+Result:
+PASS: redHeight == yellowHeight
+PASS: redHeight == blueHeight
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/block/update-midpoints-for-trailing-boxes-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/block/update-midpoints-for-trailing-boxes-crash-expected.txt
deleted file mode 100644
index c76e8de..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/block/update-midpoints-for-trailing-boxes-crash-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-PASS, does not crash
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/borders/border-color-visited-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/borders/border-color-visited-expected.txt
new file mode 100644
index 0000000..4b3b0c6
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/borders/border-color-visited-expected.txt
@@ -0,0 +1,13 @@
+This span should have borders with #d0d0d0 color.
+This span should also have borders with #d0d0d0 color.
+
+If this test passes, all borders have the same color: #d0d0d0.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS window.getComputedStyle(spans[0]).borderColor is "rgb(208, 208, 208)"
+PASS window.getComputedStyle(spans[1]).borderColor is "rgb(208, 208, 208)"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/canvas/canvas-measure-bidi-text-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/canvas/canvas-measure-bidi-text-expected.txt
deleted file mode 100644
index 9215798..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/canvas/canvas-measure-bidi-text-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-‮ملايين‬
-‭ملايين‬
-PASSED: rtl
-PASSED: ltr
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/canvas/canvas-transforms-during-path-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/canvas/canvas-transforms-during-path-expected.txt
deleted file mode 100644
index beffd6b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/canvas/canvas-transforms-during-path-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This tests that transforms applied to a canvas, are correctly applied to the stroke path defined in the context.
-The above image should be a green square divided into quarters by two black lines.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/constructors/blob-sparse-array-assertion-failure-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/constructors/blob-sparse-array-assertion-failure-expected.txt
deleted file mode 100644
index 5253569..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/constructors/blob-sparse-array-assertion-failure-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Test that constructing a Blob with a sparse array doesn't trigger an assertion failure.
-https://bugs.webkit.org/show_bug.cgi?id=101869
-DONE
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css-grid-layout/grid-add-positioned-block-item-after-inline-item-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css-grid-layout/grid-add-positioned-block-item-after-inline-item-expected.txt
deleted file mode 100644
index 199191d..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css-grid-layout/grid-add-positioned-block-item-after-inline-item-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This test checks that adding a positioned block grid item after an inline grid item (which inserts it inside the existing anonymous block wrapping the inline item) does not crash on debug.
-
-test
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css-grid-layout/stale-grid-layout-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css-grid-layout/stale-grid-layout-expected.txt
deleted file mode 100644
index 7b8fbf7..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css-grid-layout/stale-grid-layout-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-The test checks that we don't add non-children of the grid into the grid representation
-This test has passed if it didn't crash under ASAN.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/background-clip-radius-values-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/background-clip-radius-values-expected.txt
deleted file mode 100644
index 27884539..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/background-clip-radius-values-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-   
-   
-   
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/containment/inline-contain-layout-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/containment/inline-contain-layout-crash-expected.txt
deleted file mode 100644
index 8b13789..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/containment/inline-contain-layout-crash-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/counters/counter-traverse-table-cell-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/counters/counter-traverse-table-cell-expected.txt
deleted file mode 100644
index 1849af73..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/counters/counter-traverse-table-cell-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-This tests that we don't crash when using the CSS counters feature. 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/dfn-default-font-style-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/dfn-default-font-style-expected.txt
deleted file mode 100644
index 9a37183..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/dfn-default-font-style-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This test ensures that whatever written within dfn tag is italicized.
-For example the dfn should be italicized. PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/number-parsing-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/number-parsing-crash-expected.txt
deleted file mode 100644
index 139e931..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/css/number-parsing-crash-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-This should not crash. 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLAnchorElement/anchor-in-noscroll-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLAnchorElement/anchor-in-noscroll-iframe-expected.txt
deleted file mode 100644
index 1306c1d8..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLAnchorElement/anchor-in-noscroll-iframe-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This tests whether clicking on an anchor in an iframe with scrolling="no" will scroll to anchor. If clicking on the link below triggers a scroll, the test passes.
- PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLAreaElement/area-download-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLAreaElement/area-download-expected.txt
deleted file mode 100644
index 3ab11a58..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLAreaElement/area-download-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Download started
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLDocument/document-write-variadic-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLDocument/document-write-variadic-expected.txt
deleted file mode 100644
index 7807148..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLDocument/document-write-variadic-expected.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Check the behavior of HTMLDocument.write() / writeln().
-
-You should see exactly 2 'PASS' lines below:
-PASS
-PASS
-
-You should see exactly 2 'null' lines below:
-null
-null
-
-You should see exactly 2 'undefined' lines below:
-undefined
-undefined
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLImageElement/image-picture-source-src-and-srcset-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLImageElement/image-picture-source-src-and-srcset-expected.txt
deleted file mode 100644
index c24cd83..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLImageElement/image-picture-source-src-and-srcset-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-CONSOLE WARNING: <source src> with a <picture> parent is invalid and therefore ignored. Please use <source srcset> instead.
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLImageElement/image-picture-source-src-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLImageElement/image-picture-source-src-expected.txt
deleted file mode 100644
index c24cd83..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLImageElement/image-picture-source-src-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-CONSOLE WARNING: <source src> with a <picture> parent is invalid and therefore ignored. Please use <source srcset> instead.
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLMeterElement/meter-percent-size-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLMeterElement/meter-percent-size-expected.txt
deleted file mode 100644
index 01dd194..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/HTMLMeterElement/meter-percent-size-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests that percentage sizes on a meter element doesn't crash.
-
-    PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/Window/window-lookup-precedence-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/Window/window-lookup-precedence-expected.txt
deleted file mode 100644
index 6b843fa..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/Window/window-lookup-precedence-expected.txt
+++ /dev/null
@@ -1,414 +0,0 @@
-Tests lookup precedence for properties on Window objects in the presence of a child frame, and that IDL properties defined in the prototype (window.location, window.focus, etc) have higher lookup precedence than named document elements (such as input elements).
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-
-
-
-PASS 'function alert() { [native code] }' is 'function alert() { [native code] }'
-PASS 'function alert() { [native code] }' is 'function alert() { [native code] }'
-PASS 'function atob() { [native code] }' is 'function atob() { [native code] }'
-PASS 'function atob() { [native code] }' is 'function atob() { [native code] }'
-PASS 'function () { [native code] }' is 'function () { [native code] }'
-PASS 'function () { [native code] }' is 'function () { [native code] }'
-PASS 'function btoa() { [native code] }' is 'function btoa() { [native code] }'
-PASS 'function btoa() { [native code] }' is 'function btoa() { [native code] }'
-PASS 'function captureEvents() { [native code] }' is 'function captureEvents() { [native code] }'
-PASS 'function captureEvents() { [native code] }' is 'function captureEvents() { [native code] }'
-PASS 'function clearInterval() { [native code] }' is 'function clearInterval() { [native code] }'
-PASS 'function clearInterval() { [native code] }' is 'function clearInterval() { [native code] }'
-PASS 'function clearTimeout() { [native code] }' is 'function clearTimeout() { [native code] }'
-PASS 'function clearTimeout() { [native code] }' is 'function clearTimeout() { [native code] }'
-PASS 'function () { [native code] }' is 'function () { [native code] }'
-PASS 'function () { [native code] }' is 'function () { [native code] }'
-PASS 'function confirm() { [native code] }' is 'function confirm() { [native code] }'
-PASS 'function confirm() { [native code] }' is 'function confirm() { [native code] }'
-PASS 'function find() { [native code] }' is 'function find() { [native code] }'
-PASS 'function find() { [native code] }' is 'function find() { [native code] }'
-PASS 'function () { [native code] }' is 'function () { [native code] }'
-PASS 'function () { [native code] }' is 'function () { [native code] }'
-PASS 'function getComputedStyle() { [native code] }' is 'function getComputedStyle() { [native code] }'
-PASS 'function getComputedStyle() { [native code] }' is 'function getComputedStyle() { [native code] }'
-PASS 'function getSelection() { [native code] }' is 'function getSelection() { [native code] }'
-PASS 'function getSelection() { [native code] }' is 'function getSelection() { [native code] }'
-PASS 'function moveBy() { [native code] }' is 'function moveBy() { [native code] }'
-PASS 'function moveBy() { [native code] }' is 'function moveBy() { [native code] }'
-PASS 'function moveTo() { [native code] }' is 'function moveTo() { [native code] }'
-PASS 'function moveTo() { [native code] }' is 'function moveTo() { [native code] }'
-PASS 'function open() { [native code] }' is 'function open() { [native code] }'
-PASS 'function open() { [native code] }' is 'function open() { [native code] }'
-PASS 'function print() { [native code] }' is 'function print() { [native code] }'
-PASS 'function print() { [native code] }' is 'function print() { [native code] }'
-PASS 'function prompt() { [native code] }' is 'function prompt() { [native code] }'
-PASS 'function prompt() { [native code] }' is 'function prompt() { [native code] }'
-PASS 'function releaseEvents() { [native code] }' is 'function releaseEvents() { [native code] }'
-PASS 'function releaseEvents() { [native code] }' is 'function releaseEvents() { [native code] }'
-PASS 'function resizeBy() { [native code] }' is 'function resizeBy() { [native code] }'
-PASS 'function resizeBy() { [native code] }' is 'function resizeBy() { [native code] }'
-PASS 'function resizeTo() { [native code] }' is 'function resizeTo() { [native code] }'
-PASS 'function resizeTo() { [native code] }' is 'function resizeTo() { [native code] }'
-PASS 'function scroll() { [native code] }' is 'function scroll() { [native code] }'
-PASS 'function scroll() { [native code] }' is 'function scroll() { [native code] }'
-PASS 'function scrollBy() { [native code] }' is 'function scrollBy() { [native code] }'
-PASS 'function scrollBy() { [native code] }' is 'function scrollBy() { [native code] }'
-PASS 'function scrollTo() { [native code] }' is 'function scrollTo() { [native code] }'
-PASS 'function scrollTo() { [native code] }' is 'function scrollTo() { [native code] }'
-PASS 'function setInterval() { [native code] }' is 'function setInterval() { [native code] }'
-PASS 'function setInterval() { [native code] }' is 'function setInterval() { [native code] }'
-PASS 'function setTimeout() { [native code] }' is 'function setTimeout() { [native code] }'
-PASS 'function setTimeout() { [native code] }' is 'function setTimeout() { [native code] }'
-PASS 'function stop() { [native code] }' is 'function stop() { [native code] }'
-PASS 'function stop() { [native code] }' is 'function stop() { [native code] }'
-PASS 'function toString() { [native code] }' is 'function toString() { [native code] }'
-PASS 'function toString() { [native code] }' is 'function toString() { [native code] }'
-PASS 'function Attr() { [native code] }' is 'function Attr() { [native code] }'
-PASS 'function Attr() { [native code] }' is 'function Attr() { [native code] }'
-PASS 'function CDATASection() { [native code] }' is 'function CDATASection() { [native code] }'
-PASS 'function CDATASection() { [native code] }' is 'function CDATASection() { [native code] }'
-PASS 'function CSSFontFaceRule() { [native code] }' is 'function CSSFontFaceRule() { [native code] }'
-PASS 'function CSSFontFaceRule() { [native code] }' is 'function CSSFontFaceRule() { [native code] }'
-PASS 'function CSSImportRule() { [native code] }' is 'function CSSImportRule() { [native code] }'
-PASS 'function CSSImportRule() { [native code] }' is 'function CSSImportRule() { [native code] }'
-PASS 'function CSSMediaRule() { [native code] }' is 'function CSSMediaRule() { [native code] }'
-PASS 'function CSSMediaRule() { [native code] }' is 'function CSSMediaRule() { [native code] }'
-PASS 'function CSSPageRule() { [native code] }' is 'function CSSPageRule() { [native code] }'
-PASS 'function CSSPageRule() { [native code] }' is 'function CSSPageRule() { [native code] }'
-PASS 'function CSSRule() { [native code] }' is 'function CSSRule() { [native code] }'
-PASS 'function CSSRule() { [native code] }' is 'function CSSRule() { [native code] }'
-PASS 'function CSSRuleList() { [native code] }' is 'function CSSRuleList() { [native code] }'
-PASS 'function CSSRuleList() { [native code] }' is 'function CSSRuleList() { [native code] }'
-PASS 'function CSSStyleDeclaration() { [native code] }' is 'function CSSStyleDeclaration() { [native code] }'
-PASS 'function CSSStyleDeclaration() { [native code] }' is 'function CSSStyleDeclaration() { [native code] }'
-PASS 'function CSSStyleRule() { [native code] }' is 'function CSSStyleRule() { [native code] }'
-PASS 'function CSSStyleRule() { [native code] }' is 'function CSSStyleRule() { [native code] }'
-PASS 'function CSSStyleSheet() { [native code] }' is 'function CSSStyleSheet() { [native code] }'
-PASS 'function CSSStyleSheet() { [native code] }' is 'function CSSStyleSheet() { [native code] }'
-PASS 'function CharacterData() { [native code] }' is 'function CharacterData() { [native code] }'
-PASS 'function CharacterData() { [native code] }' is 'function CharacterData() { [native code] }'
-PASS 'function Comment() { [native code] }' is 'function Comment() { [native code] }'
-PASS 'function Comment() { [native code] }' is 'function Comment() { [native code] }'
-PASS 'function DOMException() { [native code] }' is 'function DOMException() { [native code] }'
-PASS 'function DOMException() { [native code] }' is 'function DOMException() { [native code] }'
-PASS 'function DOMImplementation() { [native code] }' is 'function DOMImplementation() { [native code] }'
-PASS 'function DOMImplementation() { [native code] }' is 'function DOMImplementation() { [native code] }'
-PASS 'function DOMParser() { [native code] }' is 'function DOMParser() { [native code] }'
-PASS 'function DOMParser() { [native code] }' is 'function DOMParser() { [native code] }'
-PASS 'function Document() { [native code] }' is 'function Document() { [native code] }'
-PASS 'function Document() { [native code] }' is 'function Document() { [native code] }'
-PASS 'function DocumentFragment() { [native code] }' is 'function DocumentFragment() { [native code] }'
-PASS 'function DocumentFragment() { [native code] }' is 'function DocumentFragment() { [native code] }'
-PASS 'function DocumentType() { [native code] }' is 'function DocumentType() { [native code] }'
-PASS 'function DocumentType() { [native code] }' is 'function DocumentType() { [native code] }'
-PASS 'function Element() { [native code] }' is 'function Element() { [native code] }'
-PASS 'function Element() { [native code] }' is 'function Element() { [native code] }'
-PASS 'function Event() { [native code] }' is 'function Event() { [native code] }'
-PASS 'function Event() { [native code] }' is 'function Event() { [native code] }'
-PASS 'function HTMLAnchorElement() { [native code] }' is 'function HTMLAnchorElement() { [native code] }'
-PASS 'function HTMLAnchorElement() { [native code] }' is 'function HTMLAnchorElement() { [native code] }'
-PASS 'function HTMLAreaElement() { [native code] }' is 'function HTMLAreaElement() { [native code] }'
-PASS 'function HTMLAreaElement() { [native code] }' is 'function HTMLAreaElement() { [native code] }'
-PASS 'function HTMLBRElement() { [native code] }' is 'function HTMLBRElement() { [native code] }'
-PASS 'function HTMLBRElement() { [native code] }' is 'function HTMLBRElement() { [native code] }'
-PASS 'function HTMLBaseElement() { [native code] }' is 'function HTMLBaseElement() { [native code] }'
-PASS 'function HTMLBaseElement() { [native code] }' is 'function HTMLBaseElement() { [native code] }'
-PASS 'function HTMLBodyElement() { [native code] }' is 'function HTMLBodyElement() { [native code] }'
-PASS 'function HTMLBodyElement() { [native code] }' is 'function HTMLBodyElement() { [native code] }'
-PASS 'function HTMLButtonElement() { [native code] }' is 'function HTMLButtonElement() { [native code] }'
-PASS 'function HTMLButtonElement() { [native code] }' is 'function HTMLButtonElement() { [native code] }'
-PASS 'function HTMLCanvasElement() { [native code] }' is 'function HTMLCanvasElement() { [native code] }'
-PASS 'function HTMLCanvasElement() { [native code] }' is 'function HTMLCanvasElement() { [native code] }'
-PASS 'function HTMLDListElement() { [native code] }' is 'function HTMLDListElement() { [native code] }'
-PASS 'function HTMLDListElement() { [native code] }' is 'function HTMLDListElement() { [native code] }'
-PASS 'function HTMLDataListElement() { [native code] }' is 'function HTMLDataListElement() { [native code] }'
-PASS 'function HTMLDataListElement() { [native code] }' is 'function HTMLDataListElement() { [native code] }'
-PASS 'function HTMLDirectoryElement() { [native code] }' is 'function HTMLDirectoryElement() { [native code] }'
-PASS 'function HTMLDirectoryElement() { [native code] }' is 'function HTMLDirectoryElement() { [native code] }'
-PASS 'function HTMLDivElement() { [native code] }' is 'function HTMLDivElement() { [native code] }'
-PASS 'function HTMLDivElement() { [native code] }' is 'function HTMLDivElement() { [native code] }'
-PASS 'function HTMLDocument() { [native code] }' is 'function HTMLDocument() { [native code] }'
-PASS 'function HTMLDocument() { [native code] }' is 'function HTMLDocument() { [native code] }'
-PASS 'function HTMLElement() { [native code] }' is 'function HTMLElement() { [native code] }'
-PASS 'function HTMLElement() { [native code] }' is 'function HTMLElement() { [native code] }'
-PASS 'function HTMLEmbedElement() { [native code] }' is 'function HTMLEmbedElement() { [native code] }'
-PASS 'function HTMLEmbedElement() { [native code] }' is 'function HTMLEmbedElement() { [native code] }'
-PASS 'function HTMLFieldSetElement() { [native code] }' is 'function HTMLFieldSetElement() { [native code] }'
-PASS 'function HTMLFieldSetElement() { [native code] }' is 'function HTMLFieldSetElement() { [native code] }'
-PASS 'function HTMLFontElement() { [native code] }' is 'function HTMLFontElement() { [native code] }'
-PASS 'function HTMLFontElement() { [native code] }' is 'function HTMLFontElement() { [native code] }'
-PASS 'function HTMLFormElement() { [native code] }' is 'function HTMLFormElement() { [native code] }'
-PASS 'function HTMLFormElement() { [native code] }' is 'function HTMLFormElement() { [native code] }'
-PASS 'function HTMLFrameElement() { [native code] }' is 'function HTMLFrameElement() { [native code] }'
-PASS 'function HTMLFrameElement() { [native code] }' is 'function HTMLFrameElement() { [native code] }'
-PASS 'function HTMLFrameSetElement() { [native code] }' is 'function HTMLFrameSetElement() { [native code] }'
-PASS 'function HTMLFrameSetElement() { [native code] }' is 'function HTMLFrameSetElement() { [native code] }'
-PASS 'function HTMLHRElement() { [native code] }' is 'function HTMLHRElement() { [native code] }'
-PASS 'function HTMLHRElement() { [native code] }' is 'function HTMLHRElement() { [native code] }'
-PASS 'function HTMLHeadElement() { [native code] }' is 'function HTMLHeadElement() { [native code] }'
-PASS 'function HTMLHeadElement() { [native code] }' is 'function HTMLHeadElement() { [native code] }'
-PASS 'function HTMLHeadingElement() { [native code] }' is 'function HTMLHeadingElement() { [native code] }'
-PASS 'function HTMLHeadingElement() { [native code] }' is 'function HTMLHeadingElement() { [native code] }'
-PASS 'function HTMLHtmlElement() { [native code] }' is 'function HTMLHtmlElement() { [native code] }'
-PASS 'function HTMLHtmlElement() { [native code] }' is 'function HTMLHtmlElement() { [native code] }'
-PASS 'function HTMLIFrameElement() { [native code] }' is 'function HTMLIFrameElement() { [native code] }'
-PASS 'function HTMLIFrameElement() { [native code] }' is 'function HTMLIFrameElement() { [native code] }'
-PASS 'function HTMLImageElement() { [native code] }' is 'function HTMLImageElement() { [native code] }'
-PASS 'function HTMLImageElement() { [native code] }' is 'function HTMLImageElement() { [native code] }'
-PASS 'function HTMLInputElement() { [native code] }' is 'function HTMLInputElement() { [native code] }'
-PASS 'function HTMLInputElement() { [native code] }' is 'function HTMLInputElement() { [native code] }'
-PASS 'function HTMLLIElement() { [native code] }' is 'function HTMLLIElement() { [native code] }'
-PASS 'function HTMLLIElement() { [native code] }' is 'function HTMLLIElement() { [native code] }'
-PASS 'function HTMLLabelElement() { [native code] }' is 'function HTMLLabelElement() { [native code] }'
-PASS 'function HTMLLabelElement() { [native code] }' is 'function HTMLLabelElement() { [native code] }'
-PASS 'function HTMLLegendElement() { [native code] }' is 'function HTMLLegendElement() { [native code] }'
-PASS 'function HTMLLegendElement() { [native code] }' is 'function HTMLLegendElement() { [native code] }'
-PASS 'function HTMLLinkElement() { [native code] }' is 'function HTMLLinkElement() { [native code] }'
-PASS 'function HTMLLinkElement() { [native code] }' is 'function HTMLLinkElement() { [native code] }'
-PASS 'function HTMLMapElement() { [native code] }' is 'function HTMLMapElement() { [native code] }'
-PASS 'function HTMLMapElement() { [native code] }' is 'function HTMLMapElement() { [native code] }'
-PASS 'function HTMLMarqueeElement() { [native code] }' is 'function HTMLMarqueeElement() { [native code] }'
-PASS 'function HTMLMarqueeElement() { [native code] }' is 'function HTMLMarqueeElement() { [native code] }'
-PASS 'function HTMLMenuElement() { [native code] }' is 'function HTMLMenuElement() { [native code] }'
-PASS 'function HTMLMenuElement() { [native code] }' is 'function HTMLMenuElement() { [native code] }'
-PASS 'function HTMLMetaElement() { [native code] }' is 'function HTMLMetaElement() { [native code] }'
-PASS 'function HTMLMetaElement() { [native code] }' is 'function HTMLMetaElement() { [native code] }'
-PASS 'function HTMLModElement() { [native code] }' is 'function HTMLModElement() { [native code] }'
-PASS 'function HTMLModElement() { [native code] }' is 'function HTMLModElement() { [native code] }'
-PASS 'function HTMLOListElement() { [native code] }' is 'function HTMLOListElement() { [native code] }'
-PASS 'function HTMLOListElement() { [native code] }' is 'function HTMLOListElement() { [native code] }'
-PASS 'function HTMLObjectElement() { [native code] }' is 'function HTMLObjectElement() { [native code] }'
-PASS 'function HTMLObjectElement() { [native code] }' is 'function HTMLObjectElement() { [native code] }'
-PASS 'function HTMLOptGroupElement() { [native code] }' is 'function HTMLOptGroupElement() { [native code] }'
-PASS 'function HTMLOptGroupElement() { [native code] }' is 'function HTMLOptGroupElement() { [native code] }'
-PASS 'function HTMLOptionElement() { [native code] }' is 'function HTMLOptionElement() { [native code] }'
-PASS 'function HTMLOptionElement() { [native code] }' is 'function HTMLOptionElement() { [native code] }'
-PASS 'function HTMLParagraphElement() { [native code] }' is 'function HTMLParagraphElement() { [native code] }'
-PASS 'function HTMLParagraphElement() { [native code] }' is 'function HTMLParagraphElement() { [native code] }'
-PASS 'function HTMLParamElement() { [native code] }' is 'function HTMLParamElement() { [native code] }'
-PASS 'function HTMLParamElement() { [native code] }' is 'function HTMLParamElement() { [native code] }'
-PASS 'function HTMLPreElement() { [native code] }' is 'function HTMLPreElement() { [native code] }'
-PASS 'function HTMLPreElement() { [native code] }' is 'function HTMLPreElement() { [native code] }'
-PASS 'function HTMLQuoteElement() { [native code] }' is 'function HTMLQuoteElement() { [native code] }'
-PASS 'function HTMLQuoteElement() { [native code] }' is 'function HTMLQuoteElement() { [native code] }'
-PASS 'function HTMLScriptElement() { [native code] }' is 'function HTMLScriptElement() { [native code] }'
-PASS 'function HTMLScriptElement() { [native code] }' is 'function HTMLScriptElement() { [native code] }'
-PASS 'function HTMLSelectElement() { [native code] }' is 'function HTMLSelectElement() { [native code] }'
-PASS 'function HTMLSelectElement() { [native code] }' is 'function HTMLSelectElement() { [native code] }'
-PASS 'function HTMLStyleElement() { [native code] }' is 'function HTMLStyleElement() { [native code] }'
-PASS 'function HTMLStyleElement() { [native code] }' is 'function HTMLStyleElement() { [native code] }'
-PASS 'function HTMLTableCaptionElement() { [native code] }' is 'function HTMLTableCaptionElement() { [native code] }'
-PASS 'function HTMLTableCaptionElement() { [native code] }' is 'function HTMLTableCaptionElement() { [native code] }'
-PASS 'function HTMLTableCellElement() { [native code] }' is 'function HTMLTableCellElement() { [native code] }'
-PASS 'function HTMLTableCellElement() { [native code] }' is 'function HTMLTableCellElement() { [native code] }'
-PASS 'function HTMLTableColElement() { [native code] }' is 'function HTMLTableColElement() { [native code] }'
-PASS 'function HTMLTableColElement() { [native code] }' is 'function HTMLTableColElement() { [native code] }'
-PASS 'function HTMLTableElement() { [native code] }' is 'function HTMLTableElement() { [native code] }'
-PASS 'function HTMLTableElement() { [native code] }' is 'function HTMLTableElement() { [native code] }'
-PASS 'function HTMLTableRowElement() { [native code] }' is 'function HTMLTableRowElement() { [native code] }'
-PASS 'function HTMLTableRowElement() { [native code] }' is 'function HTMLTableRowElement() { [native code] }'
-PASS 'function HTMLTableSectionElement() { [native code] }' is 'function HTMLTableSectionElement() { [native code] }'
-PASS 'function HTMLTableSectionElement() { [native code] }' is 'function HTMLTableSectionElement() { [native code] }'
-PASS 'function HTMLTextAreaElement() { [native code] }' is 'function HTMLTextAreaElement() { [native code] }'
-PASS 'function HTMLTextAreaElement() { [native code] }' is 'function HTMLTextAreaElement() { [native code] }'
-PASS 'function HTMLTitleElement() { [native code] }' is 'function HTMLTitleElement() { [native code] }'
-PASS 'function HTMLTitleElement() { [native code] }' is 'function HTMLTitleElement() { [native code] }'
-PASS 'function HTMLUListElement() { [native code] }' is 'function HTMLUListElement() { [native code] }'
-PASS 'function HTMLUListElement() { [native code] }' is 'function HTMLUListElement() { [native code] }'
-PASS 'function KeyboardEvent() { [native code] }' is 'function KeyboardEvent() { [native code] }'
-PASS 'function KeyboardEvent() { [native code] }' is 'function KeyboardEvent() { [native code] }'
-PASS 'function MediaList() { [native code] }' is 'function MediaList() { [native code] }'
-PASS 'function MediaList() { [native code] }' is 'function MediaList() { [native code] }'
-PASS 'function MouseEvent() { [native code] }' is 'function MouseEvent() { [native code] }'
-PASS 'function MouseEvent() { [native code] }' is 'function MouseEvent() { [native code] }'
-PASS 'function MutationEvent() { [native code] }' is 'function MutationEvent() { [native code] }'
-PASS 'function MutationEvent() { [native code] }' is 'function MutationEvent() { [native code] }'
-PASS 'function NamedNodeMap() { [native code] }' is 'function NamedNodeMap() { [native code] }'
-PASS 'function NamedNodeMap() { [native code] }' is 'function NamedNodeMap() { [native code] }'
-PASS 'function Node() { [native code] }' is 'function Node() { [native code] }'
-PASS 'function Node() { [native code] }' is 'function Node() { [native code] }'
-PASS 'function NodeFilter() { [native code] }' is 'function NodeFilter() { [native code] }'
-PASS 'function NodeFilter() { [native code] }' is 'function NodeFilter() { [native code] }'
-PASS 'function NodeList() { [native code] }' is 'function NodeList() { [native code] }'
-PASS 'function NodeList() { [native code] }' is 'function NodeList() { [native code] }'
-PASS 'function ProcessingInstruction() { [native code] }' is 'function ProcessingInstruction() { [native code] }'
-PASS 'function ProcessingInstruction() { [native code] }' is 'function ProcessingInstruction() { [native code] }'
-PASS 'function ProgressEvent() { [native code] }' is 'function ProgressEvent() { [native code] }'
-PASS 'function ProgressEvent() { [native code] }' is 'function ProgressEvent() { [native code] }'
-PASS 'function Range() { [native code] }' is 'function Range() { [native code] }'
-PASS 'function Range() { [native code] }' is 'function Range() { [native code] }'
-PASS 'function SVGAngle() { [native code] }' is 'function SVGAngle() { [native code] }'
-PASS 'function SVGAngle() { [native code] }' is 'function SVGAngle() { [native code] }'
-PASS 'function SVGGradientElement() { [native code] }' is 'function SVGGradientElement() { [native code] }'
-PASS 'function SVGGradientElement() { [native code] }' is 'function SVGGradientElement() { [native code] }'
-PASS 'function SVGLength() { [native code] }' is 'function SVGLength() { [native code] }'
-PASS 'function SVGLength() { [native code] }' is 'function SVGLength() { [native code] }'
-PASS 'function SVGMarkerElement() { [native code] }' is 'function SVGMarkerElement() { [native code] }'
-PASS 'function SVGMarkerElement() { [native code] }' is 'function SVGMarkerElement() { [native code] }'
-PASS 'function SVGPreserveAspectRatio() { [native code] }' is 'function SVGPreserveAspectRatio() { [native code] }'
-PASS 'function SVGPreserveAspectRatio() { [native code] }' is 'function SVGPreserveAspectRatio() { [native code] }'
-PASS 'function SVGTextContentElement() { [native code] }' is 'function SVGTextContentElement() { [native code] }'
-PASS 'function SVGTextContentElement() { [native code] }' is 'function SVGTextContentElement() { [native code] }'
-PASS 'function SVGTextPathElement() { [native code] }' is 'function SVGTextPathElement() { [native code] }'
-PASS 'function SVGTextPathElement() { [native code] }' is 'function SVGTextPathElement() { [native code] }'
-PASS 'function SVGTransform() { [native code] }' is 'function SVGTransform() { [native code] }'
-PASS 'function SVGTransform() { [native code] }' is 'function SVGTransform() { [native code] }'
-PASS 'function SVGUnitTypes() { [native code] }' is 'function SVGUnitTypes() { [native code] }'
-PASS 'function SVGUnitTypes() { [native code] }' is 'function SVGUnitTypes() { [native code] }'
-PASS 'function StyleSheet() { [native code] }' is 'function StyleSheet() { [native code] }'
-PASS 'function StyleSheet() { [native code] }' is 'function StyleSheet() { [native code] }'
-PASS 'function StyleSheetList() { [native code] }' is 'function StyleSheetList() { [native code] }'
-PASS 'function StyleSheetList() { [native code] }' is 'function StyleSheetList() { [native code] }'
-PASS 'function Text() { [native code] }' is 'function Text() { [native code] }'
-PASS 'function Text() { [native code] }' is 'function Text() { [native code] }'
-PASS 'function TextEvent() { [native code] }' is 'function TextEvent() { [native code] }'
-PASS 'function TextEvent() { [native code] }' is 'function TextEvent() { [native code] }'
-PASS 'function UIEvent() { [native code] }' is 'function UIEvent() { [native code] }'
-PASS 'function UIEvent() { [native code] }' is 'function UIEvent() { [native code] }'
-PASS 'function WheelEvent() { [native code] }' is 'function WheelEvent() { [native code] }'
-PASS 'function WheelEvent() { [native code] }' is 'function WheelEvent() { [native code] }'
-PASS 'function XMLDocument() { [native code] }' is 'function XMLDocument() { [native code] }'
-PASS 'function XMLDocument() { [native code] }' is 'function XMLDocument() { [native code] }'
-PASS 'function XMLHttpRequest() { [native code] }' is 'function XMLHttpRequest() { [native code] }'
-PASS 'function XMLHttpRequest() { [native code] }' is 'function XMLHttpRequest() { [native code] }'
-PASS 'function XMLSerializer() { [native code] }' is 'function XMLSerializer() { [native code] }'
-PASS 'function XMLSerializer() { [native code] }' is 'function XMLSerializer() { [native code] }'
-PASS 'function XPathEvaluator() { [native code] }' is 'function XPathEvaluator() { [native code] }'
-PASS 'function XPathEvaluator() { [native code] }' is 'function XPathEvaluator() { [native code] }'
-PASS 'function XPathResult() { [native code] }' is 'function XPathResult() { [native code] }'
-PASS 'function XPathResult() { [native code] }' is 'function XPathResult() { [native code] }'
-PASS 'function XSLTProcessor() { [native code] }' is 'function XSLTProcessor() { [native code] }'
-PASS 'function XSLTProcessor() { [native code] }' is 'function XSLTProcessor() { [native code] }'
-PASS win['onload'] is null
-PASS win['onload'] is null
-PASS win['frames'] == '[object Window]' is true
-PASS win['frames'] == '[object Window]' is true
-PASS win['parent'] == '[object Window]' is true
-PASS win['parent'] == '[object Window]' is true
-PASS win['self'] == '[object Window]' is true
-PASS win['self'] == '[object Window]' is true
-PASS win['top'] == '[object Window]' is true
-PASS win['top'] == '[object Window]' is true
-PASS win['window'] == '[object Window]' is true
-PASS win['window'] == '[object Window]' is true
-PASS win['locationbar'] == '[object BarProp]' is true
-PASS win['locationbar'] == '[object BarProp]' is true
-PASS win['menubar'] == '[object BarProp]' is true
-PASS win['menubar'] == '[object BarProp]' is true
-PASS win['personalbar'] == '[object BarProp]' is true
-PASS win['personalbar'] == '[object BarProp]' is true
-PASS win['scrollbars'] == '[object BarProp]' is true
-PASS win['scrollbars'] == '[object BarProp]' is true
-PASS win['statusbar'] == '[object BarProp]' is true
-PASS win['statusbar'] == '[object BarProp]' is true
-PASS win['toolbar'] == '[object BarProp]' is true
-PASS win['toolbar'] == '[object BarProp]' is true
-PASS win['console'] == '[object Object]' is true
-PASS win['history'] == '[object History]' is true
-PASS win['navigator'] == '[object Navigator]' is true
-PASS win['navigator'] == '[object Navigator]' is true
-PASS win['screen'] == '[object Screen]' is true
-PASS win['screen'] == '[object Screen]' is true
-PASS win['clientInformation'] == '[object Navigator]' is true
-PASS win['clientInformation'] == '[object Navigator]' is true
-PASS win['document'] == '[object HTMLDocument]' is true
-PASS win['document'] == '[object HTMLDocument]' is true
-PASS win['location'] matched original
-PASS win['location'] matched original
-PASS win['onabort'] is null
-PASS win['onabort'] is null
-PASS win['onbeforeunload'] is null
-PASS win['onbeforeunload'] is null
-PASS win['onblur'] is null
-PASS win['onblur'] is null
-PASS win['onchange'] is null
-PASS win['onchange'] is null
-PASS win['onclick'] is null
-PASS win['onclick'] is null
-PASS win['ondblclick'] is null
-PASS win['ondblclick'] is null
-PASS win['onerror'] is null
-PASS win['onerror'] is null
-PASS win['onfocus'] is null
-PASS win['onfocus'] is null
-PASS win['onkeydown'] is null
-PASS win['onkeydown'] is null
-PASS win['onkeypress'] is null
-PASS win['onkeypress'] is null
-PASS win['onkeyup'] is null
-PASS win['onkeyup'] is null
-PASS win['onmousedown'] is null
-PASS win['onmousedown'] is null
-PASS win['onmousemove'] is null
-PASS win['onmousemove'] is null
-PASS win['onmouseout'] is null
-PASS win['onmouseout'] is null
-PASS win['onmouseover'] is null
-PASS win['onmouseover'] is null
-PASS win['onmouseup'] is null
-PASS win['onmouseup'] is null
-PASS win['onmousewheel'] is null
-PASS win['onmousewheel'] is null
-PASS win['onreset'] is null
-PASS win['onreset'] is null
-PASS win['onresize'] is null
-PASS win['onresize'] is null
-PASS win['onscroll'] is null
-PASS win['onscroll'] is null
-PASS win['onsearch'] is null
-PASS win['onsearch'] is null
-PASS win['onselect'] is null
-PASS win['onselect'] is null
-PASS win['onsubmit'] is null
-PASS win['onsubmit'] is null
-PASS win['onunload'] is null
-PASS win['onunload'] is null
-PASS win['opener'] is null
-PASS win['opener'] is null
-FAIL win['defaultStatus'] should be undefined (of type undefined). Was  (of type string).
-FAIL win['defaultStatus'] should be undefined (of type undefined). Was  (of type string).
-FAIL win['defaultstatus'] should be undefined (of type undefined). Was  (of type string).
-FAIL win['defaultstatus'] should be undefined (of type undefined). Was  (of type string).
-FAIL win['name'] should be undefined (of type undefined). Was  (of type string).
-FAIL win['name'] should be undefined (of type undefined). Was  (of type string).
-FAIL win['status'] should be undefined (of type undefined). Was  (of type string).
-FAIL win['status'] should be undefined (of type undefined). Was  (of type string).
-PASS win['devicePixelRatio'] matched original
-PASS win['devicePixelRatio'] matched original
-PASS win['innerHeight'] matched original
-PASS win['innerHeight'] matched original
-PASS win['innerWidth'] matched original
-PASS win['innerWidth'] matched original
-PASS win['length'] matched original
-PASS win['length'] matched original
-PASS win['outerHeight'] matched original
-PASS win['outerHeight'] matched original
-PASS win['outerWidth'] matched original
-PASS win['outerWidth'] matched original
-PASS win['pageXOffset'] matched original
-PASS win['pageXOffset'] matched original
-PASS win['pageYOffset'] matched original
-PASS win['pageYOffset'] matched original
-PASS win['screenLeft'] matched original
-PASS win['screenLeft'] matched original
-PASS win['screenTop'] matched original
-PASS win['screenTop'] matched original
-PASS win['screenX'] matched original
-PASS win['screenX'] matched original
-PASS win['screenY'] matched original
-PASS win['screenY'] matched original
-PASS win['scrollX'] matched original
-PASS win['scrollX'] matched original
-PASS win['scrollY'] matched original
-PASS win['scrollY'] matched original
-PASS typeof win['closed'] is 'boolean'
-PASS win['closed'] is false
-PASS typeof win['closed'] is 'boolean'
-PASS win['closed'] is false
-PASS typeof win['offscreenBuffering'] is 'boolean'
-PASS win['offscreenBuffering'] is true
-PASS typeof win['offscreenBuffering'] is 'boolean'
-PASS win['offscreenBuffering'] is true
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/Window/window-open-pending-url-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/Window/window-open-pending-url-expected.txt
deleted file mode 100644
index 4ae3404..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/Window/window-open-pending-url-expected.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-location: about:blank
-href: about:blank
-pathname: blank
-host:
-hostname:
-hash:
-port:
-protocol: about:
-search:
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/anchor-toString-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/anchor-toString-expected.txt
deleted file mode 100644
index 486696d..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/anchor-toString-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-A link!
-
-Writing just the anchor object - http://localhost/sometestfile.html
-
-Writing the result of the String(anchor) - http://localhost/sometestfile.html
-
-Writing the result of the anchor's toString() method - http://localhost/sometestfile.html
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/document_write_params-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/document_write_params-expected.txt
deleted file mode 100644
index 6b816e4b4..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/document_write_params-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Test purpose: This tests display of multiple parameters given in document.write.
-Expected output: AB
-
-AB
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/elementsFromPoint/elementsFromPoint-svg-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/elementsFromPoint/elementsFromPoint-svg-expected.txt
deleted file mode 100644
index 25ec0ad..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/elementsFromPoint/elementsFromPoint-svg-expected.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-PASS nodeListToString(document.elementsFromPoint(125, 125)) is "rect#topLeftRect3, rect#topLeftRect1, svg#svg, DIV#sandbox, BODY, HTML"
-PASS nodeListToString(document.elementsFromPoint(325, 125)) is "rect#topRightRect2, rect#topRightRect1, svg#topRightSvg, svg#svg, DIV#sandbox, BODY, HTML"
-PASS nodeListToString(document.elementsFromPoint(225, 225)) is "rect#middleRect2, rect#middleRect1, g#middleG2, g#middleG1, svg#svg, DIV#sandbox, BODY, HTML"
-PASS nodeListToString(document.elementsFromPoint(125, 325)) is "image#bottomLeftImage2, image#bottomLeftImage1, g#bottomLeftG, svg#svg, DIV#sandbox, BODY, HTML"
-PASS nodeListToString(document.elementsFromPoint(325, 325)) is "rect#bottomRightRect2, rect#bottomRightRect1, g#bottomRightG2, g#bottomRightG1, svg#svg, DIV#sandbox, BODY, HTML"
-PASS nodeListToString(document.elementsFromPoint(350, 250)) is "DIV#foDiv, foreignObject#fo, svg#svg, DIV#sandbox, BODY, HTML"
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/empty-hash-and-search-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/empty-hash-and-search-expected.txt
deleted file mode 100644
index 1653a48b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/empty-hash-and-search-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-Hash and search properties should be non-empty only if they were specified.
-
-link w/o hash link with empty hash link with hash
-
-location.hash:
-link1.hash:
-link2.hash:
-link3.hash: #test
-location.search:
-link1.search:
-link2.search:
-link3.search: ?search
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/horizontal-scrollbar-in-rtl-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/horizontal-scrollbar-in-rtl-expected.txt
new file mode 100644
index 0000000..c456d5d
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/horizontal-scrollbar-in-rtl-expected.txt
@@ -0,0 +1,8 @@
+original scroll x for RTL page : Success
+horizontal scroll: : Success
+continuously call window.scrollX : Success
+zoom in and out preserve scroll position: Success
+resize preserves scroll position: Success
+KeyDown HOME move x-scroll position to right for RTL page: -1000
+KeyDown END move x-scroll position to right for RTL page: -1000
+selectAll selects all document: Success
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/insertedIntoDocument-no-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/insertedIntoDocument-no-crash-expected.txt
deleted file mode 100644
index 39c13ce..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/insertedIntoDocument-no-crash-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-This test must not crash.
-
-foo
-<mark>
-<script>f1();</script>
-<xmp>
-foo
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/insertedIntoDocument-sibling-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/insertedIntoDocument-sibling-expected.txt
deleted file mode 100644
index 984ab80..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/insertedIntoDocument-sibling-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-PASS 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/left-overflow-in-ltr-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/left-overflow-in-ltr-expected.txt
new file mode 100644
index 0000000..fbac4d12
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/left-overflow-in-ltr-expected.txt
@@ -0,0 +1,2 @@
+test left overflow in LTR page.
+scroll: Success
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/offset-parent-positioned-and-inline-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/offset-parent-positioned-and-inline-expected.txt
deleted file mode 100644
index 7a0b947..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/offset-parent-positioned-and-inline-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Div Anchor
-
-Success! This test succeeded because the div is rightly recognized as the anchor's offsetParent :-)
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/right-overflow-in-rtl-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/right-overflow-in-rtl-expected.txt
new file mode 100644
index 0000000..d3579cd
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/right-overflow-in-rtl-expected.txt
@@ -0,0 +1,2 @@
+test right overflow in RTL page.
+scroll: Success
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/set-outer-text-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/set-outer-text-expected.txt
new file mode 100644
index 0000000..328c367
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/set-outer-text-expected.txt
@@ -0,0 +1,8 @@
+Replaced node using outerText.
+removing node using outerText.
+Testing adding br
+using outerText.
+PASS: replace
+PASS: remove
+PASS: empty text node
+PASS: line break
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/shadow/event-path-for-user-agent-shadow-tree-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/shadow/event-path-for-user-agent-shadow-tree-expected.txt
deleted file mode 100644
index 13079d8..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/shadow/event-path-for-user-agent-shadow-tree-expected.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-
-Dispaching a click event on #details-child
-
-event.path on node #details-child
-#details-child, #details, #sandbox, [object HTMLBodyElement], [object HTMLHtmlElement], [object HTMLDocument], [object Window], length: 7
-
-event.path on node #details
-#details-child, #details, #sandbox, [object HTMLBodyElement], [object HTMLHtmlElement], [object HTMLDocument], [object Window], length: 7
-
-event.path on node #sandbox
-#details-child, #details, #sandbox, [object HTMLBodyElement], [object HTMLHtmlElement], [object HTMLDocument], [object Window], length: 7
-
-Dispaching a click event on #summary-child
-
-event.path on node #summary-child
-#summary-child, #summary, #details, #sandbox, [object HTMLBodyElement], [object HTMLHtmlElement], [object HTMLDocument], [object Window], length: 8
-
-event.path on node #summary
-#summary-child, #summary, #details, #sandbox, [object HTMLBodyElement], [object HTMLHtmlElement], [object HTMLDocument], [object Window], length: 8
-
-event.path on node #details
-#summary-child, #summary, #details, #sandbox, [object HTMLBodyElement], [object HTMLHtmlElement], [object HTMLDocument], [object Window], length: 8
-
-event.path on node #sandbox
-#summary-child, #summary, #details, #sandbox, [object HTMLBodyElement], [object HTMLHtmlElement], [object HTMLDocument], [object Window], length: 8
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/window-load-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/window-load-crash-expected.txt
deleted file mode 100644
index d7b424b0..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/dom/window-load-crash-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Blocked access to external URL http://blocked/does-not-exist.html
-Test passes if it does not crash. 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/encoding/latin1-unencodables-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/encoding/latin1-unencodables-expected.txt
deleted file mode 100644
index 86c6d4d..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/encoding/latin1-unencodables-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-PASS: did not crash
-
- 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/encoding/namespace-tolerance-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/encoding/namespace-tolerance-expected.txt
deleted file mode 100644
index c7979aa1..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/encoding/namespace-tolerance-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This test ensures a UTF-8 encoding is properly set on documents that:
-(1) use namespace prefixes on HTML elements
-(2) specify a non-latin charset
-(3) contain non-latin characters
-If this test passes, the UTF-8 character below should exactly match the character the character in namespace-tolerance-expected.txt. 法
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/encoding/x-user-defined-unencodables-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/encoding/x-user-defined-unencodables-expected.txt
deleted file mode 100644
index 86c6d4d..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/encoding/x-user-defined-unencodables-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-PASS: did not crash
-
- 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/encoding/yentest2-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/encoding/yentest2-expected.txt
deleted file mode 100644
index d83c46b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/encoding/yentest2-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-two backslashes external: \
-one backslash external:
-two backslashes inline: \
-one backslash inline:
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/background-tab-on-submit-ctrl-click-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/background-tab-on-submit-ctrl-click-expected.txt
deleted file mode 100644
index 01072e8..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/background-tab-on-submit-ctrl-click-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Default policy for navigation to 'notify-done.html' is 'new background tab'
-Tests that ctrl-clicking on a submit button results in a new background tab.
-
- 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/background-tab-on-submit-synthesized-ctrl-click-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/background-tab-on-submit-synthesized-ctrl-click-expected.txt
deleted file mode 100644
index 8785d6c..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/background-tab-on-submit-synthesized-ctrl-click-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Default policy for navigation to 'notify-done.html' is 'new foreground tab'
-Tests that synthesizing ctrl-click on a submit button does not result in a new background tab.
-
- 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/frame-tab-focus-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/frame-tab-focus-expected.txt
deleted file mode 100644
index 2ffc10b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/frame-tab-focus-expected.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-This page tests tabbing between subframes. To test, click on this text to focus the main window. Then press Tab 7 times, then Shift-Tab 7 times, which should move focus forward and backward through all inputs and frames. Then press Option-Tab 11 times and Shift-Option-Tab 11 times, which should move focus forward and backward through all inputs, frames, and links.
-
-       [tabindex of one] [tabindex of three] [tabindex of two] [tabindex of three]
-Tabbing forward...
-
-main window: INPUT #2 (tabindex=2) focused
-main window: INPUT #2 (tabindex=2) blurred
-main window: A #2 (tabindex=2) focused
-main window: A #2 (tabindex=2) blurred
-main window: INPUT #1 (tabindex=3) focused
-main window: INPUT #1 (tabindex=3) blurred
-main window: A #1 (tabindex=3) focused
-main window: A #1 (tabindex=3) blurred
-main window: A #3 (tabindex=3) focused
-main window: A #3 (tabindex=3) blurred
-main window: window blurred
-child: window focused
-child: INPUT #0 (tabindex=0) focused
-child: INPUT #0 (tabindex=0) blurred
-child: window blurred
-main window: window focused
-main window: INPUT #0 (tabindex=0) focused
-main window: INPUT #0 (tabindex=0) blurred
-main window: window blurred
-empty-child: window focused
-
-Tabbing backward...
-
-empty-child: window blurred
-main window: window focused
-main window: INPUT #0 (tabindex=0) focused
-main window: INPUT #0 (tabindex=0) blurred
-main window: window blurred
-child: window focused
-child: INPUT #0 (tabindex=0) focused
-child: INPUT #0 (tabindex=0) blurred
-child: window blurred
-main window: window focused
-main window: A #3 (tabindex=3) focused
-main window: A #3 (tabindex=3) blurred
-main window: A #1 (tabindex=3) focused
-main window: A #1 (tabindex=3) blurred
-main window: INPUT #1 (tabindex=3) focused
-main window: INPUT #1 (tabindex=3) blurred
-main window: A #2 (tabindex=2) focused
-main window: A #2 (tabindex=2) blurred
-main window: INPUT #2 (tabindex=2) focused
-main window: INPUT #2 (tabindex=2) blurred
-main window: A #0 (tabindex=1) focused
-main window: A #0 (tabindex=1) blurred
-
-Option-tabbing forward...
-
-main window: INPUT #2 (tabindex=2) focused
-main window: INPUT #2 (tabindex=2) blurred
-main window: A #2 (tabindex=2) focused
-main window: A #2 (tabindex=2) blurred
-main window: INPUT #1 (tabindex=3) focused
-main window: INPUT #1 (tabindex=3) blurred
-main window: A #1 (tabindex=3) focused
-main window: A #1 (tabindex=3) blurred
-main window: A #3 (tabindex=3) focused
-main window: A #3 (tabindex=3) blurred
-main window: window blurred
-child: window focused
-child: INPUT #0 (tabindex=0) focused
-child: INPUT #0 (tabindex=0) blurred
-child: window blurred
-main window: window focused
-main window: INPUT #0 (tabindex=0) focused
-main window: INPUT #0 (tabindex=0) blurred
-main window: window blurred
-empty-child: window focused
-empty-child: window blurred
-middle-child-1: window focused
-middle-child-1: INPUT #0 (tabindex=0) focused
-middle-child-1: INPUT #0 (tabindex=0) blurred
-middle-child-1: window blurred
-middle-child-2: window focused
-middle-child-2: INPUT #0 (tabindex=0) focused
-middle-child-2: INPUT #0 (tabindex=0) blurred
-middle-child-2: window blurred
-main window: window focused
-main window: INPUT #3 (tabindex=0) focused
-main window: INPUT #3 (tabindex=0) blurred
-main window: A #0 (tabindex=1) focused
-main window: A #0 (tabindex=1) blurred
-
-Option-tabbing backward...
-
-main window: INPUT #3 (tabindex=0) focused
-main window: INPUT #3 (tabindex=0) blurred
-main window: window blurred
-middle-child-2: window focused
-middle-child-2: INPUT #0 (tabindex=0) focused
-middle-child-2: INPUT #0 (tabindex=0) blurred
-middle-child-2: window blurred
-middle-child-1: window focused
-middle-child-1: INPUT #0 (tabindex=0) focused
-middle-child-1: INPUT #0 (tabindex=0) blurred
-middle-child-1: window blurred
-empty-child: window focused
-empty-child: window blurred
-main window: window focused
-main window: INPUT #0 (tabindex=0) focused
-main window: INPUT #0 (tabindex=0) blurred
-main window: window blurred
-child: window focused
-child: INPUT #0 (tabindex=0) focused
-child: INPUT #0 (tabindex=0) blurred
-child: window blurred
-main window: window focused
-main window: A #3 (tabindex=3) focused
-main window: A #3 (tabindex=3) blurred
-main window: A #1 (tabindex=3) focused
-main window: A #1 (tabindex=3) blurred
-main window: INPUT #1 (tabindex=3) focused
-main window: INPUT #1 (tabindex=3) blurred
-main window: A #2 (tabindex=2) focused
-main window: A #2 (tabindex=2) blurred
-main window: INPUT #2 (tabindex=2) focused
-main window: INPUT #2 (tabindex=2) blurred
-main window: A #0 (tabindex=1) focused
-main window: A #0 (tabindex=1) blurred
-
-Test finished
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/key-events-in-input-text-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/key-events-in-input-text-expected.txt
deleted file mode 100644
index 7fafbab..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/key-events-in-input-text-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-To test manually, press keys and compare results to other browsers.
-
- 
-target - type - ctrlKey,altKey,shiftKey,metaKey - key - keyCode - charCode
-Space:
-INPUT - keydown - false,false,false,false - - 32 - 0. Value: "".
-INPUT - keypress - false,false,false,false - - 32 - 32. Value: "".
-INPUT - textInput - . Value: "".
-INPUT - keyup - false,false,false,false - - 32 - 0. Value: " ".
-Backspace:
-INPUT - keydown - false,false,false,false -Backspace- 8 - 0. Value: " ".
-INPUT - keyup - false,false,false,false -Backspace- 8 - 0. Value: "".
-Left Arrow:
-INPUT - keydown - false,false,false,false -ArrowLeft- 37 - 0. Value: "".
-INPUT - keyup - false,false,false,false -ArrowLeft- 37 - 0. Value: "".
-Tab:
-INPUT - keydown - false,false,false,false -Tab- 9 - 0. Value: "".
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/mouse-drag-from-frame-to-other-frame-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/mouse-drag-from-frame-to-other-frame-expected.txt
deleted file mode 100644
index 031add6..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/mouse-drag-from-frame-to-other-frame-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This tests that dragging from an element that returns false from its mousedown handler will not let the subsequent mousemove events be captured by the containing frame, and allows the mouse move to get to other subframes.
- 
-Drag Started
-received mousemove
-received mouseup
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/no-blur-on-enter-button-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/no-blur-on-enter-button-expected.txt
deleted file mode 100644
index 5edb3ff..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/no-blur-on-enter-button-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-This test verifies that the ENTER key does not fire the blur event for input type="button" and button elements.
-
- 
-Test 1 Passed.
-Test 2 Passed.
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/onload-webkit-before-webcore-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/onload-webkit-before-webcore-expected.txt
deleted file mode 100644
index c623c8b7..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/onload-webkit-before-webcore-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-ALERT: This should be the first line.
-This should be the second line. The first line should be an ALERT. 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/scroll-div-with-prevent-default-in-subframe-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/scroll-div-with-prevent-default-in-subframe-expected.txt
deleted file mode 100644
index 22fde46a..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/events/scroll-div-with-prevent-default-in-subframe-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-PASS
-
-This test does the following via EventSender:
-1. Click and drag the div scrollbar to a middle point.
-2. Click and drag again, this time down and to right, with the mouseup occurring in a parent frame.
-3. Move the mouse back into the div with the scrollbar.
-Per https://bugs.webkit.org/show_bug.cgi?id=73097, because the div with the scrollbar had a mousedown event that called preventDefault(), the mouse moves would not properly be handled by the scrollbar. We pass if the div's scrollTop property is the same after all 3 steps.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/filesystem/op-restricted-unicode-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/filesystem/op-restricted-unicode-expected.txt
deleted file mode 100644
index f0799e4..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/filesystem/op-restricted-unicode-expected.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-* Running: RestrictedUnicodeChars
-PASS Succeeded: "/".getFile("ab")
-PASS this.expectedError + "" is "InvalidModificationError"
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("a	b")
-PASS Succeeded: "/".getFile("a
-b")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("a
-b")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Succeeded: "/".getFile("ab")
-PASS Verified entry: ENTRY {path:/ab name:ab type:FILE}
-Finished running tests.
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/ValidityState-typeMismatch-email-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/ValidityState-typeMismatch-email-expected.txt
deleted file mode 100644
index c3babba6..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/ValidityState-typeMismatch-email-expected.txt
+++ /dev/null
@@ -1,181 +0,0 @@
-This test aims to check for typeMismatch flag and sanitization with type=email input fields.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-Valid single addresses when 'multiple' attribute is not set.
-PASS "something@something.com" is a valid email address. 
-PASS "someone@localhost.localdomain" is a valid email address. 
-PASS "someone@127.0.0.1" is a valid email address. 
-PASS "a@b.b" is a valid email address. 
-PASS "a/b@domain.com" is a valid email address. 
-PASS "{}@domain.com" is a valid email address. 
-PASS "m*'!%@something.sa" is a valid email address. 
-PASS "tu!!7n7.ad##0!!!@company.ca" is a valid email address. 
-PASS "%@com.com" is a valid email address. 
-PASS "!#$%&'*+/=?^_`{|}~.-@com.com" is a valid email address. 
-PASS ".wooly@example.com" is a valid email address. 
-PASS "wo..oly@example.com" is a valid email address. 
-PASS "someone@do-ma-in.com" is a valid email address. 
-PASS "somebody@example" is a valid email address. 
-PASS "
-a@p.com
-" is a valid email address. It was sanitized to "a@p.com".
-PASS "
-a@p.com
-" is a valid email address. It was sanitized to "a@p.com".
-PASS "a
-@p.com" is a valid email address. It was sanitized to "a@p.com".
-PASS "a
-@p.com" is a valid email address. It was sanitized to "a@p.com".
-PASS "" is a valid email address. 
-PASS " " is a valid email address. It was sanitized to "".
-PASS " a@p.com" is a valid email address. It was sanitized to "a@p.com".
-PASS "a@p.com " is a valid email address. It was sanitized to "a@p.com".
-PASS " a@p.com " is a valid email address. It was sanitized to "a@p.com".
-PASS " a@p.com " is a valid email address. It was sanitized to "a@p.com".
-PASS "	a@p.com	" is a valid email address. It was sanitized to "a@p.com".
-PASS "a@p.com" is a valid email address. It was sanitized to "a@p.com".
-Invalid single addresses when 'multiple' attribute is not set.
-PASS "invalid:email@example.com" is a invalid email address. 
-PASS "@somewhere.com" is a invalid email address. 
-PASS "example.com" is a invalid email address. 
-PASS "@@example.com" is a invalid email address. 
-PASS "a space@example.com" is a invalid email address. 
-PASS "something@ex..ample.com" is a invalid email address. 
-PASS "a@c" is a invalid email address. 
-PASS "someone@somewhere.com." is a invalid email address. 
-PASS """testlah""@example.com" is a invalid email address. 
-PASS ""testblah"@example.com" is a invalid email address. 
-PASS "someone@somewhere.com@" is a invalid email address. 
-PASS "someone@somewhere_com" is a invalid email address. 
-PASS "someone@some:where.com" is a invalid email address. 
-PASS "." is a invalid email address. 
-PASS "F/s/f/a@feo+re.com" is a invalid email address. 
-PASS "some+long+email+address@some+host-weird-/looking.com" is a invalid email address. 
-PASS "a @p.com" is a invalid email address. 
-PASS "a @p.com" is a invalid email address. 
-PASS "a	@p.com" is a invalid email address. 
-PASS "a@p.com" is a invalid email address. 
-PASS "a@p.com" is a invalid email address. 
-PASS "a @p.com" is a invalid email address. 
-PASS "a @p.com" is a invalid email address. 
-PASS "ddjk-s-jk@asl-.com" is a invalid email address. 
-PASS "someone@do-.com" is a invalid email address. 
-PASS "somebody@-p.com" is a invalid email address. 
-PASS "somebody@-.com" is a invalid email address. 
-Valid single addresses when 'multiple' attribute is set.
-PASS "something@something.com" is a valid email address list. 
-PASS "someone@localhost.localdomain" is a valid email address list. 
-PASS "someone@127.0.0.1" is a valid email address list. 
-PASS "a@b.b" is a valid email address list. 
-PASS "a/b@domain.com" is a valid email address list. 
-PASS "{}@domain.com" is a valid email address list. 
-PASS "m*'!%@something.sa" is a valid email address list. 
-PASS "tu!!7n7.ad##0!!!@company.ca" is a valid email address list. 
-PASS "%@com.com" is a valid email address list. 
-PASS "!#$%&'*+/=?^_`{|}~.-@com.com" is a valid email address list. 
-PASS ".wooly@example.com" is a valid email address list. 
-PASS "wo..oly@example.com" is a valid email address list. 
-PASS "someone@do-ma-in.com" is a valid email address list. 
-PASS "somebody@example" is a valid email address list. 
-PASS " a@p.com " is a valid email address list. It was sanitized to "a@p.com".
-PASS "	a@p.com	" is a valid email address list. It was sanitized to "a@p.com".
-PASS "
-a@p.com
-" is a valid email address list. It was sanitized to "a@p.com".
-PASS "a@p.com" is a valid email address list. It was sanitized to "a@p.com".
-PASS "
-a@p.com
-" is a valid email address list. It was sanitized to "a@p.com".
-PASS "a
-@p.com" is a valid email address list. It was sanitized to "a@p.com".
-PASS "a
-@p.com" is a valid email address list. It was sanitized to "a@p.com".
-PASS "" is a valid email address list. 
-PASS " " is a valid email address list. It was sanitized to "".
-PASS " a@p.com" is a valid email address list. It was sanitized to "a@p.com".
-PASS "a@p.com " is a valid email address list. It was sanitized to "a@p.com".
-PASS " a@p.com " is a valid email address list. It was sanitized to "a@p.com".
-Invalid single addresses when 'multiple' attribute is set.
-PASS "invalid:email@example.com" is a invalid email address list. 
-PASS "@somewhere.com" is a invalid email address list. 
-PASS "example.com" is a invalid email address list. 
-PASS "@@example.com" is a invalid email address list. 
-PASS "a space@example.com" is a invalid email address list. 
-PASS "something@ex..ample.com" is a invalid email address list. 
-PASS "a@c" is a invalid email address list. 
-PASS "someone@somewhere.com." is a invalid email address list. 
-PASS """testlah""@example.com" is a invalid email address list. 
-PASS ""testblah"@example.com" is a invalid email address list. 
-PASS "someone@somewhere.com@" is a invalid email address list. 
-PASS "someone@somewhere_com" is a invalid email address list. 
-PASS "someone@some:where.com" is a invalid email address list. 
-PASS "." is a invalid email address list. 
-PASS "F/s/f/a@feo+re.com" is a invalid email address list. 
-PASS "some+long+email+address@some+host-weird-/looking.com" is a invalid email address list. 
-PASS "a@p.com" is a invalid email address list. 
-PASS " a@p.com " is a invalid email address list. 
-PASS " a@p.com " is a invalid email address list. 
-PASS "a @p.com" is a invalid email address list. 
-PASS "a @p.com" is a invalid email address list. 
-PASS "a	@p.com" is a invalid email address list. 
-PASS "a@p.com" is a invalid email address list. 
-PASS "a@p.com" is a invalid email address list. 
-PASS "a @p.com" is a invalid email address list. 
-PASS "a @p.com" is a invalid email address list. 
-PASS "ddjk-s-jk@asl-.com" is a invalid email address list. 
-PASS "someone@do-.com" is a invalid email address list. 
-PASS "somebody@-p.com" is a invalid email address list. 
-PASS "somebody@-.com" is a invalid email address list. 
-Valid multiple addresses when 'multiple' attribute is set.
-PASS "someone@somewhere.com,john@doe.com,a@b.c,a/b@c.c,ualla@ualla.127" is a valid email address list. 
-PASS "tu!!7n7.ad##0!!!@company.ca,F/s/f/a@feo-re.com,m*'@a.b" is a valid email address list. 
-PASS " a@p.com,b@p.com" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
-PASS "a@p.com ,b@p.com" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
-PASS "a@p.com, b@p.com" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
-PASS "a@p.com,b@p.com " is a valid email address list. It was sanitized to "a@p.com,b@p.com".
-PASS "   a@p.com   ,   b@p.com   " is a valid email address list. It was sanitized to "a@p.com,b@p.com".
-PASS " a@p.com , b@p.com " is a valid email address list. It was sanitized to "a@p.com,b@p.com".
-PASS "	a@p.com	,	b@p.com	" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
-PASS "
-a@p.com
-,
-b@p.com
-" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
-PASS "a@p.com,b@p.com" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
-PASS "
-a@p.com
-,
-b@p.com
-" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
-Invalid multiple addresses when 'multiple' attribute is set.
-PASS "someone@somewhere.com,john@doe..com,a@b,a/b@c,ualla@ualla.127" is a invalid email address list. 
-PASS "some+long+email+address@some+host:weird-/looking.com,F/s/f/a@feo+re.com,,m*'@'!%" is a invalid email address list. 
-PASS "   a @p.com   ,   b@p.com   " is a invalid email address list. It was sanitized to "a @p.com,b@p.com".
-PASS "   a@p.com   ,   b @p.com   " is a invalid email address list. It was sanitized to "a@p.com,b @p.com".
-PASS "a@p.com,b@p.com" is a invalid email address list. 
-PASS " a@p.com , b@p.com " is a invalid email address list. 
-PASS " a@p.com , b@p.com " is a invalid email address list. 
-PASS ",," is a invalid email address list. 
-PASS " ,," is a invalid email address list. It was sanitized to ",,".
-PASS ", ," is a invalid email address list. It was sanitized to ",,".
-PASS ",, " is a invalid email address list. It was sanitized to ",,".
-PASS "  ,  ,  " is a invalid email address list. It was sanitized to ",,".
-PASS " , , " is a invalid email address list. It was sanitized to ",,".
-PASS "	,	,	" is a invalid email address list. It was sanitized to ",,".
-PASS "
-,
-,
-" is a invalid email address list. It was sanitized to ",,".
-PASS ",," is a invalid email address list. 
-PASS ",," is a invalid email address list. It was sanitized to ",,".
-PASS "
-,
-,
-" is a invalid email address list. It was sanitized to ",,".
-PASS " , , " is a invalid email address list. 
-PASS " , , " is a invalid email address list. 
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/activate-and-disabled-elements-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/activate-and-disabled-elements-expected.txt
deleted file mode 100644
index b7abcfc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/activate-and-disabled-elements-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Disabled button 
-This tests that disabled form elements don't call submit when they receive a DOMActivate event. If this test is successful, the text "SUCCESS" should be shown below.
-SUCCESS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/button/button-baseline-and-collapsing-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/button/button-baseline-and-collapsing-expected.txt
deleted file mode 100644
index cc29d48..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/button/button-baseline-and-collapsing-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Tests correct button behavior with respect to collapsing and baseline: Empty buttons have a baseline at the bottom of the content box; buttons with text are aligned so that the text lines up. Also, empty buttons should collapse.
-
-To understand this test, note that with the Ahem font, the bottom of the "X" is 2px below the baseline (at a 10px font-size).
-
- X  X
-
-PASS
-PASS
-PASS
-PASS
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/button/button-click-DOM-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/button/button-click-DOM-expected.txt
deleted file mode 100644
index 318079c..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/button/button-click-DOM-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Test case for HTMLButtonElement.click()
-Successful if it reads "test passed" below upon loading the page
-No need to click me. In fact, don't.
-test passed
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.txt
deleted file mode 100644
index b7ec413..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/datalist/input-appearance-range-with-datalist-zoomed-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
- 
- 
- 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.txt
deleted file mode 100644
index 9f7f2dcc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-step=none  
-step=1  
-step=0.001  
-step=3600  
-step=86400  
-step mismatched 
-RTL 
-Disabled  
-Readonly, step=3600  
-text-align: 
-text-transform: 
-background, color: 
-font-size, font-weight: 
-font-size with fixed input width: 
-Fixed input height: 
--webkit-appearance:none: 
-padding: 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/file/get-file-upload-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/file/get-file-upload-expected.txt
deleted file mode 100644
index 85ff554..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/file/get-file-upload-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
- 
-PASS: ?file=get-file-upload.html&nofile=&submitted=true
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/focus-style-pending-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/focus-style-pending-expected.txt
deleted file mode 100644
index 7ac857e..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/focus-style-pending-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Test that focus() sets input focus correctly even when there are pending stylesheet loads.
-
-PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/hide-validation-message-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/hide-validation-message-crash-expected.txt
deleted file mode 100644
index 3c6ae4e..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/hide-validation-message-crash-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Test for crbug.com/782896. Pass if no crash.
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/input-multiple-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/input-multiple-expected.txt
deleted file mode 100644
index 2dc1126..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/input-multiple-expected.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-This tests that you can get and set the multiple attribute as a property in JavaScript.
- 
-Test 1 passed.
-Test 2 passed.
-Test 3 passed.
-Test 4 passed.
-Test 5 passed.
-Test 6 passed.
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/mailto/advanced-get-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/mailto/advanced-get-expected.txt
deleted file mode 100644
index de2b4c8..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/mailto/advanced-get-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Policy delegate: attempt to load mailto:?to=to1%40site.com%2Cto2%40site.com%2Cto3%40site.com&cc=cc1%40site.com%2Ccc2%40site.com%2Ccc3%40site.com&bcc=bcc1%40site.com%2Cbcc2%40site.com%2Cbcc3%40site.com&subject=m%26m%3B%3F%3D&body=line1%0D%0Aline2%0D%0Aline3%0D%0Aline4 with navigation type 'form submitted'
-Press Compose button and check that the created e-mail has correct headers and body.
-
-     
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/mailto/advanced-put-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/mailto/advanced-put-expected.txt
deleted file mode 100644
index de2b4c8..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/mailto/advanced-put-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Policy delegate: attempt to load mailto:?to=to1%40site.com%2Cto2%40site.com%2Cto3%40site.com&cc=cc1%40site.com%2Ccc2%40site.com%2Ccc3%40site.com&bcc=bcc1%40site.com%2Cbcc2%40site.com%2Cbcc3%40site.com&subject=m%26m%3B%3F%3D&body=line1%0D%0Aline2%0D%0Aline3%0D%0Aline4 with navigation type 'form submitted'
-Press Compose button and check that the created e-mail has correct headers and body.
-
-     
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/radio-checkbox-restore-indeterminate-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/radio-checkbox-restore-indeterminate-expected.txt
deleted file mode 100644
index ca7c77e..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/radio-checkbox-restore-indeterminate-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-A B
-Intermediate A Intermediate B
-C D
-Click did not unselect all radio buttons: PASS
-
-Checking whether default-prevented click clobbered indeterminate state:
-On checked radio button: PASS
-On unchecked radio button: PASS
-On checked checkbox: PASS
-On unchecked checkbox: PASS
-
-Checking whether default-prevented click clobbered checked state:
-On checked radio button: PASS
-On unchecked radio button: PASS
-On checked checkbox: PASS
-On unchecked checkbox: PASS
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/radio/radio_checked-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/radio/radio_checked-expected.txt
deleted file mode 100644
index 51c50cf..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/radio/radio_checked-expected.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-This test should make sure that only one button per group, per form, is checked.
-
-These buttons are in group1 but don't have a form.  
-
-These buttons are in group1, in the first form.  
-These buttons are in group2, in the first form.  
-These buttons are in group1 but don't have a form.  
-
-These buttons are in group2, in the second form.  
-TEST PASSED.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/restore-selection-after-layout-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/restore-selection-after-layout-expected.txt
deleted file mode 100644
index 59d53cd..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/restore-selection-after-layout-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This test only works in DRT. You should see 'beforeafter' in the text field.
-
-
-beforeafter
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/search/search-cancel-button-mouseup-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/search/search-cancel-button-mouseup-expected.txt
deleted file mode 100644
index 5154bc28..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/search/search-cancel-button-mouseup-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Test for http://bugs.webkit.org/show_bug.cgi?id=12618 REGRESSION (SearchField): Dragging across the text and releasing over the clear button clears the field.
-
-PASS
-
-
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/select/menulist-no-renderer-onmousedown-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/select/menulist-no-renderer-onmousedown-expected.txt
deleted file mode 100644
index 7f21160..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/select/menulist-no-renderer-onmousedown-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This tests that we don't crash if a menu list's renderer is destroyed during the mouse down event.
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/select/select-generated-content-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/select/select-generated-content-expected.txt
deleted file mode 100644
index 46cc850..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/select/select-generated-content-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-PASS unless crash.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/slow-click-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/slow-click-expected.txt
deleted file mode 100644
index 01da364..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/slow-click-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Test that click() on checkboxes is not slow.
-
-PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/text/input-changing-value-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/text/input-changing-value-expected.txt
deleted file mode 100644
index d46bcd52..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/text/input-changing-value-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This test changes the value of the text field by simulating typing, and then gets the value.
-
-
-Passed
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/text/textfield-inside-anchor-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/text/textfield-inside-anchor-expected.txt
deleted file mode 100644
index b7199d07..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/text/textfield-inside-anchor-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This tests that you can set selection in an textfield contained in an anchor element even though we try to prevent selection from starting within anchor elements.
-
-PASS
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/textarea/textarea-no-scroll-on-blur-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/textarea/textarea-no-scroll-on-blur-expected.txt
deleted file mode 100644
index 3e4d10e0..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/textarea/textarea-no-scroll-on-blur-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This tests that we don't scroll back to the top when leaving a textarea
-
-Test Passed
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/textarea/textarea-scrollbar-height-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/textarea/textarea-scrollbar-height-expected.txt
new file mode 100644
index 0000000..ec63e93
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/textarea/textarea-scrollbar-height-expected.txt
@@ -0,0 +1,6 @@
+Vertical scrollbar should not be created when there is no overflow.
+
+This test passes if the list item below, bordered in blue, has no vertical scrollbar.
+
+list item
+This test: PASSED!
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/time/time-appearance-basic-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/time/time-appearance-basic-expected.txt
deleted file mode 100644
index 9683fcf..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/time/time-appearance-basic-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-step=none  
-step=1  
-step=0.0001  
-step=60  
-step=3600  
-step=86400  
-step mismatched 
-RTL 
-Disabled, step=3600  
-Readonly, step=3600  
-text-align: 
-text-transform: 
-background, color: 
-font-size, font-weight: 
-font-size with fixed input width: 
-Fixed input height: 
--webkit-appearance:none: 
-padding: 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/detach-frame-during-focus-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/detach-frame-during-focus-expected.txt
deleted file mode 100644
index 7ef22e9..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/detach-frame-during-focus-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/iframe-onload-remove-self-no-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/iframe-onload-remove-self-no-crash-expected.txt
deleted file mode 100644
index 8a28e17..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/iframe-onload-remove-self-no-crash-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This tests that setting remove a child frame in onload event handler does not crash the renderer.
- 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/unique-name-all-subframes-have-same-name-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/unique-name-all-subframes-have-same-name-expected.txt
deleted file mode 100644
index 6eb3f3ba..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/unique-name-all-subframes-have-same-name-expected.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-   
-
---------
-Frame: 'sameName'
---------
-
-
---------
-Frame: '<!--framePath //<!--frame3-->-->'
---------
-
-
---------
-Frame: '<!--framePath //<!--frame4-->-->'
---------
-
-
---------
-Frame: '<!--framePath //<!--frame4-->--><!--framePosition-4/0-->'
---------
-
-
---------
-Frame: '<!--framePath //<!--frame4-->--><!--framePosition-4/0-->'
---------
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/unique-name-ancestor-concatenation-conflict-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/unique-name-ancestor-concatenation-conflict-expected.txt
deleted file mode 100644
index 19222d91..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/unique-name-ancestor-concatenation-conflict-expected.txt
+++ /dev/null
@@ -1,46 +0,0 @@
- 
-
---------
-Frame: 'foo'
---------
-
-
---------
-Frame: 'foo/bar'
---------
-  
-
---------
-Frame: 'bar'
---------
-  
-
---------
-Frame: '<!--framePath //foo/bar/<!--frame0-->-->'
---------
-
-
---------
-Frame: '<!--framePath //foo/bar/<!--frame1-->-->'
---------
-
-
---------
-Frame: '<!--framePath //foo/bar/<!--frame2-->-->'
---------
-
-
---------
-Frame: '<!--framePath //foo/bar/<!--frame0-->--><!--framePosition-0-0-0/0-->'
---------
-
-
---------
-Frame: '<!--framePath //foo/bar/<!--frame1-->--><!--framePosition-1-0-0/0-->'
---------
-
-
---------
-Frame: '<!--framePath //foo/bar/<!--frame2-->--><!--framePosition-2-0-0/0-->'
---------
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/unique-name-remove-add-child-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/unique-name-remove-add-child-expected.txt
deleted file mode 100644
index df334343..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/frames/unique-name-remove-add-child-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
- 
-
---------
-Frame: '<!--framePath //<!--frame1-->-->'
---------
-
-
---------
-Frame: '<!--framePath //<!--frame1-->--><!--framePosition-1/0-->'
---------
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-color-stops-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-color-stops-expected.txt
deleted file mode 100644
index f5d2cc7b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-color-stops-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-degenerate-color-stops-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-degenerate-color-stops-expected.txt
deleted file mode 100644
index f61fe04a..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-degenerate-color-stops-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-      
-      
-      
-      
-      
-      
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-linear-angle-gradients-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-linear-angle-gradients-expected.txt
deleted file mode 100644
index f5d2cc7b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-linear-angle-gradients-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-linear-right-angle-gradients-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-linear-right-angle-gradients-expected.txt
deleted file mode 100644
index 4a50480..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-linear-right-angle-gradients-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
- 
- 
- 
- 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-radial-gradients-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-radial-gradients-expected.txt
deleted file mode 100644
index f5d2cc7b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-radial-gradients-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-radial-gradients2-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-radial-gradients2-expected.txt
deleted file mode 100644
index d9f32130..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-radial-gradients2-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-repeating-linear-gradients-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-repeating-linear-gradients-expected.txt
deleted file mode 100644
index f5d2cc7b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-repeating-linear-gradients-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-repeating-radial-gradients-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-repeating-radial-gradients-expected.txt
deleted file mode 100644
index f5d2cc7b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/css3-repeating-radial-gradients-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-color-stops-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-color-stops-expected.txt
deleted file mode 100644
index f5d2cc7b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-color-stops-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-linear-angle-gradients-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-linear-angle-gradients-expected.txt
deleted file mode 100644
index f5d2cc7b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-linear-angle-gradients-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-linear-right-angle-gradients-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-linear-right-angle-gradients-expected.txt
deleted file mode 100644
index 3b6c468..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-linear-right-angle-gradients-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-  
-  
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-radial-gradients-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-radial-gradients-expected.txt
deleted file mode 100644
index f5d2cc7b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-radial-gradients-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-radial-gradients2-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-radial-gradients2-expected.txt
deleted file mode 100644
index d9f32130..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-radial-gradients2-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-repeating-gradient-color-hint-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-repeating-gradient-color-hint-expected.txt
deleted file mode 100644
index b055673..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-repeating-gradient-color-hint-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-     
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-repeating-linear-gradient-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-repeating-linear-gradient-expected.txt
deleted file mode 100644
index f5d2cc7b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-repeating-linear-gradient-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-repeating-radial-gradients-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-repeating-radial-gradients-expected.txt
deleted file mode 100644
index f5d2cc7b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/gradients/unprefixed-repeating-radial-gradients-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/history/saves-state-after-frame-nav-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/history/saves-state-after-frame-nav-expected.txt
deleted file mode 100644
index d4e128f..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/history/saves-state-after-frame-nav-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Navigates a subframe and edits a field, then goes back and forward to test if the field state is restored.
-PASS
-Link
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/inline-block/vertical-align-top-and-bottom-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/inline-block/vertical-align-top-and-bottom-expected.txt
deleted file mode 100644
index c9799792..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/inline-block/vertical-align-top-and-bottom-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-  crbug.com/604144: In an inline formatting context with a mix of top and bottom vertically aligned inline-blocks use the lowest.
-PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/inline/inline-destroy-dirty-lines-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/inline/inline-destroy-dirty-lines-crash-expected.txt
deleted file mode 100644
index 387f660..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/inline/inline-destroy-dirty-lines-crash-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Test passes it it does not crash.
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/inline/inline-with-empty-inline-children-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/inline/inline-with-empty-inline-children-expected.txt
deleted file mode 100644
index 68ca8a2..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/inline/inline-with-empty-inline-children-expected.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-https://bugs.webkit.org/show_bug.cgi?id=95772: There should be six green bars below with a PASS in each.
-
-PASS
-PASS
-PASS
-PASS
-PASS
-PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/innerHTML/005-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/innerHTML/005-expected.txt
deleted file mode 100644
index bc0efbf1..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/innerHTML/005-expected.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-Content:
-<head>
-<meta name="description" content="This tests html output">
-<title>html innerHTML test</title>
-</head>
-<body>
-<span>Content:</span>
-<pre id="content">placeholder</pre>
-<div></div>
-<span></span>
-<b>test</b>
-<br>
-<script>
-if (window.testRunner)
-	testRunner.dumpAsText();
-document.getElementById("content").firstChild.nodeValue = document.documentElement.innerHTML;
-</script></body>
-test
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/js/same-origin-subframe-about-blank-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/js/same-origin-subframe-about-blank-expected.txt
deleted file mode 100644
index 55cd12f3..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/js/same-origin-subframe-about-blank-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This tests the same-origin check on about:blank loaded in a subframe. The test passes if the browser does not crash. You should also see "Test PASSED" below.
-
-Test PASSED
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/js/text-field-resize-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/js/text-field-resize-expected.txt
deleted file mode 100644
index 0fd66d3..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/js/text-field-resize-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-SUCCESS
-SUCCESS
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/js/toString-and-valueOf-override-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/js/toString-and-valueOf-override-expected.txt
deleted file mode 100644
index 79af778..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/js/toString-and-valueOf-override-expected.txt
+++ /dev/null
@@ -1,486 +0,0 @@
-Unmodified span
-span : [object HTMLSpanElement]
-[span] : [object HTMLSpanElement]
-String(span) : [object HTMLSpanElement]
-String([span]) : [object HTMLSpanElement]
-span.toString : function toString() { [native code] }
-span.toString() (cached in variable) : [object Undefined]
-span.toString() : [object HTMLSpanElement]
-[span].toString() : [object HTMLSpanElement]
-span.valueOf() : [object HTMLSpanElement]
-[span].valueOf() : [object HTMLSpanElement]
-
-span with modified toString and valueOf
-span : valueOf
-[span] : toString
-String(span) : toString
-String([span]) : toString
-span.toString : function() { return "toString" }
-span.toString() (cached in variable) : toString
-span.toString() : toString
-[span].toString() : toString
-span.valueOf() : valueOf
-[span].valueOf() : toString
-
-span with modified toString that returns an Object
-span : valueOf
-[span] : valueOf
-String(span) : valueOf
-String([span]) : valueOf
-span.toString : function() { return new Object(); }
-span.toString() (cached in variable) : [object Object]
-span.toString() : [object Object]
-[span].toString() : valueOf
-span.valueOf() : valueOf
-[span].valueOf() : valueOf
-
-span with modified valueOf that returns an Object
-span : toString
-[span] : toString
-String(span) : toString
-String([span]) : toString
-span.toString : function() { return 'toString'; }
-span.toString() (cached in variable) : toString
-span.toString() : toString
-[span].toString() : toString
-span.valueOf() : [object Object]
-[span].valueOf() : toString
-
-span with modified toString and valueOf that returns an Object
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-span.toString : function() { return new Object(); }
-span.toString() (cached in variable) : [object Object]
-span.toString() : [object Object]
-TypeError: Cannot convert object to primitive value
-span.valueOf() : [object Object]
-TypeError: Cannot convert object to primitive value
-
-span with modified toString that throws an exception
-span : valueOf
-Exception
-Exception
-Exception
-span.toString : function() { throw "Exception"; }
-Exception
-Exception
-Exception
-span.valueOf() : valueOf
-Exception
-
-span with modified valueOf that throws an exception
-Exception
-[span] : toString
-String(span) : toString
-String([span]) : toString
-span.toString : function() { return 'toString'; }
-span.toString() (cached in variable) : toString
-span.toString() : toString
-[span].toString() : toString
-Exception
-[span].valueOf() : toString
-
-span with modified toString an valueOf that throw exceptions
-Exception
-Exception
-Exception
-Exception
-span.toString : function() { throw "Exception"; }
-Exception
-Exception
-Exception
-Exception
-Exception
-
-
-Unmodified window
-window : [object Window]
-[window] : [object Window]
-String(window) : [object Window]
-String([window]) : [object Window]
-window.toString : function toString() { [native code] }
-window.toString() (cached in variable) : [object Undefined]
-window.toString() : [object Window]
-[window].toString() : [object Window]
-window.valueOf() : [object Window]
-[window].valueOf() : [object Window]
-
-window with modified toString and valueOf
-window : valueOf
-[window] : toString
-String(window) : toString
-String([window]) : toString
-window.toString : function() { return "toString" }
-window.toString() (cached in variable) : toString
-window.toString() : toString
-[window].toString() : toString
-window.valueOf() : valueOf
-[window].valueOf() : toString
-
-window with modified toString that returns an Object
-window : valueOf
-[window] : valueOf
-String(window) : valueOf
-String([window]) : valueOf
-window.toString : function() { return new Object(); }
-window.toString() (cached in variable) : [object Object]
-window.toString() : [object Object]
-[window].toString() : valueOf
-window.valueOf() : valueOf
-[window].valueOf() : valueOf
-
-window with modified valueOf that returns an Object
-window : toString
-[window] : toString
-String(window) : toString
-String([window]) : toString
-window.toString : function() { return 'toString'; }
-window.toString() (cached in variable) : toString
-window.toString() : toString
-[window].toString() : toString
-window.valueOf() : [object Object]
-[window].valueOf() : toString
-
-window with modified toString and valueOf that returns an Object
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-window.toString : function() { return new Object(); }
-window.toString() (cached in variable) : [object Object]
-window.toString() : [object Object]
-TypeError: Cannot convert object to primitive value
-window.valueOf() : [object Object]
-TypeError: Cannot convert object to primitive value
-
-window with modified toString that throws an exception
-window : valueOf
-Exception
-Exception
-Exception
-window.toString : function() { throw "Exception"; }
-Exception
-Exception
-Exception
-window.valueOf() : valueOf
-Exception
-
-window with modified valueOf that throws an exception
-Exception
-[window] : toString
-String(window) : toString
-String([window]) : toString
-window.toString : function() { return 'toString'; }
-window.toString() (cached in variable) : toString
-window.toString() : toString
-[window].toString() : toString
-Exception
-[window].valueOf() : toString
-
-window with modified toString an valueOf that throw exceptions
-Exception
-Exception
-Exception
-Exception
-window.toString : function() { throw "Exception"; }
-Exception
-Exception
-Exception
-Exception
-Exception
-
-
-Unmodified Navigator
-Navigator : [object Navigator]
-[Navigator] : [object Navigator]
-String(Navigator) : [object Navigator]
-String([Navigator]) : [object Navigator]
-Navigator.toString : function toString() { [native code] }
-Navigator.toString() (cached in variable) : [object Undefined]
-Navigator.toString() : [object Navigator]
-[Navigator].toString() : [object Navigator]
-Navigator.valueOf() : [object Navigator]
-[Navigator].valueOf() : [object Navigator]
-
-Navigator with modified toString and valueOf
-Navigator : valueOf
-[Navigator] : toString
-String(Navigator) : toString
-String([Navigator]) : toString
-Navigator.toString : function() { return "toString" }
-Navigator.toString() (cached in variable) : toString
-Navigator.toString() : toString
-[Navigator].toString() : toString
-Navigator.valueOf() : valueOf
-[Navigator].valueOf() : toString
-
-Navigator with modified toString that returns an Object
-Navigator : valueOf
-[Navigator] : valueOf
-String(Navigator) : valueOf
-String([Navigator]) : valueOf
-Navigator.toString : function() { return new Object(); }
-Navigator.toString() (cached in variable) : [object Object]
-Navigator.toString() : [object Object]
-[Navigator].toString() : valueOf
-Navigator.valueOf() : valueOf
-[Navigator].valueOf() : valueOf
-
-Navigator with modified valueOf that returns an Object
-Navigator : toString
-[Navigator] : toString
-String(Navigator) : toString
-String([Navigator]) : toString
-Navigator.toString : function() { return 'toString'; }
-Navigator.toString() (cached in variable) : toString
-Navigator.toString() : toString
-[Navigator].toString() : toString
-Navigator.valueOf() : [object Object]
-[Navigator].valueOf() : toString
-
-Navigator with modified toString and valueOf that returns an Object
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-Navigator.toString : function() { return new Object(); }
-Navigator.toString() (cached in variable) : [object Object]
-Navigator.toString() : [object Object]
-TypeError: Cannot convert object to primitive value
-Navigator.valueOf() : [object Object]
-TypeError: Cannot convert object to primitive value
-
-Navigator with modified toString that throws an exception
-Navigator : valueOf
-Exception
-Exception
-Exception
-Navigator.toString : function() { throw "Exception"; }
-Exception
-Exception
-Exception
-Navigator.valueOf() : valueOf
-Exception
-
-Navigator with modified valueOf that throws an exception
-Exception
-[Navigator] : toString
-String(Navigator) : toString
-String([Navigator]) : toString
-Navigator.toString : function() { return 'toString'; }
-Navigator.toString() (cached in variable) : toString
-Navigator.toString() : toString
-[Navigator].toString() : toString
-Exception
-[Navigator].valueOf() : toString
-
-Navigator with modified toString an valueOf that throw exceptions
-Exception
-Exception
-Exception
-Exception
-Navigator.toString : function() { throw "Exception"; }
-Exception
-Exception
-Exception
-Exception
-Exception
-
-
-Unmodified History
-History : [object History]
-[History] : [object History]
-String(History) : [object History]
-String([History]) : [object History]
-History.toString : function toString() { [native code] }
-History.toString() (cached in variable) : [object Undefined]
-History.toString() : [object History]
-[History].toString() : [object History]
-History.valueOf() : [object History]
-[History].valueOf() : [object History]
-
-History with modified toString and valueOf
-History : valueOf
-[History] : toString
-String(History) : toString
-String([History]) : toString
-History.toString : function() { return "toString" }
-History.toString() (cached in variable) : toString
-History.toString() : toString
-[History].toString() : toString
-History.valueOf() : valueOf
-[History].valueOf() : toString
-
-History with modified toString that returns an Object
-History : valueOf
-[History] : valueOf
-String(History) : valueOf
-String([History]) : valueOf
-History.toString : function() { return new Object(); }
-History.toString() (cached in variable) : [object Object]
-History.toString() : [object Object]
-[History].toString() : valueOf
-History.valueOf() : valueOf
-[History].valueOf() : valueOf
-
-History with modified valueOf that returns an Object
-History : toString
-[History] : toString
-String(History) : toString
-String([History]) : toString
-History.toString : function() { return 'toString'; }
-History.toString() (cached in variable) : toString
-History.toString() : toString
-[History].toString() : toString
-History.valueOf() : [object Object]
-[History].valueOf() : toString
-
-History with modified toString and valueOf that returns an Object
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-History.toString : function() { return new Object(); }
-History.toString() (cached in variable) : [object Object]
-History.toString() : [object Object]
-TypeError: Cannot convert object to primitive value
-History.valueOf() : [object Object]
-TypeError: Cannot convert object to primitive value
-
-History with modified toString that throws an exception
-History : valueOf
-Exception
-Exception
-Exception
-History.toString : function() { throw "Exception"; }
-Exception
-Exception
-Exception
-History.valueOf() : valueOf
-Exception
-
-History with modified valueOf that throws an exception
-Exception
-[History] : toString
-String(History) : toString
-String([History]) : toString
-History.toString : function() { return 'toString'; }
-History.toString() (cached in variable) : toString
-History.toString() : toString
-[History].toString() : toString
-Exception
-[History].valueOf() : toString
-
-History with modified toString an valueOf that throw exceptions
-Exception
-Exception
-Exception
-Exception
-History.toString : function() { throw "Exception"; }
-Exception
-Exception
-Exception
-Exception
-Exception
-
-
-Unmodified Selection
-Selection :
-[Selection] :
-String(Selection) :
-String([Selection]) :
-Selection.toString : function toString() { [native code] }
-TypeError: Illegal invocation
-Selection.toString() :
-[Selection].toString() :
-Selection.valueOf() :
-[Selection].valueOf() :
-
-Selection with modified toString and valueOf
-Selection : valueOf
-[Selection] : toString
-String(Selection) : toString
-String([Selection]) : toString
-Selection.toString : function() { return "toString" }
-Selection.toString() (cached in variable) : toString
-Selection.toString() : toString
-[Selection].toString() : toString
-Selection.valueOf() : valueOf
-[Selection].valueOf() : toString
-
-Selection with modified toString that returns an Object
-Selection : valueOf
-[Selection] : valueOf
-String(Selection) : valueOf
-String([Selection]) : valueOf
-Selection.toString : function() { return new Object(); }
-Selection.toString() (cached in variable) : [object Object]
-Selection.toString() : [object Object]
-[Selection].toString() : valueOf
-Selection.valueOf() : valueOf
-[Selection].valueOf() : valueOf
-
-Selection with modified valueOf that returns an Object
-Selection : toString
-[Selection] : toString
-String(Selection) : toString
-String([Selection]) : toString
-Selection.toString : function() { return 'toString'; }
-Selection.toString() (cached in variable) : toString
-Selection.toString() : toString
-[Selection].toString() : toString
-Selection.valueOf() : [object Object]
-[Selection].valueOf() : toString
-
-Selection with modified toString and valueOf that returns an Object
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-TypeError: Cannot convert object to primitive value
-Selection.toString : function() { return new Object(); }
-Selection.toString() (cached in variable) : [object Object]
-Selection.toString() : [object Object]
-TypeError: Cannot convert object to primitive value
-Selection.valueOf() : [object Object]
-TypeError: Cannot convert object to primitive value
-
-Selection with modified toString that throws an exception
-Selection : valueOf
-Exception
-Exception
-Exception
-Selection.toString : function() { throw "Exception"; }
-Exception
-Exception
-Exception
-Selection.valueOf() : valueOf
-Exception
-
-Selection with modified valueOf that throws an exception
-Exception
-[Selection] : toString
-String(Selection) : toString
-String([Selection]) : toString
-Selection.toString : function() { return 'toString'; }
-Selection.toString() (cached in variable) : toString
-Selection.toString() : toString
-[Selection].toString() : toString
-Exception
-[Selection].valueOf() : toString
-
-Selection with modified toString an valueOf that throw exceptions
-Exception
-Exception
-Exception
-Exception
-Selection.toString : function() { throw "Exception"; }
-Exception
-Exception
-Exception
-Exception
-Exception
-
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/lists/alpha-boundary-values-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/lists/alpha-boundary-values-expected.txt
deleted file mode 100644
index 52b899cb..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/lists/alpha-boundary-values-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-A
-B
-Y
-Z
-AA
-AB
-YZ
-ZA
-ZB
-ZZ
-AAA
-AAB
-ZZY
-ZZZ
-AAAA
-AAAB
-AAAC
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/lists/alpha-list-wrap-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/lists/alpha-list-wrap-expected.txt
deleted file mode 100644
index f609c59..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/lists/alpha-list-wrap-expected.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-V
-W
-X
-Y
-Z
-AA
-AB
-AC
-AD
-AE
-AF
-AG
-AH
-AI
-AJ
-AK
-AL
-AM
-AN
-AO
-AP
-AQ
-AR
-AS
-AT
-AU
-AV
-AW
-AX
-AY
-AZ
-BA
-BB
-BC
-BD
-BE
-BF
-BG
-BH
-BI
-BJ
-BK
-BL
-BM
-BN
-BO
-BP
-BQ
-BR
-BS
-BT
-BU
-BV
-BW
-BX
-BY
-BZ
-CA
-CB
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/lists/calc-width-with-space-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/lists/calc-width-with-space-expected.txt
new file mode 100644
index 0000000..5431088
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/lists/calc-width-with-space-expected.txt
@@ -0,0 +1,8 @@
+These two lines should look same as spaces after a list marker should be ignored. There are 18 characters in each line. As they are 20px width, the total width should be 360px + a few pixels for table. If the space character after the list marker in "test" isn't ignored, the number of characters become 19 and 370px div will be overflowed. Note that this test requires Ahem font.
+XpX XpX
+	
+XpX XpX
+XpX XpX
+	
+XpX XpX
+SUCCESS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/lists/item-not-in-list-line-wrapping-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/lists/item-not-in-list-line-wrapping-expected.txt
new file mode 100644
index 0000000..54d8b1a
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/lists/item-not-in-list-line-wrapping-expected.txt
@@ -0,0 +1,6 @@
+Test for http://bugs.webkit.org/show_bug.cgi?id=12746 REGRESSION (r13853): List item's first line overflows containing div.
+
+Text should not overflow the yellow box.
+
+Lorem ipsum dolor sit amet
+PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/loader/child-frame-add-after-back-forward-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/loader/child-frame-add-after-back-forward-expected.txt
deleted file mode 100644
index 3570c6d..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/loader/child-frame-add-after-back-forward-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Go forward then back. 
-
---------
-Frame: '<!--framePath //<!--frame0-->-->'
---------
-PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/loader/frame-creation-removal-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/loader/frame-creation-removal-expected.txt
deleted file mode 100644
index 7461883..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/loader/frame-creation-removal-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This is a test for 5823684. If onload handlers aggressively remove and create new iframes in a particular way, we would crash because the frames hadn't been installed into the frame tree correctly before the frame tree was being manipulated.
-If you do not crash, you have passed this test.
- 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/loader/navigation-scheduler-user-gesture-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/loader/navigation-scheduler-user-gesture-expected.txt
deleted file mode 100644
index 64e0657..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/loader/navigation-scheduler-user-gesture-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Check that the NavigationScheduler correctly tracks user gestures.
-
-PASS: only one window opened
-click me
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/loader/opaque-base-url-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/loader/opaque-base-url-expected.txt
deleted file mode 100644
index 88b0adfe..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/loader/opaque-base-url-expected.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Test how opaque base URLs work for fetching subresources.
-
-SUCCESS
-SUCCESS
-SUCCESS
-Expected failure, see bug 9706.
-SUCCESS
-      
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/overflow/scrollbar-restored-and-then-locked-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/overflow/scrollbar-restored-and-then-locked-expected.txt
new file mode 100644
index 0000000..8569602f
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/overflow/scrollbar-restored-and-then-locked-expected.txt
@@ -0,0 +1,9 @@
+Test for bug 29431 [Qt] REGRESSION:(r50665) QWebFrame::setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff) has no effect.
+
+This test ensures the correctness of two scrollbar behaviour:
+
+This tests that after setting 'overflow' on the document element to 'hidden' and back to 'visible', scrollbars appear as necessary.
+After explicitly setting a scrollbar policy different than 'auto', WebCore honors that until it is unset.
+
+PASS
+FAIL: Scrollbar did appear after turning it off
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/parser/assertion-empty-attribute-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/parser/assertion-empty-attribute-expected.txt
deleted file mode 100644
index 47d8eba..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/parser/assertion-empty-attribute-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Test case for Bug 13942 : ASSERTION FAILED: !attrName.contains('/') in HTMLTokenizer.cpp:132 when loading http://bamanzi.blogeden.cn/
-
-To pass this test, there should be no assertion failure and you should PASS three times.
-
-PASS
-PASS
-PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/parser/entities-in-html-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/parser/entities-in-html-expected.txt
deleted file mode 100644
index 4769eb3e..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/parser/entities-in-html-expected.txt
+++ /dev/null
@@ -1,264 +0,0 @@
-HTML Entities Test
-Latin-1 Characters (xhtml-lat1.ent)
-Special Characters (xhtml-special.ent)
-Symbols (xhtml-symbol.ent)
-Latin-1 Characters (xhtml-lat1.ent)
-𝌌
-decimal	hexadecimal	entity name	&#nnn;	&#xhhh;	&entity;
-160	A0	nbsp	 	 	 
-161	A1	iexcl	¡	¡	¡
-162	A2	cent	¢	¢	¢
-163	A3	pound	£	£	£
-164	A4	curren	¤	¤	¤
-165	A5	yen	¥	¥	¥
-166	A6	brvbar	¦	¦	¦
-167	A7	sect	§	§	§
-168	A8	uml	¨	¨	¨
-169	A9	copy	©	©	©
-170	AA	ordf	ª	ª	ª
-171	AB	laquo	«	«	«
-172	AC	not	¬	¬	¬
-173	AD	shy	­	­	­
-174	AE	reg	®	®	®
-175	AF	macr	¯	¯	¯
-176	B0	deg	°	°	°
-177	B1	plusmn	±	±	±
-178	B2	sup2	²	²	²
-179	B3	sup3	³	³	³
-180	B4	acute	´	´	´
-181	B5	micro	µ	µ	µ
-182	B6	para	¶	¶	¶
-183	B7	middot	·	·	·
-184	B8	cedil	¸	¸	¸
-185	B9	sup1	¹	¹	¹
-186	BA	ordm	º	º	º
-187	BB	raquo	»	»	»
-188	BC	frac14	¼	¼	¼
-189	BD	frac12	½	½	½
-190	BE	frac34	¾	¾	¾
-191	BF	iquest	¿	¿	¿
-192	C0	Agrave	À	À	À
-193	C1	Aacute	Á	Á	Á
-194	C2	Acirc	Â	Â	Â
-195	C3	Atilde	Ã	Ã	Ã
-196	C4	Auml	Ä	Ä	Ä
-197	C5	Aring	Å	Å	Å
-198	C6	AElig	Æ	Æ	Æ
-199	C7	Ccedil	Ç	Ç	Ç
-200	C8	Egrave	È	È	È
-201	C9	Eacute	É	É	É
-202	CA	Ecirc	Ê	Ê	Ê
-203	CB	Euml	Ë	Ë	Ë
-204	CC	Igrave	Ì	Ì	Ì
-205	CD	Iacute	Í	Í	Í
-206	CE	Icirc	Î	Î	Î
-207	CF	Iuml	Ï	Ï	Ï
-208	D0	ETH	Ð	Ð	Ð
-209	D1	Ntilde	Ñ	Ñ	Ñ
-210	D2	Ograve	Ò	Ò	Ò
-211	D3	Oacute	Ó	Ó	Ó
-212	D4	Ocirc	Ô	Ô	Ô
-213	D5	Otilde	Õ	Õ	Õ
-214	D6	Ouml	Ö	Ö	Ö
-215	D7	times	×	×	×
-216	D8	Oslash	Ø	Ø	Ø
-217	D9	Ugrave	Ù	Ù	Ù
-218	DA	Uacute	Ú	Ú	Ú
-219	DB	Ucirc	Û	Û	Û
-220	DC	Uuml	Ü	Ü	Ü
-221	DD	Yacute	Ý	Ý	Ý
-222	DE	THORN	Þ	Þ	Þ
-223	DF	szlig	ß	ß	ß
-224	E0	agrave	à	à	à
-225	E1	aacute	á	á	á
-226	E2	acirc	â	â	â
-227	E3	atilde	ã	ã	ã
-228	E4	auml	ä	ä	ä
-229	E5	aring	å	å	å
-230	E6	aelig	æ	æ	æ
-231	E7	ccedil	ç	ç	ç
-232	E8	egrave	è	è	è
-233	E9	eacute	é	é	é
-234	EA	ecirc	ê	ê	ê
-235	EB	euml	ë	ë	ë
-236	EC	igrave	ì	ì	ì
-237	ED	iacute	í	í	í
-238	EE	icirc	î	î	î
-239	EF	iuml	ï	ï	ï
-240	F0	eth	ð	ð	ð
-241	F1	ntilde	ñ	ñ	ñ
-242	F2	ograve	ò	ò	ò
-243	F3	oacute	ó	ó	ó
-244	F4	ocirc	ô	ô	ô
-245	F5	otilde	õ	õ	õ
-246	F6	ouml	ö	ö	ö
-247	F7	divide	÷	÷	÷
-248	F8	oslash	ø	ø	ø
-249	F9	ugrave	ù	ù	ù
-250	FA	uacute	ú	ú	ú
-251	FB	ucirc	û	û	û
-252	FC	uuml	ü	ü	ü
-253	FD	yacute	ý	ý	ý
-254	FE	thorn	þ	þ	þ
-255	FF	yuml	ÿ	ÿ	ÿ
-Special Characters (xhtml-special.ent)
-decimal	hexadecimal	entity name	&#nnn;	&#xhhh;	&entity;
-34	22	quot	"	"	"
-38	26	amp	&	&	&
-60	3C	lt	<	<	<
-62	3E	gt	>	>	>
-39	27	apos	'	'	'
-338	152	OElig	Œ	Œ	Œ
-339	153	oelig	œ	œ	œ
-352	160	Scaron	Š	Š	Š
-353	161	scaron	š	š	š
-376	178	Yuml	Ÿ	Ÿ	Ÿ
-710	2C6	circ	ˆ	ˆ	ˆ
-732	2DC	tilde	˜	˜	˜
-8194	2002	ensp	 	 	 
-8195	2003	emsp	 	 	 
-8201	2009	thinsp	 	 	 
-8204	200C	zwnj	‌	‌	‌
-8205	200D	zwj	‍	‍	‍
-8206	200E	lrm	‎	‎	‎
-8207	200F	rlm	‏	‏	‏
-8211	2013	ndash	–	–	–
-8212	2014	mdash	—	—	—
-8216	2018	lsquo	‘	‘	‘
-8217	2019	rsquo	’	’	’
-8218	201A	sbquo	‚	‚	‚
-8220	201C	ldquo	“	“	“
-8221	201D	rdquo	”	”	”
-8222	201E	bdquo	„	„	„
-8224	2020	dagger	†	†	†
-8225	2021	Dagger	‡	‡	‡
-8240	2030	permil	‰	‰	‰
-8249	2039	lsaquo	‹	‹	‹
-8250	203A	rsaquo	›	›	›
-8364	20AC	euro	€	€	€
-Symbols (xhtml-symbol.ent)
-decimal	hexadecimal	entity name	&#nnn;	&#xhhh;	&entity;
-402	192	fnof	ƒ	ƒ	ƒ
-913	391	Alpha	Α	Α	Α
-914	392	Beta	Β	Β	Β
-915	393	Gamma	Γ	Γ	Γ
-916	394	Delta	Δ	Δ	Δ
-917	395	Epsilon	Ε	Ε	Ε
-918	396	Zeta	Ζ	Ζ	Ζ
-919	397	Eta	Η	Η	Η
-920	398	Theta	Θ	Θ	Θ
-921	399	Iota	Ι	Ι	Ι
-922	39A	Kappa	Κ	Κ	Κ
-923	39B	Lambda	Λ	Λ	Λ
-924	39C	Mu	Μ	Μ	Μ
-925	39D	Nu	Ν	Ν	Ν
-926	39E	Xi	Ξ	Ξ	Ξ
-927	39F	Omicron	Ο	Ο	Ο
-928	3A0	Pi	Π	Π	Π
-929	3A1	Rho	Ρ	Ρ	Ρ
-931	3A3	Sigma	Σ	Σ	Σ
-932	3A4	Tau	Τ	Τ	Τ
-933	3A5	Upsilon	Υ	Υ	Υ
-934	3A6	Phi	Φ	Φ	Φ
-935	3A7	Chi	Χ	Χ	Χ
-936	3A8	Psi	Ψ	Ψ	Ψ
-937	3A9	Omega	Ω	Ω	Ω
-945	3B1	alpha	α	α	α
-946	3B2	beta	β	β	β
-947	3B3	gamma	γ	γ	γ
-948	3B4	delta	δ	δ	δ
-949	3B5	epsilon	ε	ε	ε
-950	3B6	zeta	ζ	ζ	ζ
-951	3B7	eta	η	η	η
-952	3B8	theta	θ	θ	θ
-953	3B9	iota	ι	ι	ι
-954	3BA	kappa	κ	κ	κ
-955	3BB	lambda	λ	λ	λ
-956	3BC	mu	μ	μ	μ
-957	3BD	nu	ν	ν	ν
-958	3BE	xi	ξ	ξ	ξ
-959	3BF	omicron	ο	ο	ο
-960	3C0	pi	π	π	π
-961	3C1	rho	ρ	ρ	ρ
-962	3C2	sigmaf	ς	ς	ς
-963	3C3	sigma	σ	σ	σ
-964	3C4	tau	τ	τ	τ
-965	3C5	upsilon	υ	υ	υ
-966	3C6	phi	φ	φ	φ
-967	3C7	chi	χ	χ	χ
-968	3C8	psi	ψ	ψ	ψ
-969	3C9	omega	ω	ω	ω
-977	3D1	thetasym	ϑ	ϑ	ϑ
-978	3D2	upsih	ϒ	ϒ	ϒ
-982	3D6	piv	ϖ	ϖ	ϖ
-8226	2022	bull	•	•	•
-8230	2026	hellip	…	…	…
-8242	2032	prime	′	′	′
-8243	2033	Prime	″	″	″
-8254	203E	oline	‾	‾	‾
-8260	2044	frasl	⁄	⁄	⁄
-8472	2118	weierp	℘	℘	℘
-8465	2111	image	ℑ	ℑ	ℑ
-8476	211C	real	ℜ	ℜ	ℜ
-8482	2122	trade	™	™	™
-8501	2135	alefsym	ℵ	ℵ	ℵ
-8592	2190	larr	←	←	←
-8593	2191	uarr	↑	↑	↑
-8594	2192	rarr	→	→	→
-8595	2193	darr	↓	↓	↓
-8596	2194	harr	↔	↔	↔
-8629	21B5	crarr	↵	↵	↵
-8656	21D0	lArr	⇐	⇐	⇐
-8657	21D1	uArr	⇑	⇑	⇑
-8658	21D2	rArr	⇒	⇒	⇒
-8659	21D3	dArr	⇓	⇓	⇓
-8660	21D4	hArr	⇔	⇔	⇔
-8704	2200	forall	∀	∀	∀
-8706	2202	part	∂	∂	∂
-8707	2203	exist	∃	∃	∃
-8709	2205	empty	∅	∅	∅
-8711	2207	nabla	∇	∇	∇
-8712	2208	isin	∈	∈	∈
-8713	2209	notin	∉	∉	∉
-8715	220B	ni	∋	∋	∋
-8719	220F	prod	∏	∏	∏
-8721	2211	sum	∑	∑	∑
-8722	2212	minus	−	−	−
-8727	2217	lowast	∗	∗	∗
-8730	221A	radic	√	√	√
-8733	221D	prop	∝	∝	∝
-8734	221E	infin	∞	∞	∞
-8736	2220	ang	∠	∠	∠
-8743	2227	and	∧	∧	∧
-8744	2228	or	∨	∨	∨
-8745	2229	cap	∩	∩	∩
-8746	222A	cup	∪	∪	∪
-8747	222B	int	∫	∫	∫
-8756	2234	there4	∴	∴	∴
-8764	223C	sim	∼	∼	∼
-8773	2245	cong	≅	≅	≅
-8776	2248	asymp	≈	≈	≈
-8800	2260	ne	≠	≠	≠
-8801	2261	equiv	≡	≡	≡
-8804	2264	le	≤	≤	≤
-8805	2265	ge	≥	≥	≥
-8834	2282	sub	⊂	⊂	⊂
-8835	2283	sup	⊃	⊃	⊃
-8836	2284	nsub	⊄	⊄	⊄
-8838	2286	sube	⊆	⊆	⊆
-8839	2287	supe	⊇	⊇	⊇
-8853	2295	oplus	⊕	⊕	⊕
-8855	2297	otimes	⊗	⊗	⊗
-8869	22A5	perp	⊥	⊥	⊥
-8901	22C5	sdot	⋅	⋅	⋅
-8968	2308	lceil	⌈	⌈	⌈
-8969	2309	rceil	⌉	⌉	⌉
-8970	230A	lfloor	⌊	⌊	⌊
-8971	230B	rfloor	⌋	⌋	⌋
-12296	3008	lang	〈	〈	⟨
-12297	3009	rang	〉	〉	⟩
-9674	25CA	loz	◊	◊	◊
-9824	2660	spades	♠	♠	♠
-9827	2663	clubs	♣	♣	♣
-9829	2665	hearts	♥	♥	♥
-9830	2666	diams	♦	♦	♦
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/parser/entities-in-xhtml-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/parser/entities-in-xhtml-expected.txt
deleted file mode 100644
index 5ba0241..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/parser/entities-in-xhtml-expected.txt
+++ /dev/null
@@ -1,269 +0,0 @@
-XHTML Entities Test
-Latin-1 Characters (xhtml-lat1.ent)
-Special Characters (xhtml-special.ent)
-Symbols (xhtml-symbol.ent)
-Latin-1 Characters (xhtml-lat1.ent)
-𝌌
-decimal	hexadecimal	entity name	&#nnn;	&#xhhh;	&entity;
-160	A0	nbsp	 	 	 
-161	A1	iexcl	¡	¡	¡
-162	A2	cent	¢	¢	¢
-163	A3	pound	£	£	£
-164	A4	curren	¤	¤	¤
-165	A5	yen	¥	¥	¥
-166	A6	brvbar	¦	¦	¦
-167	A7	sect	§	§	§
-168	A8	uml	¨	¨	¨
-169	A9	copy	©	©	©
-170	AA	ordf	ª	ª	ª
-171	AB	laquo	«	«	«
-172	AC	not	¬	¬	¬
-173	AD	shy	­	­	­
-174	AE	reg	®	®	®
-175	AF	macr	¯	¯	¯
-176	B0	deg	°	°	°
-177	B1	plusmn	±	±	±
-178	B2	sup2	²	²	²
-179	B3	sup3	³	³	³
-180	B4	acute	´	´	´
-181	B5	micro	µ	µ	µ
-182	B6	para	¶	¶	¶
-183	B7	middot	·	·	·
-184	B8	cedil	¸	¸	¸
-185	B9	sup1	¹	¹	¹
-186	BA	ordm	º	º	º
-187	BB	raquo	»	»	»
-188	BC	frac14	¼	¼	¼
-189	BD	frac12	½	½	½
-190	BE	frac34	¾	¾	¾
-191	BF	iquest	¿	¿	¿
-192	C0	Agrave	À	À	À
-193	C1	Aacute	Á	Á	Á
-194	C2	Acirc	Â	Â	Â
-195	C3	Atilde	Ã	Ã	Ã
-196	C4	Auml	Ä	Ä	Ä
-197	C5	Aring	Å	Å	Å
-198	C6	AElig	Æ	Æ	Æ
-199	C7	Ccedil	Ç	Ç	Ç
-200	C8	Egrave	È	È	È
-201	C9	Eacute	É	É	É
-202	CA	Ecirc	Ê	Ê	Ê
-203	CB	Euml	Ë	Ë	Ë
-204	CC	Igrave	Ì	Ì	Ì
-205	CD	Iacute	Í	Í	Í
-206	CE	Icirc	Î	Î	Î
-207	CF	Iuml	Ï	Ï	Ï
-208	D0	ETH	Ð	Ð	Ð
-209	D1	Ntilde	Ñ	Ñ	Ñ
-210	D2	Ograve	Ò	Ò	Ò
-211	D3	Oacute	Ó	Ó	Ó
-212	D4	Ocirc	Ô	Ô	Ô
-213	D5	Otilde	Õ	Õ	Õ
-214	D6	Ouml	Ö	Ö	Ö
-215	D7	times	×	×	×
-216	D8	Oslash	Ø	Ø	Ø
-217	D9	Ugrave	Ù	Ù	Ù
-218	DA	Uacute	Ú	Ú	Ú
-219	DB	Ucirc	Û	Û	Û
-220	DC	Uuml	Ü	Ü	Ü
-221	DD	Yacute	Ý	Ý	Ý
-222	DE	THORN	Þ	Þ	Þ
-223	DF	szlig	ß	ß	ß
-224	E0	agrave	à	à	à
-225	E1	aacute	á	á	á
-226	E2	acirc	â	â	â
-227	E3	atilde	ã	ã	ã
-228	E4	auml	ä	ä	ä
-229	E5	aring	å	å	å
-230	E6	aelig	æ	æ	æ
-231	E7	ccedil	ç	ç	ç
-232	E8	egrave	è	è	è
-233	E9	eacute	é	é	é
-234	EA	ecirc	ê	ê	ê
-235	EB	euml	ë	ë	ë
-236	EC	igrave	ì	ì	ì
-237	ED	iacute	í	í	í
-238	EE	icirc	î	î	î
-239	EF	iuml	ï	ï	ï
-240	F0	eth	ð	ð	ð
-241	F1	ntilde	ñ	ñ	ñ
-242	F2	ograve	ò	ò	ò
-243	F3	oacute	ó	ó	ó
-244	F4	ocirc	ô	ô	ô
-245	F5	otilde	õ	õ	õ
-246	F6	ouml	ö	ö	ö
-247	F7	divide	÷	÷	÷
-248	F8	oslash	ø	ø	ø
-249	F9	ugrave	ù	ù	ù
-250	FA	uacute	ú	ú	ú
-251	FB	ucirc	û	û	û
-252	FC	uuml	ü	ü	ü
-253	FD	yacute	ý	ý	ý
-254	FE	thorn	þ	þ	þ
-255	FF	yuml	ÿ	ÿ	ÿ
-Special Characters (xhtml-special.ent)
-decimal	hexadecimal	entity name	&#nnn;	&#xhhh;	&entity;
-34	22	quot	"	"	"
-38	26	amp	&	&	&
-60	3C	lt	<	<	<
-62	3E	gt	>	>	>
-39	27	apos	'	'	'
-338	152	OElig	Œ	Œ	Œ
-339	153	oelig	œ	œ	œ
-352	160	Scaron	Š	Š	Š
-353	161	scaron	š	š	š
-376	178	Yuml	Ÿ	Ÿ	Ÿ
-710	2C6	circ	ˆ	ˆ	ˆ
-732	2DC	tilde	˜	˜	˜
-8194	2002	ensp	 	 	 
-8195	2003	emsp	 	 	 
-8201	2009	thinsp	 	 	 
-8204	200C	zwnj	‌	‌	‌
-8205	200D	zwj	‍	‍	‍
-8206	200E	lrm	‎	‎	‎
-8207	200F	rlm	‏	‏	‏
-8211	2013	ndash	–	–	–
-8212	2014	mdash	—	—	—
-8216	2018	lsquo	‘	‘	‘
-8217	2019	rsquo	’	’	’
-8218	201A	sbquo	‚	‚	‚
-8220	201C	ldquo	“	“	“
-8221	201D	rdquo	”	”	”
-8222	201E	bdquo	„	„	„
-8224	2020	dagger	†	†	†
-8225	2021	Dagger	‡	‡	‡
-8240	2030	permil	‰	‰	‰
-8249	2039	lsaquo	‹	‹	‹
-8250	203A	rsaquo	›	›	›
-8364	20AC	euro	€	€	€
-Symbols (xhtml-symbol.ent)
-decimal	hexadecimal	entity name	&#nnn;	&#xhhh;	&entity;
-402	192	fnof	ƒ	ƒ	ƒ
-913	391	Alpha	Α	Α	Α
-914	392	Beta	Β	Β	Β
-915	393	Gamma	Γ	Γ	Γ
-916	394	Delta	Δ	Δ	Δ
-917	395	Epsilon	Ε	Ε	Ε
-918	396	Zeta	Ζ	Ζ	Ζ
-919	397	Eta	Η	Η	Η
-920	398	Theta	Θ	Θ	Θ
-921	399	Iota	Ι	Ι	Ι
-922	39A	Kappa	Κ	Κ	Κ
-923	39B	Lambda	Λ	Λ	Λ
-924	39C	Mu	Μ	Μ	Μ
-925	39D	Nu	Ν	Ν	Ν
-926	39E	Xi	Ξ	Ξ	Ξ
-927	39F	Omicron	Ο	Ο	Ο
-928	3A0	Pi	Π	Π	Π
-929	3A1	Rho	Ρ	Ρ	Ρ
-931	3A3	Sigma	Σ	Σ	Σ
-932	3A4	Tau	Τ	Τ	Τ
-933	3A5	Upsilon	Υ	Υ	Υ
-934	3A6	Phi	Φ	Φ	Φ
-935	3A7	Chi	Χ	Χ	Χ
-936	3A8	Psi	Ψ	Ψ	Ψ
-937	3A9	Omega	Ω	Ω	Ω
-945	3B1	alpha	α	α	α
-946	3B2	beta	β	β	β
-947	3B3	gamma	γ	γ	γ
-948	3B4	delta	δ	δ	δ
-949	3B5	epsilon	ε	ε	ε
-950	3B6	zeta	ζ	ζ	ζ
-951	3B7	eta	η	η	η
-952	3B8	theta	θ	θ	θ
-953	3B9	iota	ι	ι	ι
-954	3BA	kappa	κ	κ	κ
-955	3BB	lambda	λ	λ	λ
-956	3BC	mu	μ	μ	μ
-957	3BD	nu	ν	ν	ν
-958	3BE	xi	ξ	ξ	ξ
-959	3BF	omicron	ο	ο	ο
-960	3C0	pi	π	π	π
-961	3C1	rho	ρ	ρ	ρ
-962	3C2	sigmaf	ς	ς	ς
-963	3C3	sigma	σ	σ	σ
-964	3C4	tau	τ	τ	τ
-965	3C5	upsilon	υ	υ	υ
-966	3C6	phi	φ	φ	φ
-967	3C7	chi	χ	χ	χ
-968	3C8	psi	ψ	ψ	ψ
-969	3C9	omega	ω	ω	ω
-977	3D1	thetasym	ϑ	ϑ	ϑ
-978	3D2	upsih	ϒ	ϒ	ϒ
-982	3D6	piv	ϖ	ϖ	ϖ
-8226	2022	bull	•	•	•
-8230	2026	hellip	…	…	…
-8242	2032	prime	′	′	′
-8243	2033	Prime	″	″	″
-8254	203E	oline	‾	‾	‾
-8260	2044	frasl	⁄	⁄	⁄
-8472	2118	weierp	℘	℘	℘
-8465	2111	image	ℑ	ℑ	ℑ
-8476	211C	real	ℜ	ℜ	ℜ
-8482	2122	trade	™	™	™
-8501	2135	alefsym	ℵ	ℵ	ℵ
-8592	2190	larr	←	←	←
-8593	2191	uarr	↑	↑	↑
-8594	2192	rarr	→	→	→
-8595	2193	darr	↓	↓	↓
-8596	2194	harr	↔	↔	↔
-8629	21B5	crarr	↵	↵	↵
-8656	21D0	lArr	⇐	⇐	⇐
-8657	21D1	uArr	⇑	⇑	⇑
-8658	21D2	rArr	⇒	⇒	⇒
-8659	21D3	dArr	⇓	⇓	⇓
-8660	21D4	hArr	⇔	⇔	⇔
-8704	2200	forall	∀	∀	∀
-8706	2202	part	∂	∂	∂
-8707	2203	exist	∃	∃	∃
-8709	2205	empty	∅	∅	∅
-8711	2207	nabla	∇	∇	∇
-8712	2208	isin	∈	∈	∈
-8713	2209	notin	∉	∉	∉
-8715	220B	ni	∋	∋	∋
-8719	220F	prod	∏	∏	∏
-8721	2211	sum	∑	∑	∑
-8722	2212	minus	−	−	−
-8727	2217	lowast	∗	∗	∗
-8730	221A	radic	√	√	√
-8733	221D	prop	∝	∝	∝
-8734	221E	infin	∞	∞	∞
-8736	2220	ang	∠	∠	∠
-8743	2227	and	∧	∧	∧
-8744	2228	or	∨	∨	∨
-8745	2229	cap	∩	∩	∩
-8746	222A	cup	∪	∪	∪
-8747	222B	int	∫	∫	∫
-8756	2234	there4	∴	∴	∴
-8764	223C	sim	∼	∼	∼
-8773	2245	cong	≅	≅	≅
-8776	2248	asymp	≈	≈	≈
-8800	2260	ne	≠	≠	≠
-8801	2261	equiv	≡	≡	≡
-8804	2264	le	≤	≤	≤
-8805	2265	ge	≥	≥	≥
-8834	2282	sub	⊂	⊂	⊂
-8835	2283	sup	⊃	⊃	⊃
-8836	2284	nsub	⊄	⊄	⊄
-8838	2286	sube	⊆	⊆	⊆
-8839	2287	supe	⊇	⊇	⊇
-8853	2295	oplus	⊕	⊕	⊕
-8855	2297	otimes	⊗	⊗	⊗
-8869	22A5	perp	⊥	⊥	⊥
-8901	22C5	sdot	⋅	⋅	⋅
-8968	2308	lceil	⌈	⌈	⌈
-8969	2309	rceil	⌉	⌉	⌉
-8970	230A	lfloor	⌊	⌊	⌊
-8971	230B	rfloor	⌋	⌋	⌋
-12296	3008	lang	〈	〈	⟨
-12297	3009	rang	〉	〉	⟩
-9674	25CA	loz	◊	◊	◊
-9824	2660	spades	♠	♠	♠
-9827	2663	clubs	♣	♣	♣
-9829	2665	hearts	♥	♥	♥
-9830	2666	diams	♦	♦	♦
-Multi-byte entities from HTML5
-decimal	hexadecimal	entity name	&#nnn;	&#xhhh;	&entity;
-8882	22B2	vltri	⊲	⊲	⊲
-8834 + 8402	2282 + 20D2	sub	⊂⃒	⊂⃒	⊂⃒
-8804 + 8402	2264 + 20D2	sub	≤⃒	≤⃒	≤⃒
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/parser/noscript-with-javascript-disabled-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/parser/noscript-with-javascript-disabled-expected.txt
deleted file mode 100644
index 67307af7..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/parser/noscript-with-javascript-disabled-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-The text inside the 'noscript' tag inside the iframe should render: 
-
---------
-Frame: '<!--framePath //<!--frame0-->-->'
---------
-PASS: This test case verifies that contents inside are rendered when Javascript is disabled.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor-expected.txt
deleted file mode 100644
index 3981b25..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-The square below should be 100px by 100px.
-
-PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor-vertical-lr-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor-vertical-lr-expected.txt
deleted file mode 100644
index 3981b25..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor-vertical-lr-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-The square below should be 100px by 100px.
-
-PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/no-focus-ring-embed-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/no-focus-ring-embed-expected.txt
deleted file mode 100644
index a4fc996..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/no-focus-ring-embed-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-CONSOLE MESSAGE: Blink Test Plugin: initializing
-CONSOLE MESSAGE: Blink Test Plugin: DidChangeFocus(true)
-CONSOLE MESSAGE: Blink Test Plugin: MouseDown at (5,5)
-CONSOLE MESSAGE: Blink Test Plugin: MouseUp at (5,5)
-
-This test requires DumpRenderTree. Click the orange border, a focus ring should not appear.
-EMBED Event: focus PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/no-focus-ring-object-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/no-focus-ring-object-expected.txt
deleted file mode 100644
index 04dbf97..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/no-focus-ring-object-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-CONSOLE MESSAGE: Blink Test Plugin: initializing
-CONSOLE MESSAGE: Blink Test Plugin: DidChangeFocus(true)
-CONSOLE MESSAGE: Blink Test Plugin: MouseDown at (5,5)
-CONSOLE MESSAGE: Blink Test Plugin: MouseUp at (5,5)
-
-This test requires DumpRenderTree. Click the orange border, a focus ring should not appear.
-OBJECT Event: focus PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/object-with-non-empty-classid-triggers-fallback-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/object-with-non-empty-classid-triggers-fallback-expected.txt
deleted file mode 100644
index 745fc69..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/object-with-non-empty-classid-triggers-fallback-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This tests that fallback content is rendered for objects with non-empty classid attributes. The test passes if two lines are printed below containing the work 'PASS'.
-
-object with classid attribute but no type attribute renders fallback: PASS
-object with classid and type attributes renders fallback: PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/render-inline-cast-to-render-box-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/render-inline-cast-to-render-box-crash-expected.txt
deleted file mode 100644
index 2afa0bfd..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/replaced/render-inline-cast-to-render-box-crash-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-PASS. WebKit didn't crash.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/shapes/shape-outside-floats/shape-outside-floats-iframe-inset-negative-width-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/shapes/shape-outside-floats/shape-outside-floats-iframe-inset-negative-width-crash-expected.txt
deleted file mode 100644
index 2051a5a..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/shapes/shape-outside-floats/shape-outside-floats-iframe-inset-negative-width-crash-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-This test should not crash in a debug build.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/shapes/shape-outside-floats/shape-outside-floats-iframe-inset-rectangle-negative-width-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/shapes/shape-outside-floats/shape-outside-floats-iframe-inset-rectangle-negative-width-crash-expected.txt
deleted file mode 100644
index 2051a5a..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/shapes/shape-outside-floats/shape-outside-floats-iframe-inset-rectangle-negative-width-crash-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-This test should not crash in a debug build.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/cell-in-row-before-misnested-text-crash-css-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/cell-in-row-before-misnested-text-crash-css-expected.txt
deleted file mode 100644
index c3ac673..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/cell-in-row-before-misnested-text-crash-css-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
-0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99	xxx Whee
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/cell-in-row-before-misnested-text-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/cell-in-row-before-misnested-text-crash-expected.txt
deleted file mode 100644
index c3ac673..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/cell-in-row-before-misnested-text-crash-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
-0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99	xxx Whee
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/recalc-section-first-body-crash-main-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/recalc-section-first-body-crash-main-expected.txt
deleted file mode 100644
index 984ab80..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/recalc-section-first-body-crash-main-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-PASS 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/section-in-table-before-misnested-text-crash-css-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/section-in-table-before-misnested-text-crash-css-expected.txt
deleted file mode 100644
index 1a105d647b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/section-in-table-before-misnested-text-crash-css-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
-0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99xxx Whee
-QQQ
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/section-in-table-before-misnested-text-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/section-in-table-before-misnested-text-crash-expected.txt
deleted file mode 100644
index 1a105d647b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/section-in-table-before-misnested-text-crash-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This test checks whether a particular odd arrangement of DOM nodes results in render tree consistency violations.
-0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99xxx Whee
-QQQ
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/table-parts-not-ortho-writing-mode-root-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/table-parts-not-ortho-writing-mode-root-expected.txt
deleted file mode 100644
index f95595b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/table-parts-not-ortho-writing-mode-root-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-No crash = pass
-Ridiculous markup is needed, empirically, to trigger a race condition.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/table-rowspan-table-height-and-row-precent-height-too-large-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/table-rowspan-table-height-and-row-precent-height-too-large-expected.txt
deleted file mode 100644
index a11b8bc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/table-rowspan-table-height-and-row-precent-height-too-large-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Test for chromium bug : 408066.
-Page is crashing on assression when table row span cell's percent height is too large.
-For this test to PASS, it should not crash.
-This row span cell height is too large.
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/td-bordercolor-attribute-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/td-bordercolor-attribute-expected.txt
deleted file mode 100644
index 9644fad6..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/table/td-bordercolor-attribute-expected.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-There should be no red below.
-The bordercolor attribute on a cell or row should have no effect.
-https://bugs.webkit.org/show_bug.cgi?id=101677
-
-PASS document.defaultView.getComputedStyle(cell, null).getPropertyValue("border-top-color") is "rgb(0, 0, 0)"
-PASS document.defaultView.getComputedStyle(cell, null).getPropertyValue("border-top-width") is "0px"
-PASS document.defaultView.getComputedStyle(table, null).getPropertyValue("border-top-color") is "rgb(128, 128, 128)"
-PASS document.defaultView.getComputedStyle(table, null).getPropertyValue("border-top-width") is "0px"
-PASS document.defaultView.getComputedStyle(cell2, null).getPropertyValue("border-top-color") is "rgb(128, 128, 128)"
-PASS document.defaultView.getComputedStyle(cell2, null).getPropertyValue("border-top-width") is "1px"
-PASS document.defaultView.getComputedStyle(table2, null).getPropertyValue("border-top-color") is "rgb(128, 128, 128)"
-PASS document.defaultView.getComputedStyle(table2, null).getPropertyValue("border-top-width") is "1px"
-PASS document.defaultView.getComputedStyle(cell3, null).getPropertyValue("border-top-color") is "rgb(128, 128, 128)"
-PASS document.defaultView.getComputedStyle(cell3, null).getPropertyValue("border-top-width") is "1px"
-PASS document.defaultView.getComputedStyle(table3, null).getPropertyValue("border-top-color") is "rgb(128, 128, 128)"
-PASS document.defaultView.getComputedStyle(table3, null).getPropertyValue("border-top-width") is "2px"
-PASS document.defaultView.getComputedStyle(row4, null).getPropertyValue("border-top-color") is "rgb(128, 128, 128)"
-PASS document.defaultView.getComputedStyle(row4, null).getPropertyValue("border-top-width") is "0px"
-PASS document.defaultView.getComputedStyle(table4, null).getPropertyValue("border-top-color") is "rgb(128, 128, 128)"
-PASS document.defaultView.getComputedStyle(table4, null).getPropertyValue("border-top-width") is "2px"
-PASS document.defaultView.getComputedStyle(col5, null).getPropertyValue("border-top-color") is "rgb(0, 0, 0)"
-PASS document.defaultView.getComputedStyle(col5, null).getPropertyValue("border-top-width") is "0px"
-PASS document.defaultView.getComputedStyle(table5, null).getPropertyValue("border-top-color") is "rgb(128, 128, 128)"
-PASS document.defaultView.getComputedStyle(table5, null).getPropertyValue("border-top-width") is "2px"
-PASS document.defaultView.getComputedStyle(tbody6, null).getPropertyValue("border-top-color") is "rgb(128, 128, 128)"
-PASS document.defaultView.getComputedStyle(tbody6, null).getPropertyValue("border-top-width") is "0px"
-PASS document.defaultView.getComputedStyle(table6, null).getPropertyValue("border-top-color") is "rgb(128, 128, 128)"
-PASS document.defaultView.getComputedStyle(table6, null).getPropertyValue("border-top-width") is "2px"
-PASS document.defaultView.getComputedStyle(col7, null).getPropertyValue("border-top-color") is "rgb(0, 0, 0)"
-PASS document.defaultView.getComputedStyle(col7, null).getPropertyValue("border-top-width") is "0px"
-PASS document.defaultView.getComputedStyle(table7, null).getPropertyValue("border-top-color") is "rgb(128, 128, 128)"
-PASS document.defaultView.getComputedStyle(table7, null).getPropertyValue("border-top-width") is "2px"
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/bidi-isolate-nextlinebreak-failure-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/bidi-isolate-nextlinebreak-failure-expected.txt
deleted file mode 100644
index d7f073b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/bidi-isolate-nextlinebreak-failure-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This tests having an inline element with -webkit-isolate immediately following BR. WebKit should not hit an assertion.
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/bidi-reverse-runs-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/bidi-reverse-runs-crash-expected.txt
deleted file mode 100644
index af7a576..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/bidi-reverse-runs-crash-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-sdf 
-PASS if did not crash.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/line-break-between-text-nodes-with-inline-blocks-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/line-break-between-text-nodes-with-inline-blocks-expected.txt
deleted file mode 100644
index 2e47f56..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/line-break-between-text-nodes-with-inline-blocks-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-foo bar 
-Test passes if no crash.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/plain-text-line-breaks-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/plain-text-line-breaks-expected.txt
deleted file mode 100644
index 6ab4a596..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/plain-text-line-breaks-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-  
-SUCCESS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/whitespace/nowrap-trailing-space-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/whitespace/nowrap-trailing-space-expected.txt
deleted file mode 100644
index d9e1a95..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/whitespace/nowrap-trailing-space-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-crbug.com/561997: Trailing space in a no-wrap span should not prevent setting a line-break on that span.
-
-All text should be on same line.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash-expected.txt
new file mode 100644
index 0000000..2f695e8c
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash-expected.txt
@@ -0,0 +1 @@
+Test passes if there is no crash.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/tokenizer/ignore-tags-in-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/tokenizer/ignore-tags-in-iframe-expected.txt
deleted file mode 100644
index 4b478af..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/tokenizer/ignore-tags-in-iframe-expected.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Test for http://bugs.webkit.org/show_bug.cgi?id=12264 REGRESSION (r18843): Webkit crashes on 43Folders.com home page.
-
-All tags below should report “PASS”
-
-<script>: PASS
-<style>: PASS
-<textarea>: PASS
-<title>: PASS
-<xmp>: PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/tokenizer/script_extra_close-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/tokenizer/script_extra_close-expected.txt
deleted file mode 100644
index 42fa8d83..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/tokenizer/script_extra_close-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-TEST... PASSED. This text should show up.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/workers/shared-worker-location-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/workers/shared-worker-location-expected.txt
deleted file mode 100644
index 6715999..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/workers/shared-worker-location-expected.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-Test WorkerLocation properties.
-
-WorkerLocation: function WorkerLocation() { [native code] }
-typeof location: object
-location: file:<...>/fast/workers/resources/shared-worker-common.js
-location.href: file:<...>/fast/workers/resources/shared-worker-common.js
-location.origin: file://
-location.protocol: file:
-location.host:
-location.hostname:
-location.port:
-location.pathname: <...>/fast/workers/resources/shared-worker-common.js
-location.search:
-location.hash:
-DONE
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/workers/worker-location-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/workers/worker-location-expected.txt
deleted file mode 100644
index 58c95cb..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/workers/worker-location-expected.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-Test WorkerLocation properties.
-
-WorkerLocation: function WorkerLocation() { [native code] }
-typeof location: object
-location: file:<...>/fast/workers/resources/worker-common.js
-location.href: file:<...>/fast/workers/resources/worker-common.js
-location.origin: file://
-location.protocol: file:
-location.host:
-location.hostname:
-location.port:
-location.pathname: <...>/fast/workers/resources/worker-common.js
-location.search:
-location.hash:
-DONE
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xmlhttprequest/xmlhttprequest-open-after-iframe-onload-remove-self-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xmlhttprequest/xmlhttprequest-open-after-iframe-onload-remove-self-expected.txt
deleted file mode 100644
index 87796cf7..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xmlhttprequest/xmlhttprequest-open-after-iframe-onload-remove-self-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This tests that removing a child frame in XMLHttpRequest does not crash the renderer.
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xpath/id-simple-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xpath/id-simple-expected.txt
deleted file mode 100644
index 338ad47..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xpath/id-simple-expected.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Test for bug 15380: XPath: id('foo') doesn't resolve correctly.
-
- 
-id('nested1') PASSED: [object HTMLDivElement]
-id('nested1')/div[1] PASSED: [object HTMLDivElement]
-id('nested1')//div[1] PASSED: [object HTMLDivElement]
-id('nested1')/div[1]/input[2] PASSED: [object HTMLInputElement]
-id('nested1')/div[1]//input[2] PASSED: [object HTMLInputElement]
-id('nested1')//div[1]/input[2] PASSED: [object HTMLInputElement]
-id('nested1')//div[1]//input[2] PASSED: [object HTMLInputElement]
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xpath/preceding-axis-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xpath/preceding-axis-expected.txt
deleted file mode 100644
index 21dd8ad..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xpath/preceding-axis-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-Querying in the following...
-
-<div xmlns="http://www.w3.org/1999/xhtml" id="test">
-    <span id="A"></span>
-    <div>
-      <span id="B">
-        <span id="C"></span>
-      </span>
-    </div>
-    <span id="D"></span>
-</div>
-
-Query "preceding::xhtml:span" from span#D
-Result: span#A span#B span#C
-Expected: span#A span#B span#C
-***SUCCESS***
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xpath/union-context-node-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xpath/union-context-node-expected.txt
deleted file mode 100644
index 62499196..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xpath/union-context-node-expected.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-Querying in the following...
-
-<div xmlns="http://www.w3.org/1999/xhtml" id="test">
-    <span id="A">
-        <span id="B"></span>
-    </span>
-    <span id="C">
-        <span id="D"></span>
-    </span>
-</div>
-
-Query "ancestor::xhtml:span" from span#B
-Result: span#A
-Expected: span#A
-SUCCESS
-
-Query ".|ancestor::xhtml:span" from span#B
-Result: span#A span#B
-Expected: span#A span#B
-SUCCESS
-
-Query "ancestor::xhtml:span|." from span#B
-Result: span#A span#B
-Expected: span#A span#B
-SUCCESS
-
-Query "ancestor::xhtml:*[local-name()='span']" from span#B
-Result: span#A
-Expected: span#A
-SUCCESS
-
-Query ".|ancestor::xhtml:*[local-name()='span']" from span#B
-Result: span#A span#B
-Expected: span#A span#B
-SUCCESS
-
-Query "ancestor::xhtml:*[local-name()='span']|." from span#B
-Result: span#A span#B
-Expected: span#A span#B
-SUCCESS
-
-Query "(ancestor::xhtml:*[local-name()='span'])|." from span#B
-Result: span#A span#B
-Expected: span#A span#B
-SUCCESS
-
-Query "following::xhtml:*[local-name()='span']" from span#B
-Result: span#C span#D
-Expected: span#C span#D
-SUCCESS
-
-Query ".|following::xhtml:*[local-name()='span']" from span#B
-Result: span#B span#C span#D
-Expected: span#B span#C span#D
-SUCCESS
-
-Query "following::xhtml:*[local-name()='span']|." from span#B
-Result: span#B span#C span#D
-Expected: span#B span#C span#D
-SUCCESS
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xpath/xpath-detached-nodes-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xpath/xpath-detached-nodes-expected.txt
deleted file mode 100644
index d1415894..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xpath/xpath-detached-nodes-expected.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-This tests XPath expressions on detached document fragments and nodes.
-See https://bugs.webkit.org/show_bug.cgi?id=36427
-
-PASS document.evaluate('count(/div)', child, null, XPathResult.NUMBER_TYPE, null).numberValue is 1
-PASS document.evaluate('count(/html)', child, null, XPathResult.NUMBER_TYPE, null).numberValue is 0
-PASS document.evaluate('count(/)', child, null, XPathResult.NUMBER_TYPE, null).numberValue is 1
-PASS document.evaluate('count(//html)', child, null, XPathResult.NUMBER_TYPE, null).numberValue is 0
-PASS document.evaluate('count(//div)', child, null, XPathResult.NUMBER_TYPE, null).numberValue is 1
-PASS document.evaluate('count(//h2)', child, null, XPathResult.NUMBER_TYPE, null).numberValue is 1
-PASS document.evaluate('count(/h1)', ele, null, XPathResult.NUMBER_TYPE, null).numberValue is 1
-PASS document.evaluate('count(/html)', ele, null, XPathResult.NUMBER_TYPE, null).numberValue is 0
-PASS document.evaluate('count(/)', ele, null, XPathResult.NUMBER_TYPE, null).numberValue is 1
-PASS document.evaluate('count(//html)', ele, null, XPathResult.NUMBER_TYPE, null).numberValue is 0
-PASS document.evaluate('count(//p)', ele, null, XPathResult.NUMBER_TYPE, null).numberValue is 0
-PASS document.evaluate('count(//h1)', ele, null, XPathResult.NUMBER_TYPE, null).numberValue is 1
-PASS document.evaluate('/* | *', ele, null, XPathResult.NUMBER_TYPE, null).numberValue is NaN
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xsl/xslt-in-subframe-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xsl/xslt-in-subframe-expected.txt
deleted file mode 100644
index 79c48bc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/xsl/xslt-in-subframe-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Make sure that XSLT works in a subframe. 
-
---------
-Frame: '<!--framePath //<!--frame0-->-->'
---------
-Hello
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/harness-tests/special-characters-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/harness-tests/special-characters-expected.txt
deleted file mode 100644
index 8c60ce2..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/harness-tests/special-characters-expected.txt
+++ /dev/null
@@ -1,143 +0,0 @@
-This is a testharness.js-based test.
-PASS Unescaped \ in test name.
-PASS Escaped "\\" in test name.
-FAIL Unescaped "\\" in test message. Expected Error: \ character.
-FAIL Escaped "\\" in test message. Expected Error: "\\" character.
-PASS Unescaped \r
- in test name.
-PASS Escaped "\r\n" in test name.
-FAIL Unescaped "\r\n" in test message. Expected Error: \r
- character.
-FAIL Escaped "\r\n" in test message. Expected Error: "\r\n" character.
-PASS Unescaped \0 in test name.
-PASS Escaped "\0" in test name.
-FAIL Unescaped "\0" in test message. Expected Error: \0 character.
-FAIL Escaped "\0" in test message. Expected Error: "\0" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x01" in test name.
-FAIL Unescaped "\x01" in test message. Expected Error:  character.
-FAIL Escaped "\x01" in test message. Expected Error: "\x01" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x02" in test name.
-FAIL Unescaped "\x02" in test message. Expected Error:  character.
-FAIL Escaped "\x02" in test message. Expected Error: "\x02" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x03" in test name.
-FAIL Unescaped "\x03" in test message. Expected Error:  character.
-FAIL Escaped "\x03" in test message. Expected Error: "\x03" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x04" in test name.
-FAIL Unescaped "\x04" in test message. Expected Error:  character.
-FAIL Escaped "\x04" in test message. Expected Error: "\x04" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x05" in test name.
-FAIL Unescaped "\x05" in test message. Expected Error:  character.
-FAIL Escaped "\x05" in test message. Expected Error: "\x05" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x06" in test name.
-FAIL Unescaped "\x06" in test message. Expected Error:  character.
-FAIL Escaped "\x06" in test message. Expected Error: "\x06" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x07" in test name.
-FAIL Unescaped "\x07" in test message. Expected Error:  character.
-FAIL Escaped "\x07" in test message. Expected Error: "\x07" character.
-PASS Unescaped  in test name.
-PASS Escaped "\b" in test name.
-FAIL Unescaped "\b" in test message. Expected Error:  character.
-FAIL Escaped "\b" in test message. Expected Error: "\b" character.
-PASS Unescaped 	 in test name.
-PASS Escaped "\t" in test name.
-FAIL Unescaped "\t" in test message. Expected Error: 	 character.
-FAIL Escaped "\t" in test message. Expected Error: "\t" character.
-PASS Unescaped 
- in test name.
-PASS Escaped "\n" in test name.
-FAIL Unescaped "\n" in test message. Expected Error: 
- character.
-FAIL Escaped "\n" in test message. Expected Error: "\n" character.
-PASS Unescaped  in test name.
-PASS Escaped "\v" in test name.
-FAIL Unescaped "\v" in test message. Expected Error:  character.
-FAIL Escaped "\v" in test message. Expected Error: "\v" character.
-PASS Unescaped  in test name.
-PASS Escaped "\f" in test name.
-FAIL Unescaped "\f" in test message. Expected Error:  character.
-FAIL Escaped "\f" in test message. Expected Error: "\f" character.
-PASS Unescaped \r in test name.
-PASS Escaped "\r" in test name.
-FAIL Unescaped "\r" in test message. Expected Error: \r character.
-FAIL Escaped "\r" in test message. Expected Error: "\r" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x0e" in test name.
-FAIL Unescaped "\x0e" in test message. Expected Error:  character.
-FAIL Escaped "\x0e" in test message. Expected Error: "\x0e" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x0f" in test name.
-FAIL Unescaped "\x0f" in test message. Expected Error:  character.
-FAIL Escaped "\x0f" in test message. Expected Error: "\x0f" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x10" in test name.
-FAIL Unescaped "\x10" in test message. Expected Error:  character.
-FAIL Escaped "\x10" in test message. Expected Error: "\x10" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x11" in test name.
-FAIL Unescaped "\x11" in test message. Expected Error:  character.
-FAIL Escaped "\x11" in test message. Expected Error: "\x11" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x12" in test name.
-FAIL Unescaped "\x12" in test message. Expected Error:  character.
-FAIL Escaped "\x12" in test message. Expected Error: "\x12" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x13" in test name.
-FAIL Unescaped "\x13" in test message. Expected Error:  character.
-FAIL Escaped "\x13" in test message. Expected Error: "\x13" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x14" in test name.
-FAIL Unescaped "\x14" in test message. Expected Error:  character.
-FAIL Escaped "\x14" in test message. Expected Error: "\x14" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x15" in test name.
-FAIL Unescaped "\x15" in test message. Expected Error:  character.
-FAIL Escaped "\x15" in test message. Expected Error: "\x15" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x16" in test name.
-FAIL Unescaped "\x16" in test message. Expected Error:  character.
-FAIL Escaped "\x16" in test message. Expected Error: "\x16" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x17" in test name.
-FAIL Unescaped "\x17" in test message. Expected Error:  character.
-FAIL Escaped "\x17" in test message. Expected Error: "\x17" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x18" in test name.
-FAIL Unescaped "\x18" in test message. Expected Error:  character.
-FAIL Escaped "\x18" in test message. Expected Error: "\x18" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x19" in test name.
-FAIL Unescaped "\x19" in test message. Expected Error:  character.
-FAIL Escaped "\x19" in test message. Expected Error: "\x19" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x1a" in test name.
-FAIL Unescaped "\x1a" in test message. Expected Error:  character.
-FAIL Escaped "\x1a" in test message. Expected Error: "\x1a" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x1b" in test name.
-FAIL Unescaped "\x1b" in test message. Expected Error:  character.
-FAIL Escaped "\x1b" in test message. Expected Error: "\x1b" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x1c" in test name.
-FAIL Unescaped "\x1c" in test message. Expected Error:  character.
-FAIL Escaped "\x1c" in test message. Expected Error: "\x1c" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x1d" in test name.
-FAIL Unescaped "\x1d" in test message. Expected Error:  character.
-FAIL Escaped "\x1d" in test message. Expected Error: "\x1d" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x1e" in test name.
-FAIL Unescaped "\x1e" in test message. Expected Error:  character.
-FAIL Escaped "\x1e" in test message. Expected Error: "\x1e" character.
-PASS Unescaped  in test name.
-PASS Escaped "\x1f" in test name.
-FAIL Unescaped "\x1f" in test message. Expected Error:  character.
-FAIL Escaped "\x1f" in test message. Expected Error: "\x1f" character.
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/12-55-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/12-55-expected.txt
deleted file mode 100644
index 44bfcdc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/12-55-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/182-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/182-expected.txt
deleted file mode 100644
index 44bfcdc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/182-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/2-dht-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/2-dht-expected.txt
deleted file mode 100644
index 44bfcdc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/2-dht-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/23-55-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/23-55-expected.txt
deleted file mode 100644
index 44bfcdc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/23-55-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/55-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/55-expected.txt
deleted file mode 100644
index 44bfcdc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/55-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-border-image-source-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-border-image-source-expected.txt
deleted file mode 100644
index d99bfa2..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-border-image-source-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
- 
- 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-border-radius-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-border-radius-expected.txt
deleted file mode 100644
index 9a47ee5..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-border-radius-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-filter-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-filter-expected.txt
deleted file mode 100644
index 9a47ee5..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-filter-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-group-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-group-expected.txt
deleted file mode 100644
index 8b13789..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-group-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-image-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-image-expected.txt
deleted file mode 100644
index 9a47ee5..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-image-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-image-profile-match-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-image-profile-match-expected.txt
deleted file mode 100644
index 5c484c2f..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-image-profile-match-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-  
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-layer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-layer-expected.txt
deleted file mode 100644
index 9a47ee5..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-layer-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-  
-  
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-layer-filter-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-layer-filter-expected.txt
deleted file mode 100644
index 1a4baf5..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-layer-filter-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-mask-image-svg-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-mask-image-svg-expected.txt
deleted file mode 100644
index 8d1c8b6..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-mask-image-svg-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
- 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/embed-does-not-propagate-dimensions-to-object-ancestor-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/embed-does-not-propagate-dimensions-to-object-ancestor-expected.txt
deleted file mode 100644
index 234b293b..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/embed-does-not-propagate-dimensions-to-object-ancestor-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-SUCCESS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/png-suite/test-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/png-suite/test-expected.txt
deleted file mode 100644
index f095e1d..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/png-suite/test-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-              
-              
-       
-                        
-          
-                 
-       
-     
-                                   
-            
-             
-   
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/inspector-protocol/page/capture-snapshot-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/inspector-protocol/page/capture-snapshot-expected.txt
deleted file mode 100644
index 67e795f9..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/inspector-protocol/page/capture-snapshot-expected.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-Tests capturing MHTML snapshots.
-
-Capturing without specified format:
-From: <Saved by Blink><Snapshot-Content-Location: >Subject: <Date: ><MIME-Version: >Content-Type: multipart/related;	type="text/html";<boundary="----MultipartBoundary--><------MultipartBoundary-->Content-Type: text/html<Content-ID: ><Content-Transfer-Encoding: ><Content-Location: ><html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset==3Dwindows-1252"></head><body><div id=3D"x" class=3D"container">      <p style=3D"color: red">Text</p>     =20    </div>    </body></html><------MultipartBoundary-->
-
-Capturing with format: foo
-{
-    error : {
-        code : -32000
-        message : Unsupported snapshot format
-    }
-    id : <number>
-    sessionId : <string>
-}
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/plugins/plugin-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/plugins/plugin-scroll-expected.txt
deleted file mode 100644
index 1408e6a..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/plugins/plugin-scroll-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-CONSOLE MESSAGE: Blink Test Plugin: initializing
-CONSOLE MESSAGE: Blink Test Plugin: initializing
-CONSOLE MESSAGE: Blink Test Plugin: initializing
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/scrollbars/custom-scrollbar-enable-changes-thickness-with-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/scrollbars/custom-scrollbar-enable-changes-thickness-with-iframe-expected.txt
deleted file mode 100644
index a3c6f84..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/scrollbars/custom-scrollbar-enable-changes-thickness-with-iframe-expected.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This test verifies that layout runs correctly when custom scrollbar styles produce different thickness for the enabled and disabled states, and are inherited by an iframe.
-
-The test passes if it does not crash. 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/scrollbars/scrollbar-owning-renderer-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/scrollbars/scrollbar-owning-renderer-crash-expected.txt
deleted file mode 100644
index 5cb75f27..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/scrollbars/scrollbar-owning-renderer-crash-expected.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-WebKit bug 80610 - Crash due to owning renderer not removed from custom scrollbar.
-PASS. WebKit didn't crash.
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/security/autocomplete-cleared-on-back-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/security/autocomplete-cleared-on-back-expected.txt
deleted file mode 100644
index 822a447..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/security/autocomplete-cleared-on-back-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-This tests whether or not form input values that are designated autocomplete="off" retain their values after a navigation away from the page then returning back to it via the back button.
-
-
-Input value 1 -
-Input value 2 -
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/animations/multiple-begin-animation-events-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/animations/multiple-begin-animation-events-expected.txt
deleted file mode 100644
index 660b40f4..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/animations/multiple-begin-animation-events-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
- PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/as-image/svg-image-leak-loader-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/as-image/svg-image-leak-loader-expected.txt
deleted file mode 100644
index 4ae7384..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/as-image/svg-image-leak-loader-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This test checks if SVGIMages cause MainResourceLoaders leaks which will prevent later sub-resources from being loaded.
-This test should produce "SUCCESS" and should not timeout.
-SUCCESS
-                    
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/custom/elementTimeControl-nan-crash-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/custom/elementTimeControl-nan-crash-expected.txt
deleted file mode 100644
index 46e40609..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/custom/elementTimeControl-nan-crash-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test for WK100322: ElementTimeControl should check for invalid values. This test passes if it does not crash. 
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/custom/svg-allowed-in-dashboard-object-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/custom/svg-allowed-in-dashboard-object-expected.txt
deleted file mode 100644
index 346c5560..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/custom/svg-allowed-in-dashboard-object-expected.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-This test makes sure we can open SVG documents in Dashboard compatibility mode. It can not be tested manually.
-
-  
-PASS: Loaded SVG document in <object> tag.
-PASS: Loaded SVG document in <element> tag.
-PASS: Loaded SVG document in <iframe> tag.
-PASS: SVG Documents were loaded
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/custom/tref-with-progress-tag-setpseudo-assert-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/custom/tref-with-progress-tag-setpseudo-assert-expected.txt
deleted file mode 100644
index ac8167d..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/svg/custom/tref-with-progress-tag-setpseudo-assert-expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-PASS  
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/12-55-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/12-55-expected.txt
deleted file mode 100644
index 44bfcdc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/12-55-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/182-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/182-expected.txt
deleted file mode 100644
index 44bfcdc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/182-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/2-dht-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/2-dht-expected.txt
deleted file mode 100644
index 44bfcdc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/2-dht-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/23-55-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/23-55-expected.txt
deleted file mode 100644
index 44bfcdc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/23-55-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/55-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/55-expected.txt
deleted file mode 100644
index 44bfcdc..0000000
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/virtual/gpu-rasterization/images/55-expected.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-       
-
-
diff --git a/third_party/blink/web_tests/fullscreen/exit-full-screen-iframe-expected.txt b/third_party/blink/web_tests/fullscreen/exit-full-screen-iframe-expected.txt
index e3e702b..9e9d41e2 100644
--- a/third_party/blink/web_tests/fullscreen/exit-full-screen-iframe-expected.txt
+++ b/third_party/blink/web_tests/fullscreen/exit-full-screen-iframe-expected.txt
@@ -8,4 +8,3 @@
 TEST(document.getElementById('frame').contentDocument.webkitIsFullScreen==false) OK
 END OF TEST
 
-
diff --git a/third_party/blink/web_tests/fullscreen/full-screen-request-not-supported-expected.txt b/third_party/blink/web_tests/fullscreen/full-screen-request-not-supported-expected.txt
index 2d3890a..f30901c 100644
--- a/third_party/blink/web_tests/fullscreen/full-screen-request-not-supported-expected.txt
+++ b/third_party/blink/web_tests/fullscreen/full-screen-request-not-supported-expected.txt
@@ -1,5 +1,4 @@
 EVENT(webkitfullscreenerror)
 END OF TEST
 
-
 Tests for the fullscreenSupported setting which will be set to false in those platforms where fullscreen is not supported.
diff --git a/third_party/blink/web_tests/fullscreen/non-ancestor-iframe-expected.txt b/third_party/blink/web_tests/fullscreen/non-ancestor-iframe-expected.txt
index 7578e943..1a34301 100644
--- a/third_party/blink/web_tests/fullscreen/non-ancestor-iframe-expected.txt
+++ b/third_party/blink/web_tests/fullscreen/non-ancestor-iframe-expected.txt
@@ -1,5 +1,4 @@
 This tests that full screen mode will not exit when a non-ancestor iframe is loaded in the page. Click enter full screen to start test.
-
 EVENT(webkitfullscreenchange)
 EVENT(load)
 EXPECTED (document.webkitIsFullScreen == 'true') OK
diff --git a/third_party/blink/web_tests/fullscreen/video-controls-override-expected.txt b/third_party/blink/web_tests/fullscreen/video-controls-override-expected.txt
index a702bb8e..26348bb 100644
--- a/third_party/blink/web_tests/fullscreen/video-controls-override-expected.txt
+++ b/third_party/blink/web_tests/fullscreen/video-controls-override-expected.txt
@@ -1,6 +1,5 @@
 This tests that the video element's "controls" attribute is overridden in full screen mode, and that the controls are correctly hidden upon exiting full screen. Press any key to continue.
 
-
 EVENT(webkitfullscreenchange)
 EXPECTED (shadowRoot = internals.shadowRoot(video) != 'null') OK
 EXPECTED (panel = mediaControlsElement(shadowRoot.firstChild, '-webkit-media-controls-panel') != 'null') OK
diff --git a/third_party/blink/web_tests/fullscreen/video-fail-to-enter-full-screen-expected.txt b/third_party/blink/web_tests/fullscreen/video-fail-to-enter-full-screen-expected.txt
index 78416243..d023fa2 100644
--- a/third_party/blink/web_tests/fullscreen/video-fail-to-enter-full-screen-expected.txt
+++ b/third_party/blink/web_tests/fullscreen/video-fail-to-enter-full-screen-expected.txt
@@ -1,6 +1,5 @@
 CONSOLE WARNING: line 12: Failed to execute 'requestFullscreen' on 'Element': API can only be initiated by a user gesture.
 This tests that the video should not be rendered in full screen if requestFullScreen() fails.
 
-
 END OF TEST
 
diff --git a/third_party/blink/web_tests/geolocation-api/callback-to-deleted-context-expected.txt b/third_party/blink/web_tests/geolocation-api/callback-to-deleted-context-expected.txt
index 4864ea7..cabf01e67 100644
--- a/third_party/blink/web_tests/geolocation-api/callback-to-deleted-context-expected.txt
+++ b/third_party/blink/web_tests/geolocation-api/callback-to-deleted-context-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/geolocation-api/callback-to-remote-context-expected.txt b/third_party/blink/web_tests/geolocation-api/callback-to-remote-context-expected.txt
index d65ebbf..a3621f65 100644
--- a/third_party/blink/web_tests/geolocation-api/callback-to-remote-context-expected.txt
+++ b/third_party/blink/web_tests/geolocation-api/callback-to-remote-context-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/geolocation-api/callback-to-remote-context2-expected.txt b/third_party/blink/web_tests/geolocation-api/callback-to-remote-context2-expected.txt
index 4382892..37e5bb0b 100644
--- a/third_party/blink/web_tests/geolocation-api/callback-to-remote-context2-expected.txt
+++ b/third_party/blink/web_tests/geolocation-api/callback-to-remote-context2-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/geolocation-api/disconnected-frame-already-expected.txt b/third_party/blink/web_tests/geolocation-api/disconnected-frame-already-expected.txt
index 9bdcd30..ea6f9c17 100644
--- a/third_party/blink/web_tests/geolocation-api/disconnected-frame-already-expected.txt
+++ b/third_party/blink/web_tests/geolocation-api/disconnected-frame-already-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/geolocation-api/disconnected-frame-expected.txt b/third_party/blink/web_tests/geolocation-api/disconnected-frame-expected.txt
index ba2f938..224d11e1 100644
--- a/third_party/blink/web_tests/geolocation-api/disconnected-frame-expected.txt
+++ b/third_party/blink/web_tests/geolocation-api/disconnected-frame-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/geolocation-api/disconnected-frame-permission-denied-expected.txt b/third_party/blink/web_tests/geolocation-api/disconnected-frame-permission-denied-expected.txt
index ed898e8..602cc77 100644
--- a/third_party/blink/web_tests/geolocation-api/disconnected-frame-permission-denied-expected.txt
+++ b/third_party/blink/web_tests/geolocation-api/disconnected-frame-permission-denied-expected.txt
@@ -11,4 +11,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/html/dialog/form-method-dialog-expected.txt b/third_party/blink/web_tests/html/dialog/form-method-dialog-expected.txt
index 23100ef..85790d5b 100644
--- a/third_party/blink/web_tests/html/dialog/form-method-dialog-expected.txt
+++ b/third_party/blink/web_tests/html/dialog/form-method-dialog-expected.txt
@@ -103,6 +103,4 @@
 
 TEST COMPLETE
 
-
-
  
diff --git a/third_party/blink/web_tests/html/dialog/inert-focus-in-frames-expected.txt b/third_party/blink/web_tests/html/dialog/inert-focus-in-frames-expected.txt
index 528b246..3bc66c9 100644
--- a/third_party/blink/web_tests/html/dialog/inert-focus-in-frames-expected.txt
+++ b/third_party/blink/web_tests/html/dialog/inert-focus-in-frames-expected.txt
@@ -18,4 +18,3 @@
 Closing the dialog in frame1. The modal dialog in the iframe does not block nodes in its parent.
 PASS "iframe-input"; focusedElement === theElement is false
 PASS "frame1-input"; focusedElement === theElement is true
-
diff --git a/third_party/blink/web_tests/html/dialog/simulated-click-inert-expected.txt b/third_party/blink/web_tests/html/dialog/simulated-click-inert-expected.txt
index 6b754e7..fde1d56 100644
--- a/third_party/blink/web_tests/html/dialog/simulated-click-inert-expected.txt
+++ b/third_party/blink/web_tests/html/dialog/simulated-click-inert-expected.txt
@@ -1,5 +1,4 @@
 Ensure that simulated click is still dispatched to an inert node. To test manually, click the CLICK ME label and verify it does change the value of the checkbox.
 
 PASS
-
 CLICK ME
diff --git a/third_party/blink/web_tests/html/document_metadata/base-expected.txt b/third_party/blink/web_tests/html/document_metadata/base-expected.txt
index bfb05b3..4f4c2eb 100644
--- a/third_party/blink/web_tests/html/document_metadata/base-expected.txt
+++ b/third_party/blink/web_tests/html/document_metadata/base-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/html/sections/body-clone-link-decl-parent-crash-expected.txt b/third_party/blink/web_tests/html/sections/body-clone-link-decl-parent-crash-expected.txt
index 69154eb2..48bdc14 100644
--- a/third_party/blink/web_tests/html/sections/body-clone-link-decl-parent-crash-expected.txt
+++ b/third_party/blink/web_tests/html/sections/body-clone-link-decl-parent-crash-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/http/tests/local/drag-over-remote-content-expected.txt b/third_party/blink/web_tests/http/tests/local/drag-over-remote-content-expected.txt
index 1a565bd1..52fb975a 100644
--- a/third_party/blink/web_tests/http/tests/local/drag-over-remote-content-expected.txt
+++ b/third_party/blink/web_tests/http/tests/local/drag-over-remote-content-expected.txt
@@ -1,12 +1,9 @@
 This page just embeds drag-over-remote-content-iframe.html in an iframe. See its results below:
 
-
-
 This page tests the URL the DOM sees while the user drags a file. If the test passes, you'll see a PASS message.
 
 https://bugs.webkit.org/show_bug.cgi?id=25907 | rdar://problem/6910832.
 
 To test, drag Abe's image into this light blue div.
-
 PASS: ondragover saw a URL of ''
 
diff --git a/third_party/blink/web_tests/images/12-55-expected.txt b/third_party/blink/web_tests/images/12-55-expected.txt
index 44bfcdc..f3c502a8 100644
--- a/third_party/blink/web_tests/images/12-55-expected.txt
+++ b/third_party/blink/web_tests/images/12-55-expected.txt
@@ -13,5 +13,3 @@
        
 
        
-
-
diff --git a/third_party/blink/web_tests/images/182-expected.txt b/third_party/blink/web_tests/images/182-expected.txt
index 44bfcdc..f3c502a8 100644
--- a/third_party/blink/web_tests/images/182-expected.txt
+++ b/third_party/blink/web_tests/images/182-expected.txt
@@ -13,5 +13,3 @@
        
 
        
-
-
diff --git a/third_party/blink/web_tests/images/2-dht-expected.txt b/third_party/blink/web_tests/images/2-dht-expected.txt
index 44bfcdc..f3c502a8 100644
--- a/third_party/blink/web_tests/images/2-dht-expected.txt
+++ b/third_party/blink/web_tests/images/2-dht-expected.txt
@@ -13,5 +13,3 @@
        
 
        
-
-
diff --git a/third_party/blink/web_tests/images/23-55-expected.txt b/third_party/blink/web_tests/images/23-55-expected.txt
index 44bfcdc..f3c502a8 100644
--- a/third_party/blink/web_tests/images/23-55-expected.txt
+++ b/third_party/blink/web_tests/images/23-55-expected.txt
@@ -13,5 +13,3 @@
        
 
        
-
-
diff --git a/third_party/blink/web_tests/images/55-expected.txt b/third_party/blink/web_tests/images/55-expected.txt
index 44bfcdc..f3c502a8 100644
--- a/third_party/blink/web_tests/images/55-expected.txt
+++ b/third_party/blink/web_tests/images/55-expected.txt
@@ -13,5 +13,3 @@
        
 
        
-
-
diff --git a/third_party/blink/web_tests/images/color-profile-background-image-cross-fade-expected.txt b/third_party/blink/web_tests/images/color-profile-background-image-cross-fade-expected.txt
index 8b13789..b57075e 100644
--- a/third_party/blink/web_tests/images/color-profile-background-image-cross-fade-expected.txt
+++ b/third_party/blink/web_tests/images/color-profile-background-image-cross-fade-expected.txt
@@ -1 +1,5 @@
+ 
 
+ 
+
+ 
diff --git a/third_party/blink/web_tests/images/color-profile-background-image-cross-fade-png-expected.txt b/third_party/blink/web_tests/images/color-profile-background-image-cross-fade-png-expected.txt
index 8b13789..b57075e 100644
--- a/third_party/blink/web_tests/images/color-profile-background-image-cross-fade-png-expected.txt
+++ b/third_party/blink/web_tests/images/color-profile-background-image-cross-fade-png-expected.txt
@@ -1 +1,5 @@
+ 
 
+ 
+
+ 
diff --git a/third_party/blink/web_tests/images/color-profile-image-filter-all-expected.txt b/third_party/blink/web_tests/images/color-profile-image-filter-all-expected.txt
index 23868622..ee73701 100644
--- a/third_party/blink/web_tests/images/color-profile-image-filter-all-expected.txt
+++ b/third_party/blink/web_tests/images/color-profile-image-filter-all-expected.txt
@@ -27,5 +27,3 @@
  
 
 BLUR+HUE
-
-
diff --git a/third_party/blink/web_tests/images/color-profile-image-pseudo-content-expected.txt b/third_party/blink/web_tests/images/color-profile-image-pseudo-content-expected.txt
index 5467dc4..a0a2ef28 100644
--- a/third_party/blink/web_tests/images/color-profile-image-pseudo-content-expected.txt
+++ b/third_party/blink/web_tests/images/color-profile-image-pseudo-content-expected.txt
@@ -1 +1 @@
-pseudo-content image replacement
+ pseudo-content image replacement
diff --git a/third_party/blink/web_tests/images/extra-image-in-image-document-expected.txt b/third_party/blink/web_tests/images/extra-image-in-image-document-expected.txt
index ab3c5d46..89cfbe0 100644
--- a/third_party/blink/web_tests/images/extra-image-in-image-document-expected.txt
+++ b/third_party/blink/web_tests/images/extra-image-in-image-document-expected.txt
@@ -1,5 +1,3 @@
 Test for bug 38752: Images cannot be dynamically added to image documents.
 
 PASS
-
-
diff --git a/third_party/blink/web_tests/images/image-empty-data-expected.txt b/third_party/blink/web_tests/images/image-empty-data-expected.txt
index d4cfc983..96077e4 100644
--- a/third_party/blink/web_tests/images/image-empty-data-expected.txt
+++ b/third_party/blink/web_tests/images/image-empty-data-expected.txt
@@ -1,3 +1 @@
 This is test for an image with no data. No crash means test PASS.
-
-
diff --git a/third_party/blink/web_tests/images/image-invalid-data-expected.txt b/third_party/blink/web_tests/images/image-invalid-data-expected.txt
index a4e24cc..44a1273c 100644
--- a/third_party/blink/web_tests/images/image-invalid-data-expected.txt
+++ b/third_party/blink/web_tests/images/image-invalid-data-expected.txt
@@ -1,3 +1 @@
 This is test for an image with invalid data. No crash means test PASS.
-
-
diff --git a/third_party/blink/web_tests/images/imagemap-nested-area-expected.txt b/third_party/blink/web_tests/images/imagemap-nested-area-expected.txt
index b3fede8..9c4f8e5 100644
--- a/third_party/blink/web_tests/images/imagemap-nested-area-expected.txt
+++ b/third_party/blink/web_tests/images/imagemap-nested-area-expected.txt
@@ -1,3 +1,2 @@
 This tests that pressing Tab focuses areas in an image map even if they're not direct children.
 Test Passed
-
diff --git a/third_party/blink/web_tests/images/jpeg-with-color-profile-expected.txt b/third_party/blink/web_tests/images/jpeg-with-color-profile-expected.txt
index f68e93a..9766b516 100644
--- a/third_party/blink/web_tests/images/jpeg-with-color-profile-expected.txt
+++ b/third_party/blink/web_tests/images/jpeg-with-color-profile-expected.txt
@@ -1,3 +1 @@
 The red sector of the image should be at the 12 o'clock position.
-
-
diff --git a/third_party/blink/web_tests/images/percent-height-image-expected.txt b/third_party/blink/web_tests/images/percent-height-image-expected.txt
index d9eb64a8..3b3b411 100644
--- a/third_party/blink/web_tests/images/percent-height-image-expected.txt
+++ b/third_party/blink/web_tests/images/percent-height-image-expected.txt
@@ -1,4 +1,3 @@
 Tests that an image with height 100% inside a floated div keeps its intrinsic height.
 See Bug: http://bugs.webkit.org/show_bug.cgi?id=45439
-
 PASS
diff --git a/third_party/blink/web_tests/images/png-with-color-profile-expected.txt b/third_party/blink/web_tests/images/png-with-color-profile-expected.txt
index f68e93a..9766b516 100644
--- a/third_party/blink/web_tests/images/png-with-color-profile-expected.txt
+++ b/third_party/blink/web_tests/images/png-with-color-profile-expected.txt
@@ -1,3 +1 @@
 The red sector of the image should be at the 12 o'clock position.
-
-
diff --git a/third_party/blink/web_tests/images/text-content-crash-2-expected.txt b/third_party/blink/web_tests/images/text-content-crash-2-expected.txt
index 1f78b80..9de1307 100644
--- a/third_party/blink/web_tests/images/text-content-crash-2-expected.txt
+++ b/third_party/blink/web_tests/images/text-content-crash-2-expected.txt
@@ -1,5 +1,3 @@
 Test for http://bugs.webkit.org/show_bug.cgi?id=15008 ASSERTION FAILED: !firstLineBox() == !lastLineBox() setting content on image.
 
 No crash means SUCCESS.
-
-
diff --git a/third_party/blink/web_tests/images/text-content-crash-expected.txt b/third_party/blink/web_tests/images/text-content-crash-expected.txt
index fc1d025..4c2850f 100644
--- a/third_party/blink/web_tests/images/text-content-crash-expected.txt
+++ b/third_party/blink/web_tests/images/text-content-crash-expected.txt
@@ -1,5 +1,3 @@
 Test for http://bugs.webkit.org/show_bug.cgi?id=13242 REGRESSION: Repro crash when specifying the content property for an image.
 
 No crash means SUCCESS.
-
-
diff --git a/third_party/blink/web_tests/images/viewport-in-standalone-image-document-expected.txt b/third_party/blink/web_tests/images/viewport-in-standalone-image-document-expected.txt
index 27359f57..797049a 100644
--- a/third_party/blink/web_tests/images/viewport-in-standalone-image-document-expected.txt
+++ b/third_party/blink/web_tests/images/viewport-in-standalone-image-document-expected.txt
@@ -1,5 +1,3 @@
 This tests that a standalone image document has viewport settings.
 
-
-
 PASS
diff --git a/third_party/blink/web_tests/images/zoomed-img-size-expected.txt b/third_party/blink/web_tests/images/zoomed-img-size-expected.txt
index 9314807..872e920 100644
--- a/third_party/blink/web_tests/images/zoomed-img-size-expected.txt
+++ b/third_party/blink/web_tests/images/zoomed-img-size-expected.txt
@@ -1,61 +1,31 @@
 Ideally, all ovals below should be reported as having width=37, height=33. Currently rounding prevents us from doing this.
 
-
-
 Zoom 1% PASS: 100x100 close enough to 37x33
 
-
-
 Zoom 2% PASS: 50x50 close enough to 37x33
 
-
-
 Zoom 3% PASS: 33x33 close enough to 37x33
 
-
-
 Zoom 4% PASS: 25x25 close enough to 37x33
 
-
-
 Zoom 5% PASS: 40x40 close enough to 37x33
 
-
-
 Zoom 30% PASS: 36x33 close enough to 37x33
 
-
-
 Zoom 33% PASS: 36x33 close enough to 37x33
 
-
-
 Zoom 50% PASS: 38x34 close enough to 37x33
 
-
-
 Zoom 70% PASS: 37x32 close enough to 37x33
 
-
-
 Zoom 100% PASS: 37x33
 
-
-
 Zoom 111% PASS: 37x33
 
-
-
 Zoom 150% PASS: 37x33
 
-
-
 Zoom 333% PASS: 37x33
 
-
-
 Zoom 400% PASS: 37x33
 
-
-
 Zoom 1234% PASS: 37x33
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_canplay-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_canplay-expected.txt
index c630e88..5e6fde0 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_canplay-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_canplay-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_canplay_manual-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_canplay_manual-expected.txt
index 08720a7..9a159c4d 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_canplay_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_canplay_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_canplaythrough-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_canplaythrough-expected.txt
index 8bdc759..cac961ab 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_canplaythrough-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_canplaythrough-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_canplaythrough_manual-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_canplaythrough_manual-expected.txt
index 9cdaaa8..24a8ab4 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_canplaythrough_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_canplaythrough_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_loadeddata-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_loadeddata-expected.txt
index 09d5774..1a24cbb 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_loadeddata-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_loadeddata-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_loadeddata_manual-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_loadeddata_manual-expected.txt
index df5b362..102dc02 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_loadeddata_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_loadeddata_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_loadedmetadata-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_loadedmetadata-expected.txt
index b44003b..114c8ec 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_loadedmetadata-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_loadedmetadata-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_loadedmetadata_manual-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_loadedmetadata_manual-expected.txt
index 652504b..004d77d 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_loadedmetadata_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_loadedmetadata_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_loadstart-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_loadstart-expected.txt
index 9f6633e..ac4658bc 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_loadstart-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_loadstart-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_loadstart_manual-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_loadstart_manual-expected.txt
index d3f3db2f..f98b9e3b 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_loadstart_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_loadstart_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_order_canplay_canplaythrough-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_order_canplay_canplaythrough-expected.txt
index f8ed66be..b3d596c2 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_order_canplay_canplaythrough-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_order_canplay_canplaythrough-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_order_canplay_playing-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_order_canplay_playing-expected.txt
index afe9608..26450c7 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_order_canplay_playing-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_order_canplay_playing-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_order_loadedmetadata_loadeddata-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_order_loadedmetadata_loadeddata-expected.txt
index 49989609..465e9aa5 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_order_loadedmetadata_loadeddata-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_order_loadedmetadata_loadeddata-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_order_loadstart_progress-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_order_loadstart_progress-expected.txt
index db5ec733..708552a 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_order_loadstart_progress-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_order_loadstart_progress-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_pause_manual-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_pause_manual-expected.txt
index 11d025b..d0d06558 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_pause_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_pause_manual-expected.txt
@@ -10,5 +10,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_play-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_play-expected.txt
index 0a4bbb4b..ea471f8 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_play-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_play-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_play_manual-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_play_manual-expected.txt
index 2973e2b..02ef9a5 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_play_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_play_manual-expected.txt
@@ -10,5 +10,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_playing-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_playing-expected.txt
index 2cf51c4e..a4021332 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_playing-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_playing-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_playing_manual-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_playing_manual-expected.txt
index 9004dde..e931338 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_playing_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_playing_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_progress-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_progress-expected.txt
index ba8eb91..79e6d69 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_progress-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_progress-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_progress_manual-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_progress_manual-expected.txt
index 1cfce079..690a093 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_progress_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_progress_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_timeupdate-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_timeupdate-expected.txt
index cd9b4538..8257ee3 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_timeupdate-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_timeupdate-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/events/event_timeupdate_manual-expected.txt b/third_party/blink/web_tests/media/W3C/audio/events/event_timeupdate_manual-expected.txt
index 6ebd1b0..e0e7b28 100644
--- a/third_party/blink/web_tests/media/W3C/audio/events/event_timeupdate_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/events/event_timeupdate_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/networkState/networkState_during_loadstart-expected.txt b/third_party/blink/web_tests/media/W3C/audio/networkState/networkState_during_loadstart-expected.txt
index af7e9ac..ee38b43 100644
--- a/third_party/blink/web_tests/media/W3C/audio/networkState/networkState_during_loadstart-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/networkState/networkState_during_loadstart-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/paused/paused_false_during_play-expected.txt b/third_party/blink/web_tests/media/W3C/audio/paused/paused_false_during_play-expected.txt
index eb205aa..e7288c2 100644
--- a/third_party/blink/web_tests/media/W3C/audio/paused/paused_false_during_play-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/paused/paused_false_during_play-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/paused/paused_true_during_pause-expected.txt b/third_party/blink/web_tests/media/W3C/audio/paused/paused_true_during_pause-expected.txt
index 96c098f..e52c8cb 100644
--- a/third_party/blink/web_tests/media/W3C/audio/paused/paused_true_during_pause-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/paused/paused_true_during_pause-expected.txt
@@ -10,5 +10,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_canplay-expected.txt b/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_canplay-expected.txt
index 7938885..b396331 100644
--- a/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_canplay-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_canplay-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_canplaythrough-expected.txt b/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_canplaythrough-expected.txt
index 294072b..2357f59 100644
--- a/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_canplaythrough-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_canplaythrough-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_loadeddata-expected.txt b/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_loadeddata-expected.txt
index 113d826a..3b98ef2 100644
--- a/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_loadeddata-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_loadeddata-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_loadedmetadata-expected.txt b/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_loadedmetadata-expected.txt
index 79cb975..dd16c3f 100644
--- a/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_loadedmetadata-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_loadedmetadata-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_playing-expected.txt b/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_playing-expected.txt
index 52a148d9..210bfa0 100644
--- a/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_playing-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/audio/readyState/readyState_during_playing-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/currentSrc/currentSrc_empty_if_no_src-expected.txt b/third_party/blink/web_tests/media/W3C/video/currentSrc/currentSrc_empty_if_no_src-expected.txt
index 68a120f8..15fa14a 100644
--- a/third_party/blink/web_tests/media/W3C/video/currentSrc/currentSrc_empty_if_no_src-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/currentSrc/currentSrc_empty_if_no_src-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/currentSrc/currentSrc_nonempty_after_adding_source_child-expected.txt b/third_party/blink/web_tests/media/W3C/video/currentSrc/currentSrc_nonempty_after_adding_source_child-expected.txt
index 24652d9..2723776 100644
--- a/third_party/blink/web_tests/media/W3C/video/currentSrc/currentSrc_nonempty_after_adding_source_child-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/currentSrc/currentSrc_nonempty_after_adding_source_child-expected.txt
@@ -10,5 +10,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/currentSrc/currentSrc_property_exists-expected.txt b/third_party/blink/web_tests/media/W3C/video/currentSrc/currentSrc_property_exists-expected.txt
index fba4ea5f..aabc979 100644
--- a/third_party/blink/web_tests/media/W3C/video/currentSrc/currentSrc_property_exists-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/currentSrc/currentSrc_property_exists-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/error/error_null-expected.txt b/third_party/blink/web_tests/media/W3C/video/error/error_null-expected.txt
index 25e39adaf..cc1125e8 100644
--- a/third_party/blink/web_tests/media/W3C/video/error/error_null-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/error/error_null-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/error/error_onerror_called_on_bogus_source-expected.txt b/third_party/blink/web_tests/media/W3C/video/error/error_onerror_called_on_bogus_source-expected.txt
index 0ddf265..af769cc 100644
--- a/third_party/blink/web_tests/media/W3C/video/error/error_onerror_called_on_bogus_source-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/error/error_onerror_called_on_bogus_source-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/error/error_property_exists-expected.txt b/third_party/blink/web_tests/media/W3C/video/error/error_property_exists-expected.txt
index 151d6b5..55cf1ff 100644
--- a/third_party/blink/web_tests/media/W3C/video/error/error_property_exists-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/error/error_property_exists-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_canplay-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_canplay-expected.txt
index c630e88..5e6fde0 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_canplay-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_canplay-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_canplay_manual-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_canplay_manual-expected.txt
index 08720a7..9a159c4d 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_canplay_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_canplay_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_canplaythrough-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_canplaythrough-expected.txt
index 8bdc759..cac961ab 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_canplaythrough-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_canplaythrough-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_canplaythrough_manual-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_canplaythrough_manual-expected.txt
index 9cdaaa8..24a8ab4 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_canplaythrough_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_canplaythrough_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_loadeddata-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_loadeddata-expected.txt
index 09d5774..1a24cbb 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_loadeddata-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_loadeddata-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_loadeddata_manual-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_loadeddata_manual-expected.txt
index df5b362..102dc02 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_loadeddata_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_loadeddata_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_loadedmetadata-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_loadedmetadata-expected.txt
index b44003b..114c8ec 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_loadedmetadata-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_loadedmetadata-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_loadedmetadata_manual-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_loadedmetadata_manual-expected.txt
index 652504b..004d77d 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_loadedmetadata_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_loadedmetadata_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_loadstart-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_loadstart-expected.txt
index 9f6633e..ac4658bc 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_loadstart-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_loadstart-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_loadstart_manual-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_loadstart_manual-expected.txt
index d3f3db2f..f98b9e3b 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_loadstart_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_loadstart_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_order_canplay_canplaythrough-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_order_canplay_canplaythrough-expected.txt
index f8ed66be..b3d596c2 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_order_canplay_canplaythrough-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_order_canplay_canplaythrough-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_order_canplay_playing-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_order_canplay_playing-expected.txt
index afe9608..26450c7 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_order_canplay_playing-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_order_canplay_playing-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_order_loadedmetadata_loadeddata-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_order_loadedmetadata_loadeddata-expected.txt
index 49989609..465e9aa5 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_order_loadedmetadata_loadeddata-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_order_loadedmetadata_loadeddata-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_order_loadstart_progress-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_order_loadstart_progress-expected.txt
index db5ec733..708552a 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_order_loadstart_progress-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_order_loadstart_progress-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_pause_manual-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_pause_manual-expected.txt
index 11d025b..d0d06558 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_pause_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_pause_manual-expected.txt
@@ -10,5 +10,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_play-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_play-expected.txt
index 0a4bbb4b..ea471f8 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_play-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_play-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_play_manual-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_play_manual-expected.txt
index 2973e2b..02ef9a5 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_play_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_play_manual-expected.txt
@@ -10,5 +10,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_playing-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_playing-expected.txt
index 2cf51c4e..a4021332 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_playing-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_playing-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_playing_manual-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_playing_manual-expected.txt
index 9004dde..e931338 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_playing_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_playing_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_progress-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_progress-expected.txt
index ba8eb91..79e6d69 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_progress-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_progress-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_progress_manual-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_progress_manual-expected.txt
index 1cfce079..690a093 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_progress_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_progress_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_timeupdate-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_timeupdate-expected.txt
index cd9b4538..8257ee3 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_timeupdate-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_timeupdate-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/events/event_timeupdate_manual-expected.txt b/third_party/blink/web_tests/media/W3C/video/events/event_timeupdate_manual-expected.txt
index 6ebd1b0..e0e7b28 100644
--- a/third_party/blink/web_tests/media/W3C/video/events/event_timeupdate_manual-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/events/event_timeupdate_manual-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/networkState/networkState_during_loadstart-expected.txt b/third_party/blink/web_tests/media/W3C/video/networkState/networkState_during_loadstart-expected.txt
index 2d5f9f9..21b1a84 100644
--- a/third_party/blink/web_tests/media/W3C/video/networkState/networkState_during_loadstart-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/networkState/networkState_during_loadstart-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/networkState/networkState_initial-expected.txt b/third_party/blink/web_tests/media/W3C/video/networkState/networkState_initial-expected.txt
index 4d480df..1c86bf7 100644
--- a/third_party/blink/web_tests/media/W3C/video/networkState/networkState_initial-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/networkState/networkState_initial-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/networkState/networkState_property_exists-expected.txt b/third_party/blink/web_tests/media/W3C/video/networkState/networkState_property_exists-expected.txt
index b431e1e..586a8b44 100644
--- a/third_party/blink/web_tests/media/W3C/video/networkState/networkState_property_exists-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/networkState/networkState_property_exists-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/paused/paused_false_during_play-expected.txt b/third_party/blink/web_tests/media/W3C/video/paused/paused_false_during_play-expected.txt
index 30d5dc89..2f42a05 100644
--- a/third_party/blink/web_tests/media/W3C/video/paused/paused_false_during_play-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/paused/paused_false_during_play-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/paused/paused_true_during_pause-expected.txt b/third_party/blink/web_tests/media/W3C/video/paused/paused_true_during_pause-expected.txt
index b7b22ba..d82edd2 100644
--- a/third_party/blink/web_tests/media/W3C/video/paused/paused_true_during_pause-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/paused/paused_true_during_pause-expected.txt
@@ -10,5 +10,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/preload/preload_property_exists-expected.txt b/third_party/blink/web_tests/media/W3C/video/preload/preload_property_exists-expected.txt
index 8293baf..20bf8d21 100644
--- a/third_party/blink/web_tests/media/W3C/video/preload/preload_property_exists-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/preload/preload_property_exists-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_auto_value-expected.txt b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_auto_value-expected.txt
index fa541b4..5ebd452 100644
--- a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_auto_value-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_auto_value-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_bogus_value-expected.txt b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_bogus_value-expected.txt
index 8509689..0cb5b25 100644
--- a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_bogus_value-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_bogus_value-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_empty-expected.txt b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_empty-expected.txt
index fa541b4..5ebd452 100644
--- a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_empty-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_empty-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_metadata-expected.txt b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_metadata-expected.txt
index 8509689..0cb5b25 100644
--- a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_metadata-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_metadata-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_no_value-expected.txt b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_no_value-expected.txt
index 8509689..0cb5b25 100644
--- a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_no_value-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_no_value-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_none-expected.txt b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_none-expected.txt
index 4609eda1..0570dfa 100644
--- a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_none-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_none-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_none_autoplay-expected.txt b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_none_autoplay-expected.txt
index 4609eda1..0570dfa 100644
--- a/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_none_autoplay-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/preload/preload_reflects_none_autoplay-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_canplay-expected.txt b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_canplay-expected.txt
index 27d4a42..e2fa4c5 100644
--- a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_canplay-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_canplay-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_canplaythrough-expected.txt b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_canplaythrough-expected.txt
index e94ad7ad..948bf98 100644
--- a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_canplaythrough-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_canplaythrough-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_loadeddata-expected.txt b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_loadeddata-expected.txt
index 6b3626c3..3c10903 100644
--- a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_loadeddata-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_loadeddata-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_loadedmetadata-expected.txt b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_loadedmetadata-expected.txt
index 50359663..202c0a41 100644
--- a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_loadedmetadata-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_loadedmetadata-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_playing-expected.txt b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_playing-expected.txt
index 3331b93..d70c1f29 100644
--- a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_playing-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_during_playing-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_initial-expected.txt b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_initial-expected.txt
index 040a7c9..b9f65069 100644
--- a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_initial-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_initial-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_property_exists-expected.txt b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_property_exists-expected.txt
index 2cea77d..c1d4a16 100644
--- a/third_party/blink/web_tests/media/W3C/video/readyState/readyState_property_exists-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/readyState/readyState_property_exists-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/src/src_reflects_attribute_not_source_elements-expected.txt b/third_party/blink/web_tests/media/W3C/video/src/src_reflects_attribute_not_source_elements-expected.txt
index c30a2511..1ce3015 100644
--- a/third_party/blink/web_tests/media/W3C/video/src/src_reflects_attribute_not_source_elements-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/src/src_reflects_attribute_not_source_elements-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/src/src_reflects_no_value-expected.txt b/third_party/blink/web_tests/media/W3C/video/src/src_reflects_no_value-expected.txt
index 7b150af..123ee9a 100644
--- a/third_party/blink/web_tests/media/W3C/video/src/src_reflects_no_value-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/src/src_reflects_no_value-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/W3C/video/src/src_removal_does_not_trigger_loadstart-expected.txt b/third_party/blink/web_tests/media/W3C/video/src/src_removal_does_not_trigger_loadstart-expected.txt
index b2d83df3..30c28eb 100644
--- a/third_party/blink/web_tests/media/W3C/video/src/src_removal_does_not_trigger_loadstart-expected.txt
+++ b/third_party/blink/web_tests/media/W3C/video/src/src_removal_does_not_trigger_loadstart-expected.txt
@@ -9,5 +9,3 @@
 
 
 spec reference
-
-
diff --git a/third_party/blink/web_tests/media/fallback-expected.txt b/third_party/blink/web_tests/media/fallback-expected.txt
index a9136f0..9d8b3f4 100644
--- a/third_party/blink/web_tests/media/fallback-expected.txt
+++ b/third_party/blink/web_tests/media/fallback-expected.txt
@@ -1,3 +1 @@
 Test that fallback content is not rendered
-
-
diff --git a/third_party/blink/web_tests/media/media-document-audio-size-expected.txt b/third_party/blink/web_tests/media/media-document-audio-size-expected.txt
index 089b79d..cb02db2 100644
--- a/third_party/blink/web_tests/media/media-document-audio-size-expected.txt
+++ b/third_party/blink/web_tests/media/media-document-audio-size-expected.txt
@@ -2,4 +2,3 @@
 
 PASS
 
-
diff --git a/third_party/blink/web_tests/media/svg-as-image-with-media-blocked-expected.txt b/third_party/blink/web_tests/media/svg-as-image-with-media-blocked-expected.txt
index 9dc279c..df1c1b6a 100644
--- a/third_party/blink/web_tests/media/svg-as-image-with-media-blocked-expected.txt
+++ b/third_party/blink/web_tests/media/svg-as-image-with-media-blocked-expected.txt
@@ -1,3 +1 @@
 This test attempts to load foreignObject audio and video embedded in an SVG file loaded as the src attribute of an img element. If successful, none of these files will load and a green rectangle will be visible below this text. If unsuccessful, the browser will crash while attempting to load the media.
-
-
diff --git a/third_party/blink/web_tests/media/track/media-element-move-to-new-document-assert-expected.txt b/third_party/blink/web_tests/media/track/media-element-move-to-new-document-assert-expected.txt
index b98b997..55232518 100644
--- a/third_party/blink/web_tests/media/track/media-element-move-to-new-document-assert-expected.txt
+++ b/third_party/blink/web_tests/media/track/media-element-move-to-new-document-assert-expected.txt
@@ -1,3 +1 @@
 Test for failing EventDispatchForbiddenScope assert when moving a video with text track between documents.
-
-
diff --git a/third_party/blink/web_tests/media/video-plays-past-end-of-test-expected.txt b/third_party/blink/web_tests/media/video-plays-past-end-of-test-expected.txt
index 5616def..c4d9535 100644
--- a/third_party/blink/web_tests/media/video-plays-past-end-of-test-expected.txt
+++ b/third_party/blink/web_tests/media/video-plays-past-end-of-test-expected.txt
@@ -1,3 +1 @@
 This test intentionally lets the video keep playing past end of test to ensure that shutdown is clean, since DumpRenderTree used to crash in this case.
-
-
diff --git a/third_party/blink/web_tests/netinfo/multiple-frames-expected.txt b/third_party/blink/web_tests/netinfo/multiple-frames-expected.txt
index a91b1e1..50d008be 100644
--- a/third_party/blink/web_tests/netinfo/multiple-frames-expected.txt
+++ b/third_party/blink/web_tests/netinfo/multiple-frames-expected.txt
@@ -6,4 +6,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.txt b/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.txt
index 2731d3d4..5eb3dd67 100644
--- a/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-no-fixed-intrinsic-size-expected.txt
@@ -1,3 +1 @@
 Images should redraw correctly when SVG animation runs
-
-
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/zoom-foreignObject-expected.txt b/third_party/blink/web_tests/paint/invalidation/svg/zoom-foreignObject-expected.txt
index b30c1ef..3facce36 100644
--- a/third_party/blink/web_tests/paint/invalidation/svg/zoom-foreignObject-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/svg/zoom-foreignObject-expected.txt
@@ -5,4 +5,3 @@
 This is a text
 and a link.
 [SVG]
-
diff --git a/third_party/blink/web_tests/paint/invalidation/unavailable-plugin-crash-expected.txt b/third_party/blink/web_tests/paint/invalidation/unavailable-plugin-crash-expected.txt
index 741672c..9de39ce 100644
--- a/third_party/blink/web_tests/paint/invalidation/unavailable-plugin-crash-expected.txt
+++ b/third_party/blink/web_tests/paint/invalidation/unavailable-plugin-crash-expected.txt
@@ -1,2 +1 @@
 Tests invalidation of unavailable plugin. Passes if no crash.
-
diff --git a/third_party/blink/web_tests/permissionclient/image-permissions-expected.txt b/third_party/blink/web_tests/permissionclient/image-permissions-expected.txt
index 2a85b4f7..21f52b5 100644
--- a/third_party/blink/web_tests/permissionclient/image-permissions-expected.txt
+++ b/third_party/blink/web_tests/permissionclient/image-permissions-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/platform/linux/accessibility/css-generated-content-expected.txt b/third_party/blink/web_tests/platform/linux/accessibility/css-generated-content-expected.txt
index 13aa988..f691336 100644
--- a/third_party/blink/web_tests/platform/linux/accessibility/css-generated-content-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/accessibility/css-generated-content-expected.txt
@@ -10,4 +10,4 @@
 TEST COMPLETE
 
 
-six seven eight nine ten
+six seven eight nine ten 
diff --git a/third_party/blink/web_tests/platform/linux/cssom/ahem-ex-units-expected.txt b/third_party/blink/web_tests/platform/linux/cssom/ahem-ex-units-expected.txt
index 14fe67a..8707395 100644
--- a/third_party/blink/web_tests/platform/linux/cssom/ahem-ex-units-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/cssom/ahem-ex-units-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/platform/linux/editing/pasteboard/smart-paste-in-text-control-expected.txt b/third_party/blink/web_tests/platform/linux/editing/pasteboard/smart-paste-in-text-control-expected.txt
index dbde6609..4e22c01 100644
--- a/third_party/blink/web_tests/platform/linux/editing/pasteboard/smart-paste-in-text-control-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/editing/pasteboard/smart-paste-in-text-control-expected.txt
@@ -1,3 +1,2 @@
 This tests smart pasting in a text control. To manually test, double click the middle word in the text area below. Then cut and paste. It should result in the original text. The space before the middle word should not be lost.
-
 FAIL: Smart cutting and pasting do not result in the original text.
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-preserve-value-after-history-back-expected.txt b/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-preserve-value-after-history-back-expected.txt
index d0d878e..605cf6b 100644
--- a/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-preserve-value-after-history-back-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-preserve-value-after-history-back-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/platform/linux/svg/custom/svg-fonts-in-text-controls-expected.txt b/third_party/blink/web_tests/platform/linux/svg/custom/svg-fonts-in-text-controls-expected.txt
index 24dd30c..47770ba 100644
--- a/third_party/blink/web_tests/platform/linux/svg/custom/svg-fonts-in-text-controls-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/svg/custom/svg-fonts-in-text-controls-expected.txt
@@ -8,4 +8,3 @@
 
 Textarea offsetWidth: 137
 Input offsetWidth: 138
-
diff --git a/third_party/blink/web_tests/platform/linux/svg/text/caret-in-svg-text-expected.txt b/third_party/blink/web_tests/platform/linux/svg/text/caret-in-svg-text-expected.txt
index 87b0878..e89c199 100644
--- a/third_party/blink/web_tests/platform/linux/svg/text/caret-in-svg-text-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/svg/text/caret-in-svg-text-expected.txt
@@ -1,7 +1,6 @@
 Sheriff Woody
 שדגש
 
-
 Failure. Was: 20,15,0,19, expected: 20,566,0,18
 Failure. Was: 113,15,0,19, expected: 114,566,0,18
 Failure. Was: 20,35,0,19, expected: 58,546,0,18
diff --git a/third_party/blink/web_tests/platform/linux/svg/zoom/page/zoom-zoom-coords-expected.txt b/third_party/blink/web_tests/platform/linux/svg/zoom/page/zoom-zoom-coords-expected.txt
index 77a554d..e40d8d1 100644
--- a/third_party/blink/web_tests/platform/linux/svg/zoom/page/zoom-zoom-coords-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/svg/zoom/page/zoom-zoom-coords-expected.txt
@@ -2,7 +2,6 @@
 Test
 Test
 
-
 This test checks getBoundingClientRect() on zoomed HTML and SVG elements
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/platform/linux/virtual/pointerevent/fast/events/hit-test-clip-path-reference-expected.txt b/third_party/blink/web_tests/platform/linux/virtual/pointerevent/fast/events/hit-test-clip-path-reference-expected.txt
index 9ebfffa..d38e48e 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/pointerevent/fast/events/hit-test-clip-path-reference-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/virtual/pointerevent/fast/events/hit-test-clip-path-reference-expected.txt
@@ -15,4 +15,3 @@
 PASS path does not contain point at (66, 214)
 PASS path does not contain point at (68, 216)
 
-
diff --git a/third_party/blink/web_tests/platform/linux/virtual/trustedeventsdefaultaction/fast/events/hit-test-clip-path-reference-expected.txt b/third_party/blink/web_tests/platform/linux/virtual/trustedeventsdefaultaction/fast/events/hit-test-clip-path-reference-expected.txt
index 9ebfffa..d38e48e 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/trustedeventsdefaultaction/fast/events/hit-test-clip-path-reference-expected.txt
+++ b/third_party/blink/web_tests/platform/linux/virtual/trustedeventsdefaultaction/fast/events/hit-test-clip-path-reference-expected.txt
@@ -15,4 +15,3 @@
 PASS path does not contain point at (66, 214)
 PASS path does not contain point at (68, 216)
 
-
diff --git a/third_party/blink/web_tests/platform/mac/fast/events/hit-test-clip-path-reference-expected.txt b/third_party/blink/web_tests/platform/mac/fast/events/hit-test-clip-path-reference-expected.txt
index 3cf28e7..4e4549a 100644
--- a/third_party/blink/web_tests/platform/mac/fast/events/hit-test-clip-path-reference-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/fast/events/hit-test-clip-path-reference-expected.txt
@@ -15,4 +15,3 @@
 PASS path does not contain point at (66, 205)
 PASS path does not contain point at (68, 207)
 
-
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/autofilled-expected.txt b/third_party/blink/web_tests/platform/mac/fast/forms/autofilled-expected.txt
index 4a75164..654a2e2 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/autofilled-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/autofilled-expected.txt
@@ -1,7 +1,8 @@
 This tests that foreground and background colors properly change for autofilled inputs or select options. It can only be run using the test harness.
 
-   
+     
 3
+ 
 1
 2
 3
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color/input-color-choose-default-value-after-set-value-expected.txt b/third_party/blink/web_tests/platform/mac/fast/forms/color/input-color-choose-default-value-after-set-value-expected.txt
index 20315bb..c66119e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/color/input-color-choose-default-value-after-set-value-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color/input-color-choose-default-value-after-set-value-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/cursor-at-editable-content-boundary-expected.txt b/third_party/blink/web_tests/platform/mac/fast/forms/cursor-at-editable-content-boundary-expected.txt
index 0045910..3a45de5e 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/cursor-at-editable-content-boundary-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/cursor-at-editable-content-boundary-expected.txt
@@ -1,8 +1,8 @@
-autowrap text area with dir=rtl.
+autowrap text area with dir=rtl. 
 
-nowrap text area with dir=rtl.
+nowrap text area with dir=rtl. 
 
-autowrap text area with dir=ltr.
+autowrap text area with dir=ltr. 
 
 vertical text.
 
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-preserve-value-after-history-back-expected.txt b/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-preserve-value-after-history-back-expected.txt
index d0d878e..605cf6b 100644
--- a/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-preserve-value-after-history-back-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-preserve-value-after-history-back-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/platform/mac/svg/custom/svg-fonts-in-text-controls-expected.txt b/third_party/blink/web_tests/platform/mac/svg/custom/svg-fonts-in-text-controls-expected.txt
index 3fbee66..4f1b9fe 100644
--- a/third_party/blink/web_tests/platform/mac/svg/custom/svg-fonts-in-text-controls-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/svg/custom/svg-fonts-in-text-controls-expected.txt
@@ -8,4 +8,3 @@
 
 Textarea offsetWidth: 137
 Input offsetWidth: 128
-
diff --git a/third_party/blink/web_tests/platform/mac/svg/text/caret-in-svg-text-expected.txt b/third_party/blink/web_tests/platform/mac/svg/text/caret-in-svg-text-expected.txt
index 613b305..a20f4705 100644
--- a/third_party/blink/web_tests/platform/mac/svg/text/caret-in-svg-text-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/svg/text/caret-in-svg-text-expected.txt
@@ -1,7 +1,6 @@
 Sheriff Woody
 שדגש
 
-
 Failure. Was: 20,16,0,18, expected: 20,566,0,18
 Failure. Was: 114,16,0,18, expected: 114,566,0,18
 Failure. Was: 20,36,0,18, expected: 58,546,0,18
diff --git a/third_party/blink/web_tests/platform/mac/virtual/pointerevent/fast/events/hit-test-clip-path-reference-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/pointerevent/fast/events/hit-test-clip-path-reference-expected.txt
index a27684ee..a4c4334 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/pointerevent/fast/events/hit-test-clip-path-reference-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/virtual/pointerevent/fast/events/hit-test-clip-path-reference-expected.txt
@@ -15,4 +15,3 @@
 PASS path does not contain point at (66, 205)
 PASS path does not contain point at (68, 207)
 
-
diff --git a/third_party/blink/web_tests/platform/mac/virtual/trustedeventsdefaultaction/fast/events/hit-test-clip-path-reference-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/trustedeventsdefaultaction/fast/events/hit-test-clip-path-reference-expected.txt
index a27684ee..a4c4334 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/trustedeventsdefaultaction/fast/events/hit-test-clip-path-reference-expected.txt
+++ b/third_party/blink/web_tests/platform/mac/virtual/trustedeventsdefaultaction/fast/events/hit-test-clip-path-reference-expected.txt
@@ -15,4 +15,3 @@
 PASS path does not contain point at (66, 205)
 PASS path does not contain point at (68, 207)
 
-
diff --git a/third_party/blink/web_tests/platform/win/accessibility/css-generated-content-expected.txt b/third_party/blink/web_tests/platform/win/accessibility/css-generated-content-expected.txt
index 13aa988..f691336 100644
--- a/third_party/blink/web_tests/platform/win/accessibility/css-generated-content-expected.txt
+++ b/third_party/blink/web_tests/platform/win/accessibility/css-generated-content-expected.txt
@@ -10,4 +10,4 @@
 TEST COMPLETE
 
 
-six seven eight nine ten
+six seven eight nine ten 
diff --git a/third_party/blink/web_tests/platform/win/cssom/ahem-ex-units-expected.txt b/third_party/blink/web_tests/platform/win/cssom/ahem-ex-units-expected.txt
index 4293c19a..40eba5da 100644
--- a/third_party/blink/web_tests/platform/win/cssom/ahem-ex-units-expected.txt
+++ b/third_party/blink/web_tests/platform/win/cssom/ahem-ex-units-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/platform/win/editing/pasteboard/smart-paste-in-text-control-expected.txt b/third_party/blink/web_tests/platform/win/editing/pasteboard/smart-paste-in-text-control-expected.txt
index 0d599b9a..60e8703 100644
--- a/third_party/blink/web_tests/platform/win/editing/pasteboard/smart-paste-in-text-control-expected.txt
+++ b/third_party/blink/web_tests/platform/win/editing/pasteboard/smart-paste-in-text-control-expected.txt
@@ -1,3 +1,2 @@
 This tests smart pasting in a text control. To manually test, double click the middle word in the text area below. Then cut and paste. It should result in the original text. The space before the middle word should not be lost.
-
 PASS: Smart cutting and pasting result in the original text.
diff --git a/third_party/blink/web_tests/platform/win/editing/selection/drag-text-delay-expected.txt b/third_party/blink/web_tests/platform/win/editing/selection/drag-text-delay-expected.txt
index beba868..e1fd465 100644
--- a/third_party/blink/web_tests/platform/win/editing/selection/drag-text-delay-expected.txt
+++ b/third_party/blink/web_tests/platform/win/editing/selection/drag-text-delay-expected.txt
@@ -3,4 +3,3 @@
 To manually test, select "hello" and rapidly drag. You should see "hello world" on Mac and "worldhello" on all other platforms.
 
 worldhello
-
diff --git a/third_party/blink/web_tests/platform/win/fast/events/hit-test-clip-path-reference-expected.txt b/third_party/blink/web_tests/platform/win/fast/events/hit-test-clip-path-reference-expected.txt
index d259c5c..5b2f327 100644
--- a/third_party/blink/web_tests/platform/win/fast/events/hit-test-clip-path-reference-expected.txt
+++ b/third_party/blink/web_tests/platform/win/fast/events/hit-test-clip-path-reference-expected.txt
@@ -15,4 +15,3 @@
 PASS path does not contain point at (66, 214)
 PASS path does not contain point at (68, 216)
 
-
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/form-radio-node-list-expected.txt b/third_party/blink/web_tests/platform/win/fast/forms/form-radio-node-list-expected.txt
index 77e593d3..02120dc 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/form-radio-node-list-expected.txt
+++ b/third_party/blink/web_tests/platform/win/fast/forms/form-radio-node-list-expected.txt
@@ -21,6 +21,5 @@
 
 TEST COMPLETE
 
-
-   
-
+    
+ 
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.txt b/third_party/blink/web_tests/platform/win/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.txt
index 24624b9..4582054 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.txt
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select-popup/popup-menu-appearance-minimum-font-expected.txt
@@ -1,7 +1,7 @@
 foo
 bar
 baz
-The font size in the popup content should be 12px, which is the same as this text.
+ The font size in the popup content should be 12px, which is the same as this text.
 
 PASS successfullyParsed is true
 
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select-popup/popup-menu-key-operations-expected.txt b/third_party/blink/web_tests/platform/win/fast/forms/select-popup/popup-menu-key-operations-expected.txt
index 65637548..ac7008f 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select-popup/popup-menu-key-operations-expected.txt
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select-popup/popup-menu-key-operations-expected.txt
@@ -2,6 +2,7 @@
 bar
 baz
 garply
+ 
 abc
 xyz
 ==> Arrow keys + Enter
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select-popup/popup-menu-mouse-operations-expected.txt b/third_party/blink/web_tests/platform/win/fast/forms/select-popup/popup-menu-mouse-operations-expected.txt
index 5b26bdc..7feb772 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select-popup/popup-menu-mouse-operations-expected.txt
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select-popup/popup-menu-mouse-operations-expected.txt
@@ -31,6 +31,7 @@
 foo
 bar
 baz
+ 
 option1
 option2
 option3
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/select/select-popup-pagekeys-expected.txt b/third_party/blink/web_tests/platform/win/fast/forms/select/select-popup-pagekeys-expected.txt
index 625b622..ecde184f 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/select/select-popup-pagekeys-expected.txt
+++ b/third_party/blink/web_tests/platform/win/fast/forms/select/select-popup-pagekeys-expected.txt
@@ -11,6 +11,7 @@
 4
 5
 6
+ 
 0
 1
 2
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/textarea/textarea-metrics-expected.txt b/third_party/blink/web_tests/platform/win/fast/forms/textarea/textarea-metrics-expected.txt
index 7e0d8326..fb29fbf 100644
--- a/third_party/blink/web_tests/platform/win/fast/forms/textarea/textarea-metrics-expected.txt
+++ b/third_party/blink/web_tests/platform/win/fast/forms/textarea/textarea-metrics-expected.txt
@@ -190,4 +190,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/platform/win/fast/hidpi/image-srcset-intrinsic-size-zero-expected.txt b/third_party/blink/web_tests/platform/win/fast/hidpi/image-srcset-intrinsic-size-zero-expected.txt
index 2fbab54..f4dfa82 100644
--- a/third_party/blink/web_tests/platform/win/fast/hidpi/image-srcset-intrinsic-size-zero-expected.txt
+++ b/third_party/blink/web_tests/platform/win/fast/hidpi/image-srcset-intrinsic-size-zero-expected.txt
@@ -4,4 +4,3 @@
 
 PASS imgWidth is 16777216
 This test passes if the image is displayed with infinite dimensions.
-
diff --git a/third_party/blink/web_tests/platform/win/svg/text/caret-in-svg-text-expected.txt b/third_party/blink/web_tests/platform/win/svg/text/caret-in-svg-text-expected.txt
index eb6b8bf..2a190df 100644
--- a/third_party/blink/web_tests/platform/win/svg/text/caret-in-svg-text-expected.txt
+++ b/third_party/blink/web_tests/platform/win/svg/text/caret-in-svg-text-expected.txt
@@ -1,7 +1,6 @@
 Sheriff Woody
 שדגש
 
-
 Failure. Was: 20,15,0,19, expected: 20,566,0,18
 Failure. Was: 108,15,0,19, expected: 114,566,0,18
 Failure. Was: 20,35,0,19, expected: 58,546,0,18
diff --git a/third_party/blink/web_tests/platform/win/svg/zoom/page/zoom-zoom-coords-expected.txt b/third_party/blink/web_tests/platform/win/svg/zoom/page/zoom-zoom-coords-expected.txt
index c4612fe..180c82a 100644
--- a/third_party/blink/web_tests/platform/win/svg/zoom/page/zoom-zoom-coords-expected.txt
+++ b/third_party/blink/web_tests/platform/win/svg/zoom/page/zoom-zoom-coords-expected.txt
@@ -2,7 +2,6 @@
 Test
 Test
 
-
 This test checks getBoundingClientRect() on zoomed HTML and SVG elements
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/platform/win/virtual/pointerevent/fast/events/hit-test-clip-path-reference-expected.txt b/third_party/blink/web_tests/platform/win/virtual/pointerevent/fast/events/hit-test-clip-path-reference-expected.txt
index cf704f09..8bc478c7 100644
--- a/third_party/blink/web_tests/platform/win/virtual/pointerevent/fast/events/hit-test-clip-path-reference-expected.txt
+++ b/third_party/blink/web_tests/platform/win/virtual/pointerevent/fast/events/hit-test-clip-path-reference-expected.txt
@@ -15,4 +15,3 @@
 PASS path does not contain point at (66, 208)
 PASS path does not contain point at (68, 210)
 
-
diff --git a/third_party/blink/web_tests/platform/win/virtual/trustedeventsdefaultaction/fast/events/hit-test-clip-path-reference-expected.txt b/third_party/blink/web_tests/platform/win/virtual/trustedeventsdefaultaction/fast/events/hit-test-clip-path-reference-expected.txt
index cf704f09..8bc478c7 100644
--- a/third_party/blink/web_tests/platform/win/virtual/trustedeventsdefaultaction/fast/events/hit-test-clip-path-reference-expected.txt
+++ b/third_party/blink/web_tests/platform/win/virtual/trustedeventsdefaultaction/fast/events/hit-test-clip-path-reference-expected.txt
@@ -15,4 +15,3 @@
 PASS path does not contain point at (66, 208)
 PASS path does not contain point at (68, 210)
 
-
diff --git a/third_party/blink/web_tests/platform/win7/fast/forms/month-multiple-fields/month-multiple-fields-preserve-value-after-history-back-expected.txt b/third_party/blink/web_tests/platform/win7/fast/forms/month-multiple-fields/month-multiple-fields-preserve-value-after-history-back-expected.txt
index a0274211..8d955b8 100644
--- a/third_party/blink/web_tests/platform/win7/fast/forms/month-multiple-fields/month-multiple-fields-preserve-value-after-history-back-expected.txt
+++ b/third_party/blink/web_tests/platform/win7/fast/forms/month-multiple-fields/month-multiple-fields-preserve-value-after-history-back-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/platform/win7/svg/custom/svg-fonts-in-text-controls-expected.txt b/third_party/blink/web_tests/platform/win7/svg/custom/svg-fonts-in-text-controls-expected.txt
index 5d3b369f..895ea31 100644
--- a/third_party/blink/web_tests/platform/win7/svg/custom/svg-fonts-in-text-controls-expected.txt
+++ b/third_party/blink/web_tests/platform/win7/svg/custom/svg-fonts-in-text-controls-expected.txt
@@ -8,4 +8,3 @@
 
 Textarea offsetWidth: 137
 Input offsetWidth: 146
-
diff --git a/third_party/blink/web_tests/plugins/embed-attributes-setting-expected.txt b/third_party/blink/web_tests/plugins/embed-attributes-setting-expected.txt
index a01880e4..f3366db 100644
--- a/third_party/blink/web_tests/plugins/embed-attributes-setting-expected.txt
+++ b/third_party/blink/web_tests/plugins/embed-attributes-setting-expected.txt
@@ -10,3 +10,4 @@
 ----------
 [Embed is dynamically created element with only type specified]
 PASS: typeof embed.postMessage should be function and is.
+ 
diff --git a/third_party/blink/web_tests/plugins/inner-html-display-none-expected.txt b/third_party/blink/web_tests/plugins/inner-html-display-none-expected.txt
index 80ce460f..7c63122 100644
--- a/third_party/blink/web_tests/plugins/inner-html-display-none-expected.txt
+++ b/third_party/blink/web_tests/plugins/inner-html-display-none-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/plugins/invalid-mime-with-valid-extension-shows-missing-plugin-expected.txt b/third_party/blink/web_tests/plugins/invalid-mime-with-valid-extension-shows-missing-plugin-expected.txt
index 69cfc5a9..7ef22e9 100644
--- a/third_party/blink/web_tests/plugins/invalid-mime-with-valid-extension-shows-missing-plugin-expected.txt
+++ b/third_party/blink/web_tests/plugins/invalid-mime-with-valid-extension-shows-missing-plugin-expected.txt
@@ -1,2 +1 @@
 PASS
-
diff --git a/third_party/blink/web_tests/plugins/plugin-document-back-forward-expected.txt b/third_party/blink/web_tests/plugins/plugin-document-back-forward-expected.txt
index 64b8bac..ffefa9a 100644
--- a/third_party/blink/web_tests/plugins/plugin-document-back-forward-expected.txt
+++ b/third_party/blink/web_tests/plugins/plugin-document-back-forward-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/plugins/plugin-scriptable-expected.txt b/third_party/blink/web_tests/plugins/plugin-scriptable-expected.txt
index 30ac716..a9f7cd1 100644
--- a/third_party/blink/web_tests/plugins/plugin-scriptable-expected.txt
+++ b/third_party/blink/web_tests/plugins/plugin-scriptable-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/plugins/plugin-synthetic-event-crash-expected.txt b/third_party/blink/web_tests/plugins/plugin-synthetic-event-crash-expected.txt
index f376d16e..2b690ce 100644
--- a/third_party/blink/web_tests/plugins/plugin-synthetic-event-crash-expected.txt
+++ b/third_party/blink/web_tests/plugins/plugin-synthetic-event-crash-expected.txt
@@ -1,3 +1 @@
 This test ensures that a synthetic event dispatched on a plugin doesn't cause a crash.
-
-
diff --git a/third_party/blink/web_tests/pointer-lock/locked-element-removed-from-dom-expected.txt b/third_party/blink/web_tests/pointer-lock/locked-element-removed-from-dom-expected.txt
index 17ae1c7..f9dd8c41 100644
--- a/third_party/blink/web_tests/pointer-lock/locked-element-removed-from-dom-expected.txt
+++ b/third_party/blink/web_tests/pointer-lock/locked-element-removed-from-dom-expected.txt
@@ -17,4 +17,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/printing/viewport-size-dependant-iframe-with-multicol-crash-expected.txt b/third_party/blink/web_tests/printing/viewport-size-dependant-iframe-with-multicol-crash-expected.txt
index 9c314504..b87dec6 100644
--- a/third_party/blink/web_tests/printing/viewport-size-dependant-iframe-with-multicol-crash-expected.txt
+++ b/third_party/blink/web_tests/printing/viewport-size-dependant-iframe-with-multicol-crash-expected.txt
@@ -1,3 +1 @@
 PASS if no crash or assertion failure.
-
-
diff --git a/third_party/blink/web_tests/printing/webgl-oversized-printing-expected.txt b/third_party/blink/web_tests/printing/webgl-oversized-printing-expected.txt
index 84c1583..3a6412b 100644
--- a/third_party/blink/web_tests/printing/webgl-oversized-printing-expected.txt
+++ b/third_party/blink/web_tests/printing/webgl-oversized-printing-expected.txt
@@ -3,4 +3,3 @@
 TEST COMPLETE
 
 PASS Printed without crashing.
-
diff --git a/third_party/blink/web_tests/scrollbars/border-box-rect-clips-scrollbars-expected.txt b/third_party/blink/web_tests/scrollbars/border-box-rect-clips-scrollbars-expected.txt
index 6081051..48c4496 100644
--- a/third_party/blink/web_tests/scrollbars/border-box-rect-clips-scrollbars-expected.txt
+++ b/third_party/blink/web_tests/scrollbars/border-box-rect-clips-scrollbars-expected.txt
@@ -7,4 +7,3 @@
  
  
  
-
diff --git a/third_party/blink/web_tests/scrollbars/scrollbar-position-crash-expected.txt b/third_party/blink/web_tests/scrollbars/scrollbar-position-crash-expected.txt
index fde83f7..f0ebd2c50a 100644
--- a/third_party/blink/web_tests/scrollbars/scrollbar-position-crash-expected.txt
+++ b/third_party/blink/web_tests/scrollbars/scrollbar-position-crash-expected.txt
@@ -1,3 +1,2 @@
 PAS
 S
-
diff --git a/third_party/blink/web_tests/scrollingcoordinator/plugin-with-wheel-handler-expected.txt b/third_party/blink/web_tests/scrollingcoordinator/plugin-with-wheel-handler-expected.txt
index 758bc8d..6d70833b 100644
--- a/third_party/blink/web_tests/scrollingcoordinator/plugin-with-wheel-handler-expected.txt
+++ b/third_party/blink/web_tests/scrollingcoordinator/plugin-with-wheel-handler-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/security/autocomplete-cleared-on-back-expected.txt b/third_party/blink/web_tests/security/autocomplete-cleared-on-back-expected.txt
index 822a447..2203020 100644
--- a/third_party/blink/web_tests/security/autocomplete-cleared-on-back-expected.txt
+++ b/third_party/blink/web_tests/security/autocomplete-cleared-on-back-expected.txt
@@ -1,6 +1,4 @@
 This tests whether or not form input values that are designated autocomplete="off" retain their values after a navigation away from the page then returning back to it via the back button.
-
-
 Input value 1 -
 Input value 2 -
 
diff --git a/third_party/blink/web_tests/security/block-test-no-port-expected.txt b/third_party/blink/web_tests/security/block-test-no-port-expected.txt
index e3dc2d66..9703433 100644
--- a/third_party/blink/web_tests/security/block-test-no-port-expected.txt
+++ b/third_party/blink/web_tests/security/block-test-no-port-expected.txt
@@ -1,4 +1,2 @@
 http://255.255.255.255/test.jpg - willSendRequest <NSURLRequest URL http://255.255.255.255/test.jpg, main document URL block-test-no-port.html, http method GET>
 This test attempts to change the src of an IMG tag to a blocked IP with no port to confirm that WebKit returns the correct error for it - blocked instead of cannot find. Due to the nature of this test, the results can only be processed automatically via DumpRenderTree. In addition, on some systems the results may depend on the behavior of the proxy.
-
-
diff --git a/third_party/blink/web_tests/security/set-form-autocomplete-attribute-expected.txt b/third_party/blink/web_tests/security/set-form-autocomplete-attribute-expected.txt
index f441dd6..93498a16 100644
--- a/third_party/blink/web_tests/security/set-form-autocomplete-attribute-expected.txt
+++ b/third_party/blink/web_tests/security/set-form-autocomplete-attribute-expected.txt
@@ -11,5 +11,4 @@
 Element does autocomplete
 Element does *not* autocomplete
 
-
 This test exercises the WebKit API "elementDoesAutoComplete:" to make sure that API clients get the correct answer about whether or not a an element should autocomplete.
diff --git a/third_party/blink/web_tests/storage/domstorage/events/basic-body-attribute-expected.txt b/third_party/blink/web_tests/storage/domstorage/events/basic-body-attribute-expected.txt
index 593d41dd..bba2b746 100644
--- a/third_party/blink/web_tests/storage/domstorage/events/basic-body-attribute-expected.txt
+++ b/third_party/blink/web_tests/storage/domstorage/events/basic-body-attribute-expected.txt
@@ -98,4 +98,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/storage/domstorage/events/basic-expected.txt b/third_party/blink/web_tests/storage/domstorage/events/basic-expected.txt
index 6c9f648..de035ed 100644
--- a/third_party/blink/web_tests/storage/domstorage/events/basic-expected.txt
+++ b/third_party/blink/web_tests/storage/domstorage/events/basic-expected.txt
@@ -94,4 +94,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/storage/domstorage/events/basic-setattribute-expected.txt b/third_party/blink/web_tests/storage/domstorage/events/basic-setattribute-expected.txt
index 06bfac3..55bd0dd 100644
--- a/third_party/blink/web_tests/storage/domstorage/events/basic-setattribute-expected.txt
+++ b/third_party/blink/web_tests/storage/domstorage/events/basic-setattribute-expected.txt
@@ -98,4 +98,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/storage/domstorage/events/case-sensitive-expected.txt b/third_party/blink/web_tests/storage/domstorage/events/case-sensitive-expected.txt
index 23ff9076..d028240b 100644
--- a/third_party/blink/web_tests/storage/domstorage/events/case-sensitive-expected.txt
+++ b/third_party/blink/web_tests/storage/domstorage/events/case-sensitive-expected.txt
@@ -36,4 +36,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/storage/indexeddb/blob-basics-metadata-expected.txt b/third_party/blink/web_tests/storage/indexeddb/blob-basics-metadata-expected.txt
index 3353454..d4501f6f1 100644
--- a/third_party/blink/web_tests/storage/indexeddb/blob-basics-metadata-expected.txt
+++ b/third_party/blink/web_tests/storage/indexeddb/blob-basics-metadata-expected.txt
@@ -90,4 +90,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/storage/indexeddb/structured-clone-expected.txt b/third_party/blink/web_tests/storage/indexeddb/structured-clone-expected.txt
index 19b3e84..aac1ab0 100644
--- a/third_party/blink/web_tests/storage/indexeddb/structured-clone-expected.txt
+++ b/third_party/blink/web_tests/storage/indexeddb/structured-clone-expected.txt
@@ -962,4 +962,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-expected.txt b/third_party/blink/web_tests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-expected.txt
index ece183a..02f45a3 100644
--- a/third_party/blink/web_tests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-expected.txt
+++ b/third_party/blink/web_tests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame-expected.txt
@@ -16,4 +16,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/storage/websql/close-during-stress-test-expected.txt b/third_party/blink/web_tests/storage/websql/close-during-stress-test-expected.txt
index 2aad90c..4705ed5 100644
--- a/third_party/blink/web_tests/storage/websql/close-during-stress-test-expected.txt
+++ b/third_party/blink/web_tests/storage/websql/close-during-stress-test-expected.txt
@@ -1,5 +1,3 @@
 Should not crash or cause an assertion failure.
 
 A JavaScript failure on the console is expected, however, as the global object is cleared when closing a frame. It actually helps to cause database activity by throwing an exception from a callback.
-
-
diff --git a/third_party/blink/web_tests/svg/animations/additive-from-to-fill-animation-expected.txt b/third_party/blink/web_tests/svg/animations/additive-from-to-fill-animation-expected.txt
index 278349c..737bfdf 100644
--- a/third_party/blink/web_tests/svg/animations/additive-from-to-fill-animation-expected.txt
+++ b/third_party/blink/web_tests/svg/animations/additive-from-to-fill-animation-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/animations/animate-setcurrenttime-expected.txt b/third_party/blink/web_tests/svg/animations/animate-setcurrenttime-expected.txt
index af31843..84c53fd 100644
--- a/third_party/blink/web_tests/svg/animations/animate-setcurrenttime-expected.txt
+++ b/third_party/blink/web_tests/svg/animations/animate-setcurrenttime-expected.txt
@@ -98,4 +98,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/animations/discard-check-removal-order-expected.txt b/third_party/blink/web_tests/svg/animations/discard-check-removal-order-expected.txt
index 953447e..02e3793 100644
--- a/third_party/blink/web_tests/svg/animations/discard-check-removal-order-expected.txt
+++ b/third_party/blink/web_tests/svg/animations/discard-check-removal-order-expected.txt
@@ -1,4 +1,3 @@
 This tests for the remove order of discard elements.
 
 Discard node removal order: animate,discard,rect,discard
-
diff --git a/third_party/blink/web_tests/svg/animations/smil-animation-max-attribute-zero-crash-expected.txt b/third_party/blink/web_tests/svg/animations/smil-animation-max-attribute-zero-crash-expected.txt
index 6f0bc5d..1221ecb 100644
--- a/third_party/blink/web_tests/svg/animations/smil-animation-max-attribute-zero-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/animations/smil-animation-max-attribute-zero-crash-expected.txt
@@ -1,2 +1 @@
 PASS: not crashing in debug.
-
diff --git a/third_party/blink/web_tests/svg/animations/smil-scheduled-in-inactive-document-crash-expected.txt b/third_party/blink/web_tests/svg/animations/smil-scheduled-in-inactive-document-crash-expected.txt
index e071df55..8822c56 100644
--- a/third_party/blink/web_tests/svg/animations/smil-scheduled-in-inactive-document-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/animations/smil-scheduled-in-inactive-document-crash-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/animations/svg-animation-policy-once-expected.txt b/third_party/blink/web_tests/svg/animations/svg-animation-policy-once-expected.txt
index 89f528a..de3fa3d 100644
--- a/third_party/blink/web_tests/svg/animations/svg-animation-policy-once-expected.txt
+++ b/third_party/blink/web_tests/svg/animations/svg-animation-policy-once-expected.txt
@@ -1,6 +1,5 @@
 SVG with animation policy, once
 
-
 This tests svg animation with animation policy once
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-retarget-crash-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-retarget-crash-expected.txt
index 2d60ff0..af0bbf1 100644
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-retarget-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/animations/svglength-animation-retarget-crash-expected.txt
@@ -1,5 +1,3 @@
 This test verifies that SVG animation targets can change during the animation.
 
 TEST PASSED
-
-
diff --git a/third_party/blink/web_tests/svg/animations/updated-attributes-expected.txt b/third_party/blink/web_tests/svg/animations/updated-attributes-expected.txt
index 6b846c0..7646994 100644
--- a/third_party/blink/web_tests/svg/animations/updated-attributes-expected.txt
+++ b/third_party/blink/web_tests/svg/animations/updated-attributes-expected.txt
@@ -1,2 +1 @@
 PASS: animated width is 100
-
diff --git a/third_party/blink/web_tests/svg/animations/use-use-animate-crash-expected.txt b/third_party/blink/web_tests/svg/animations/use-use-animate-crash-expected.txt
index d380fbf..730ebf6 100644
--- a/third_party/blink/web_tests/svg/animations/use-use-animate-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/animations/use-use-animate-crash-expected.txt
@@ -1,2 +1 @@
 This test passes if it doesn't crash.
-
diff --git a/third_party/blink/web_tests/svg/as-image/animated-use-as-image-crash-expected.txt b/third_party/blink/web_tests/svg/as-image/animated-use-as-image-crash-expected.txt
index a9c744c6..002a30b 100644
--- a/third_party/blink/web_tests/svg/as-image/animated-use-as-image-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/as-image/animated-use-as-image-crash-expected.txt
@@ -1,3 +1 @@
 Test passes if loaded into Chromium with Asan enabled and does not crash.
-
-
diff --git a/third_party/blink/web_tests/svg/as-image/svg-as-image-actually-containing-xhtml-with-media-expected.txt b/third_party/blink/web_tests/svg/as-image/svg-as-image-actually-containing-xhtml-with-media-expected.txt
index e8ca7ec..21914eb6 100644
--- a/third_party/blink/web_tests/svg/as-image/svg-as-image-actually-containing-xhtml-with-media-expected.txt
+++ b/third_party/blink/web_tests/svg/as-image/svg-as-image-actually-containing-xhtml-with-media-expected.txt
@@ -3,5 +3,4 @@
 TEST COMPLETE
 
 
-
 This test pass if it doesn't crash.
diff --git a/third_party/blink/web_tests/svg/as-image/svg-container-size-after-reload-expected.txt b/third_party/blink/web_tests/svg/as-image/svg-container-size-after-reload-expected.txt
index 3a9698e7..771fe25e 100644
--- a/third_party/blink/web_tests/svg/as-image/svg-container-size-after-reload-expected.txt
+++ b/third_party/blink/web_tests/svg/as-image/svg-container-size-after-reload-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/as-image/svg-image-leak-cached-data-expected.txt b/third_party/blink/web_tests/svg/as-image/svg-image-leak-cached-data-expected.txt
index 15e371113..d535e93 100644
--- a/third_party/blink/web_tests/svg/as-image/svg-image-leak-cached-data-expected.txt
+++ b/third_party/blink/web_tests/svg/as-image/svg-image-leak-cached-data-expected.txt
@@ -1,5 +1,3 @@
 This test checks if SVGImageCache leaks SVG image data as reported in https://bugs.webkit.org/show_bug.cgi?id=87792. Its layout has no particular meaning. The test will cause crash of debug version when leaks of SVG image data is detected.
 
 Note: the code detects leaks of SVG image data on destruction of SVGImageCache, which doesn't work on platforms that DumpRenderTree leaks the cache itself.
-
-
diff --git a/third_party/blink/web_tests/svg/css/buffered-rendering-expected.txt b/third_party/blink/web_tests/svg/css/buffered-rendering-expected.txt
index 9a5806f6..c7052a1 100644
--- a/third_party/blink/web_tests/svg/css/buffered-rendering-expected.txt
+++ b/third_party/blink/web_tests/svg/css/buffered-rendering-expected.txt
@@ -17,4 +17,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/css/crash-css-generated-content-expected.txt b/third_party/blink/web_tests/svg/css/crash-css-generated-content-expected.txt
index 7cad17a2..e0952be 100644
--- a/third_party/blink/web_tests/svg/css/crash-css-generated-content-expected.txt
+++ b/third_party/blink/web_tests/svg/css/crash-css-generated-content-expected.txt
@@ -1,2 +1 @@
 This test ensures that we do not crash when css generated content attempts to attach to svg text
-
diff --git a/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt b/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt
index 1c8281c..570664b1 100644
--- a/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt
+++ b/third_party/blink/web_tests/svg/css/getComputedStyle-listing-expected.txt
@@ -300,4 +300,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/css/mask-type-expected.txt b/third_party/blink/web_tests/svg/css/mask-type-expected.txt
index b9f980ed..8972bd1 100644
--- a/third_party/blink/web_tests/svg/css/mask-type-expected.txt
+++ b/third_party/blink/web_tests/svg/css/mask-type-expected.txt
@@ -12,4 +12,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/css/parse-length-expected.txt b/third_party/blink/web_tests/svg/css/parse-length-expected.txt
index 29ed886..f87e4bc7 100644
--- a/third_party/blink/web_tests/svg/css/parse-length-expected.txt
+++ b/third_party/blink/web_tests/svg/css/parse-length-expected.txt
@@ -251,4 +251,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/css/path-layout-crash-expected.txt b/third_party/blink/web_tests/svg/css/path-layout-crash-expected.txt
index e53ea9ba..9ad40cf 100644
--- a/third_party/blink/web_tests/svg/css/path-layout-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/css/path-layout-crash-expected.txt
@@ -1,3 +1,2 @@
 This test passes if it does not crash
 
-
diff --git a/third_party/blink/web_tests/svg/custom/a-focus-by-tab-expected.txt b/third_party/blink/web_tests/svg/custom/a-focus-by-tab-expected.txt
index b5c40b6..f398a19 100644
--- a/third_party/blink/web_tests/svg/custom/a-focus-by-tab-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/a-focus-by-tab-expected.txt
@@ -10,4 +10,3 @@
 
  
 Link
-
diff --git a/third_party/blink/web_tests/svg/custom/a-focus-by-tab-offscreen-expected.txt b/third_party/blink/web_tests/svg/custom/a-focus-by-tab-offscreen-expected.txt
index b5c40b6..f398a19 100644
--- a/third_party/blink/web_tests/svg/custom/a-focus-by-tab-offscreen-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/a-focus-by-tab-offscreen-expected.txt
@@ -10,4 +10,3 @@
 
  
 Link
-
diff --git a/third_party/blink/web_tests/svg/custom/bad-attributeName-crash-expected.txt b/third_party/blink/web_tests/svg/custom/bad-attributeName-crash-expected.txt
index 28072d4e..15c95384 100644
--- a/third_party/blink/web_tests/svg/custom/bad-attributeName-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/bad-attributeName-crash-expected.txt
@@ -6,4 +6,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/custom/click-internal-anchor-with-use-crash-expected.txt b/third_party/blink/web_tests/svg/custom/click-internal-anchor-with-use-crash-expected.txt
index 2b9632d..ddad5eaf 100644
--- a/third_party/blink/web_tests/svg/custom/click-internal-anchor-with-use-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/click-internal-anchor-with-use-crash-expected.txt
@@ -1,2 +1 @@
 PASS if no crash
-
diff --git a/third_party/blink/web_tests/svg/custom/crash-inline-container-client-expected.txt b/third_party/blink/web_tests/svg/custom/crash-inline-container-client-expected.txt
index 0163abc..654ddf7f 100644
--- a/third_party/blink/web_tests/svg/custom/crash-inline-container-client-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/crash-inline-container-client-expected.txt
@@ -1,2 +1 @@
 This test passes if it does not crash.
-
diff --git a/third_party/blink/web_tests/svg/custom/display-table-caption-inherit-foreignObject-expected.txt b/third_party/blink/web_tests/svg/custom/display-table-caption-inherit-foreignObject-expected.txt
index 1f42074..061e21b 100644
--- a/third_party/blink/web_tests/svg/custom/display-table-caption-inherit-foreignObject-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/display-table-caption-inherit-foreignObject-expected.txt
@@ -1,2 +1 @@
 This test PASSED if we don't crash when the display value is table-caption by using inherit
-
diff --git a/third_party/blink/web_tests/svg/custom/display-table-caption-inherit-text-expected.txt b/third_party/blink/web_tests/svg/custom/display-table-caption-inherit-text-expected.txt
index 1f42074..061e21b 100644
--- a/third_party/blink/web_tests/svg/custom/display-table-caption-inherit-text-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/display-table-caption-inherit-text-expected.txt
@@ -1,2 +1 @@
 This test PASSED if we don't crash when the display value is table-caption by using inherit
-
diff --git a/third_party/blink/web_tests/svg/custom/dominant-baseline-propagation-crash-expected.txt b/third_party/blink/web_tests/svg/custom/dominant-baseline-propagation-crash-expected.txt
index 594b60f..e46123d3 100644
--- a/third_party/blink/web_tests/svg/custom/dominant-baseline-propagation-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/dominant-baseline-propagation-crash-expected.txt
@@ -1,4 +1,3 @@
 a
 
-
 PASS if no crash
diff --git a/third_party/blink/web_tests/svg/custom/embedded-svg-allowed-in-dashboard-expected.txt b/third_party/blink/web_tests/svg/custom/embedded-svg-allowed-in-dashboard-expected.txt
index 5e2a494..89a4a48 100644
--- a/third_party/blink/web_tests/svg/custom/embedded-svg-allowed-in-dashboard-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/embedded-svg-allowed-in-dashboard-expected.txt
@@ -2,4 +2,3 @@
 
 PASS: Successfully embedded SVG in document
 
-
diff --git a/third_party/blink/web_tests/svg/custom/focus-event-handling-expected.txt b/third_party/blink/web_tests/svg/custom/focus-event-handling-expected.txt
index 1d7fca5..aeddfbf 100644
--- a/third_party/blink/web_tests/svg/custom/focus-event-handling-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/focus-event-handling-expected.txt
@@ -1,6 +1,5 @@
 TEST
 
-
 Test whether focusin and focusout events are dispatched and seen in the focusin/focusout event handlers:
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/svg/custom/focus-event-handling-keyboard-expected.txt b/third_party/blink/web_tests/svg/custom/focus-event-handling-keyboard-expected.txt
index 9ce910b..e2f8ccc 100644
--- a/third_party/blink/web_tests/svg/custom/focus-event-handling-keyboard-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/focus-event-handling-keyboard-expected.txt
@@ -1,6 +1,5 @@
 TEST
 
-
 Test whether focusin and focusout events are dispatched and seen in the focusin/focusout event handlers when using keyboard:
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/svg/custom/fragment-navigation-01-expected.txt b/third_party/blink/web_tests/svg/custom/fragment-navigation-01-expected.txt
index 39f414a3..dd974679 100644
--- a/third_party/blink/web_tests/svg/custom/fragment-navigation-01-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/fragment-navigation-01-expected.txt
@@ -1,4 +1,3 @@
 Clicking the green rectangle should attempt a navigation to the fragment identifier.
 
-
 PASS
diff --git a/third_party/blink/web_tests/svg/custom/fragment-navigation-02-expected.txt b/third_party/blink/web_tests/svg/custom/fragment-navigation-02-expected.txt
index 2d50bee..1deee5e3 100644
--- a/third_party/blink/web_tests/svg/custom/fragment-navigation-02-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/fragment-navigation-02-expected.txt
@@ -1,4 +1,3 @@
 Clicking the red rectangle should attempt a navigation to the fragment identifier.
 
-
 PASS
diff --git a/third_party/blink/web_tests/svg/custom/html-document-set-title-expected.txt b/third_party/blink/web_tests/svg/custom/html-document-set-title-expected.txt
index f6641785..ef6925b 100644
--- a/third_party/blink/web_tests/svg/custom/html-document-set-title-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/html-document-set-title-expected.txt
@@ -3,4 +3,3 @@
 TEST COMPLETE
 
 PASS document.title is ""
-
diff --git a/third_party/blink/web_tests/svg/custom/invalid-ctm-expected.txt b/third_party/blink/web_tests/svg/custom/invalid-ctm-expected.txt
index f5ed9ba..dc3cfaf 100644
--- a/third_party/blink/web_tests/svg/custom/invalid-ctm-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/invalid-ctm-expected.txt
@@ -1,3 +1,2 @@
 Test for WK91189: getCTM() should not assert.
 getCTM() returned: [1,0,0,1,0,0]
-
diff --git a/third_party/blink/web_tests/svg/custom/invalid-filter-reference-and-opacity-crash-expected.txt b/third_party/blink/web_tests/svg/custom/invalid-filter-reference-and-opacity-crash-expected.txt
index 9170f94..19519799 100644
--- a/third_party/blink/web_tests/svg/custom/invalid-filter-reference-and-opacity-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/invalid-filter-reference-and-opacity-crash-expected.txt
@@ -1,4 +1,3 @@
 PASS if no crash (with asserts enabled).
 
 Foo
-
diff --git a/third_party/blink/web_tests/svg/custom/large-image-pattern-crash-expected.txt b/third_party/blink/web_tests/svg/custom/large-image-pattern-crash-expected.txt
index 886a96b8..9b9c9725 100644
--- a/third_party/blink/web_tests/svg/custom/large-image-pattern-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/large-image-pattern-crash-expected.txt
@@ -1,2 +1 @@
 PASS: did not crash.
-
diff --git a/third_party/blink/web_tests/svg/custom/mutation-text-transform-crash-expected.txt b/third_party/blink/web_tests/svg/custom/mutation-text-transform-crash-expected.txt
index 69cfc5a9..7ef22e9 100644
--- a/third_party/blink/web_tests/svg/custom/mutation-text-transform-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/mutation-text-transform-crash-expected.txt
@@ -1,2 +1 @@
 PASS
-
diff --git a/third_party/blink/web_tests/svg/custom/no-fixed-in-svg-assert-expected.txt b/third_party/blink/web_tests/svg/custom/no-fixed-in-svg-assert-expected.txt
index 1727489..89b053ffd 100644
--- a/third_party/blink/web_tests/svg/custom/no-fixed-in-svg-assert-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/no-fixed-in-svg-assert-expected.txt
@@ -1,3 +1 @@
 PASS if did not assert or crash.
-
-
diff --git a/third_party/blink/web_tests/svg/custom/path-bbox-update-expected.txt b/third_party/blink/web_tests/svg/custom/path-bbox-update-expected.txt
index 48bc515..5a20647 100644
--- a/third_party/blink/web_tests/svg/custom/path-bbox-update-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/path-bbox-update-expected.txt
@@ -1,2 +1 @@
 PASS: bounding box is (80, 80, 100, 100)
-
diff --git a/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-1-expected.txt b/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-1-expected.txt
index 31b6673..6b9580f 100644
--- a/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-1-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-1-expected.txt
@@ -1,3 +1 @@
 PASS if no crash (stack overflow).
-
-
diff --git a/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-2-expected.txt b/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-2-expected.txt
index 31b6673..6b9580f 100644
--- a/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-2-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-2-expected.txt
@@ -1,3 +1 @@
 PASS if no crash (stack overflow).
-
-
diff --git a/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-3-expected.txt b/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-3-expected.txt
index 31b6673..6b9580f 100644
--- a/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-3-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-3-expected.txt
@@ -1,3 +1 @@
 PASS if no crash (stack overflow).
-
-
diff --git a/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-4-expected.txt b/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-4-expected.txt
index 31b6673..6b9580f 100644
--- a/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-4-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-dynamic-4-expected.txt
@@ -1,3 +1 @@
 PASS if no crash (stack overflow).
-
-
diff --git a/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-expected.txt b/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-expected.txt
index 31b6673..6b9580f 100644
--- a/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/pattern-3-step-cycle-expected.txt
@@ -1,3 +1 @@
 PASS if no crash (stack overflow).
-
-
diff --git a/third_party/blink/web_tests/svg/custom/pattern-content-cycle-w-resourceless-container-expected.txt b/third_party/blink/web_tests/svg/custom/pattern-content-cycle-w-resourceless-container-expected.txt
index 31b6673..6b9580f 100644
--- a/third_party/blink/web_tests/svg/custom/pattern-content-cycle-w-resourceless-container-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/pattern-content-cycle-w-resourceless-container-expected.txt
@@ -1,3 +1 @@
 PASS if no crash (stack overflow).
-
-
diff --git a/third_party/blink/web_tests/svg/custom/pattern-content-inheritance-cycle-expected.txt b/third_party/blink/web_tests/svg/custom/pattern-content-inheritance-cycle-expected.txt
index dfcc68b..25bce70 100644
--- a/third_party/blink/web_tests/svg/custom/pattern-content-inheritance-cycle-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/pattern-content-inheritance-cycle-expected.txt
@@ -1,3 +1 @@
 PASS if no crash (stack overflow)
-
-
diff --git a/third_party/blink/web_tests/svg/custom/svg-fonts-in-text-controls-expected.txt b/third_party/blink/web_tests/svg/custom/svg-fonts-in-text-controls-expected.txt
new file mode 100644
index 0000000..47770ba
--- /dev/null
+++ b/third_party/blink/web_tests/svg/custom/svg-fonts-in-text-controls-expected.txt
@@ -0,0 +1,10 @@
+This tests that the width of textareas and inputs is correctly calculated based on the metrics of the SVG font.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+Textarea offsetWidth: 137
+Input offsetWidth: 138
diff --git a/third_party/blink/web_tests/svg/custom/svg-getelementid-expected.txt b/third_party/blink/web_tests/svg/custom/svg-getelementid-expected.txt
index 7c972cff..6069f21 100644
--- a/third_party/blink/web_tests/svg/custom/svg-getelementid-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/svg-getelementid-expected.txt
@@ -13,4 +13,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/custom/svg-width-intrinsic-crash-expected.txt b/third_party/blink/web_tests/svg/custom/svg-width-intrinsic-crash-expected.txt
index 7940879a..0696b41 100644
--- a/third_party/blink/web_tests/svg/custom/svg-width-intrinsic-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/svg-width-intrinsic-crash-expected.txt
@@ -1,2 +1 @@
 PASS (didn't crash).
-
diff --git a/third_party/blink/web_tests/svg/custom/tabindex-order-expected.txt b/third_party/blink/web_tests/svg/custom/tabindex-order-expected.txt
index 6e2b5b67..a910a208 100644
--- a/third_party/blink/web_tests/svg/custom/tabindex-order-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/tabindex-order-expected.txt
@@ -2,7 +2,6 @@
 
 To test, put focus in "a". Pressing Tab should focus "a" through "k" in order, and pressing Shift-Tab should reverse the order.
 
-
 Tabbing forward....
 
 <rect id="h" tabindex="6"> focused
diff --git a/third_party/blink/web_tests/svg/custom/title-assertion-expected.txt b/third_party/blink/web_tests/svg/custom/title-assertion-expected.txt
index bf81529..2dab653 100644
--- a/third_party/blink/web_tests/svg/custom/title-assertion-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/title-assertion-expected.txt
@@ -7,4 +7,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/custom/use-href-attr-removal-crash-expected.txt b/third_party/blink/web_tests/svg/custom/use-href-attr-removal-crash-expected.txt
index ea4527b7..c2541f4 100644
--- a/third_party/blink/web_tests/svg/custom/use-href-attr-removal-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/custom/use-href-attr-removal-crash-expected.txt
@@ -1,3 +1 @@
 PASS if no crash.
-
-
diff --git a/third_party/blink/web_tests/svg/dom/SVGLocatable-getCTM-svg-root-expected.txt b/third_party/blink/web_tests/svg/dom/SVGLocatable-getCTM-svg-root-expected.txt
index 01bfee07..98c47c0c 100644
--- a/third_party/blink/web_tests/svg/dom/SVGLocatable-getCTM-svg-root-expected.txt
+++ b/third_party/blink/web_tests/svg/dom/SVGLocatable-getCTM-svg-root-expected.txt
@@ -12,6 +12,3 @@
 
 TEST COMPLETE
 
-
-
-
diff --git a/third_party/blink/web_tests/svg/dom/SVGNumberList-basics-expected.txt b/third_party/blink/web_tests/svg/dom/SVGNumberList-basics-expected.txt
index d607ea5..ee01331 100644
--- a/third_party/blink/web_tests/svg/dom/SVGNumberList-basics-expected.txt
+++ b/third_party/blink/web_tests/svg/dom/SVGNumberList-basics-expected.txt
@@ -1,6 +1,5 @@
 ABC
 
-
 This is a test of the simple SVGNumberList API parts.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/svg/dom/SVGSVGElement-currentScale-NaN-no-crash-expected.txt b/third_party/blink/web_tests/svg/dom/SVGSVGElement-currentScale-NaN-no-crash-expected.txt
index 6acf3010..9ddcf58 100644
--- a/third_party/blink/web_tests/svg/dom/SVGSVGElement-currentScale-NaN-no-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/dom/SVGSVGElement-currentScale-NaN-no-crash-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/dom/SVGSVGElement-currentTime-expected.txt b/third_party/blink/web_tests/svg/dom/SVGSVGElement-currentTime-expected.txt
index 617aeec..cebeebc 100644
--- a/third_party/blink/web_tests/svg/dom/SVGSVGElement-currentTime-expected.txt
+++ b/third_party/blink/web_tests/svg/dom/SVGSVGElement-currentTime-expected.txt
@@ -8,4 +8,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/dom/SVGScriptElement/script-external-no-multiple-load-expected.txt b/third_party/blink/web_tests/svg/dom/SVGScriptElement/script-external-no-multiple-load-expected.txt
index a01b2167..d9bfb315 100644
--- a/third_party/blink/web_tests/svg/dom/SVGScriptElement/script-external-no-multiple-load-expected.txt
+++ b/third_party/blink/web_tests/svg/dom/SVGScriptElement/script-external-no-multiple-load-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/dom/SVGStringList-basics-expected.txt b/third_party/blink/web_tests/svg/dom/SVGStringList-basics-expected.txt
index 2af2aa12..11e205e 100644
--- a/third_party/blink/web_tests/svg/dom/SVGStringList-basics-expected.txt
+++ b/third_party/blink/web_tests/svg/dom/SVGStringList-basics-expected.txt
@@ -1,6 +1,5 @@
 ABC
 
-
 This is a test of the simple SVGStringList API parts.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/blink/web_tests/svg/dom/method-argument-aritychecks-expected.txt b/third_party/blink/web_tests/svg/dom/method-argument-aritychecks-expected.txt
index 4dc74ff..b3803fbd 100644
--- a/third_party/blink/web_tests/svg/dom/method-argument-aritychecks-expected.txt
+++ b/third_party/blink/web_tests/svg/dom/method-argument-aritychecks-expected.txt
@@ -39,4 +39,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/dom/method-argument-typechecks-expected.txt b/third_party/blink/web_tests/svg/dom/method-argument-typechecks-expected.txt
index f070847d..762943b 100644
--- a/third_party/blink/web_tests/svg/dom/method-argument-typechecks-expected.txt
+++ b/third_party/blink/web_tests/svg/dom/method-argument-typechecks-expected.txt
@@ -45,4 +45,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/dom/no-error-reporting-on-attribute-removal-expected.txt b/third_party/blink/web_tests/svg/dom/no-error-reporting-on-attribute-removal-expected.txt
index 69899ae..b38d890 100644
--- a/third_party/blink/web_tests/svg/dom/no-error-reporting-on-attribute-removal-expected.txt
+++ b/third_party/blink/web_tests/svg/dom/no-error-reporting-on-attribute-removal-expected.txt
@@ -1,3 +1 @@
 PASS if no error is reported.
-
-
diff --git a/third_party/blink/web_tests/svg/dom/svg-root-lengths-expected.txt b/third_party/blink/web_tests/svg/dom/svg-root-lengths-expected.txt
index c1268307..8ef764c 100644
--- a/third_party/blink/web_tests/svg/dom/svg-root-lengths-expected.txt
+++ b/third_party/blink/web_tests/svg/dom/svg-root-lengths-expected.txt
@@ -2,7 +2,6 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-
 Initial/default values:
 PASS svg.width.baseVal.value is 200
 PASS svg.height.baseVal.value is 200
diff --git a/third_party/blink/web_tests/svg/dom/undefined-null-expected.txt b/third_party/blink/web_tests/svg/dom/undefined-null-expected.txt
index becf5ff..8830ead 100644
--- a/third_party/blink/web_tests/svg/dom/undefined-null-expected.txt
+++ b/third_party/blink/web_tests/svg/dom/undefined-null-expected.txt
@@ -74,4 +74,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/dynamic-updates/SVG-dynamic-css-transform-expected.txt b/third_party/blink/web_tests/svg/dynamic-updates/SVG-dynamic-css-transform-expected.txt
index af99262d..c11632d9 100644
--- a/third_party/blink/web_tests/svg/dynamic-updates/SVG-dynamic-css-transform-expected.txt
+++ b/third_party/blink/web_tests/svg/dynamic-updates/SVG-dynamic-css-transform-expected.txt
@@ -1,8 +1,5 @@
  
-
-
  
-
 SVG 1.1 dynamic update tests
 
 Tests dynamic updates of the '-webkit-transform' on SVG element
diff --git a/third_party/blink/web_tests/svg/filters/feColorMatrix-invalid-value-expected.txt b/third_party/blink/web_tests/svg/filters/feColorMatrix-invalid-value-expected.txt
index af7e9b6f..bc332b73 100644
--- a/third_party/blink/web_tests/svg/filters/feColorMatrix-invalid-value-expected.txt
+++ b/third_party/blink/web_tests/svg/filters/feColorMatrix-invalid-value-expected.txt
@@ -1,3 +1,2 @@
 This test is to ensure that we do not crash when loading a SVG image with an invalid feColorMatrix filter
 PASS: Did not crash when rendering the SVG image.
-
diff --git a/third_party/blink/web_tests/svg/filters/feLight-non-lighting-parent-crash-expected.txt b/third_party/blink/web_tests/svg/filters/feLight-non-lighting-parent-crash-expected.txt
index fa66891..73a344a 100644
--- a/third_party/blink/web_tests/svg/filters/feLight-non-lighting-parent-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/filters/feLight-non-lighting-parent-crash-expected.txt
@@ -1,3 +1 @@
 PASS if no assert in debug.
-
-
diff --git a/third_party/blink/web_tests/svg/filters/feMorphology-invalid-radius-expected.txt b/third_party/blink/web_tests/svg/filters/feMorphology-invalid-radius-expected.txt
index 1300708..a7c356f 100644
--- a/third_party/blink/web_tests/svg/filters/feMorphology-invalid-radius-expected.txt
+++ b/third_party/blink/web_tests/svg/filters/feMorphology-invalid-radius-expected.txt
@@ -1,3 +1,2 @@
 This test is to ensure that we do not crash when loading a SVG image with an invalid feMorphology filter radius.
 PASS: Did not crash when rendering the SVG image.
-
diff --git a/third_party/blink/web_tests/svg/foreign-object-under-shadow-root-under-hidden-expected.txt b/third_party/blink/web_tests/svg/foreign-object-under-shadow-root-under-hidden-expected.txt
index 9be7f42..294508d 100644
--- a/third_party/blink/web_tests/svg/foreign-object-under-shadow-root-under-hidden-expected.txt
+++ b/third_party/blink/web_tests/svg/foreign-object-under-shadow-root-under-hidden-expected.txt
@@ -1,3 +1,2 @@
 CONSOLE WARNING: line 6: Element.createShadowRoot is deprecated and will be removed in M73, around March 2019. Please use Element.attachShadow instead. See https://www.chromestatus.com/features/4507242028072960 for more details.
 Passes if it does not crash. 
-
diff --git a/third_party/blink/web_tests/svg/foreignObject/fO-fixed-position-crash-expected.txt b/third_party/blink/web_tests/svg/foreignObject/fO-fixed-position-crash-expected.txt
index 69cfc5a9..7ef22e9 100644
--- a/third_party/blink/web_tests/svg/foreignObject/fO-fixed-position-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/foreignObject/fO-fixed-position-crash-expected.txt
@@ -1,2 +1 @@
 PASS
-
diff --git a/third_party/blink/web_tests/svg/foreignObject/fO-percentage-height-style-expected.txt b/third_party/blink/web_tests/svg/foreignObject/fO-percentage-height-style-expected.txt
index dbb8987..27dc880 100644
--- a/third_party/blink/web_tests/svg/foreignObject/fO-percentage-height-style-expected.txt
+++ b/third_party/blink/web_tests/svg/foreignObject/fO-percentage-height-style-expected.txt
@@ -9,4 +9,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/hittest/ellipse-hittest-expected.txt b/third_party/blink/web_tests/svg/hittest/ellipse-hittest-expected.txt
index 260893a9..8d3f864 100644
--- a/third_party/blink/web_tests/svg/hittest/ellipse-hittest-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/ellipse-hittest-expected.txt
@@ -26,4 +26,3 @@
 (335, 122)
 (333, 190)
 (377, 66)
-
diff --git a/third_party/blink/web_tests/svg/hittest/pointer-events-all-expected.txt b/third_party/blink/web_tests/svg/hittest/pointer-events-all-expected.txt
index 179953c..bb91b84c 100644
--- a/third_party/blink/web_tests/svg/hittest/pointer-events-all-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/pointer-events-all-expected.txt
@@ -106,4 +106,3 @@
 (595, 338)
 (614, 316)
 (569, 333)
-
diff --git a/third_party/blink/web_tests/svg/hittest/pointer-events-all2-expected.txt b/third_party/blink/web_tests/svg/hittest/pointer-events-all2-expected.txt
index 7c413606..8306e9ea 100644
--- a/third_party/blink/web_tests/svg/hittest/pointer-events-all2-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/pointer-events-all2-expected.txt
@@ -54,4 +54,3 @@
 (595, 138)
 (614, 116)
 (569, 133)
-
diff --git a/third_party/blink/web_tests/svg/hittest/rect-hittest-expected.txt b/third_party/blink/web_tests/svg/hittest/rect-hittest-expected.txt
index 654cb909..ee2de41 100644
--- a/third_party/blink/web_tests/svg/hittest/rect-hittest-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/rect-hittest-expected.txt
@@ -55,4 +55,3 @@
 (233, 140)
 (312, 128)
 (330, 150)
-
diff --git a/third_party/blink/web_tests/svg/hittest/rect-miterlimit-expected.txt b/third_party/blink/web_tests/svg/hittest/rect-miterlimit-expected.txt
index e4f0472..cdd38f2 100644
--- a/third_party/blink/web_tests/svg/hittest/rect-miterlimit-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/rect-miterlimit-expected.txt
@@ -1,5 +1,3 @@
 Check that hit testing on a <rect> with various miterlimits around sqrt(2) works properly. If the test passes, you will see "PASS" below.
 
 PASS
-
-
diff --git a/third_party/blink/web_tests/svg/hittest/singular-transform-1-expected.txt b/third_party/blink/web_tests/svg/hittest/singular-transform-1-expected.txt
index a262bf8..5a2d9d52 100644
--- a/third_party/blink/web_tests/svg/hittest/singular-transform-1-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/singular-transform-1-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/hittest/singular-transform-2-expected.txt b/third_party/blink/web_tests/svg/hittest/singular-transform-2-expected.txt
index a262bf8..5a2d9d52 100644
--- a/third_party/blink/web_tests/svg/hittest/singular-transform-2-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/singular-transform-2-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/hittest/singular-transform-3-expected.txt b/third_party/blink/web_tests/svg/hittest/singular-transform-3-expected.txt
index 6d252344..4cd2908 100644
--- a/third_party/blink/web_tests/svg/hittest/singular-transform-3-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/singular-transform-3-expected.txt
@@ -4,4 +4,3 @@
 TEST COMPLETE
 
 XX
-
diff --git a/third_party/blink/web_tests/svg/hittest/singular-transform-4-expected.txt b/third_party/blink/web_tests/svg/hittest/singular-transform-4-expected.txt
index a262bf8..5a2d9d52 100644
--- a/third_party/blink/web_tests/svg/hittest/singular-transform-4-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/singular-transform-4-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/hittest/singular-transform-5-expected.txt b/third_party/blink/web_tests/svg/hittest/singular-transform-5-expected.txt
index a262bf8..5a2d9d52 100644
--- a/third_party/blink/web_tests/svg/hittest/singular-transform-5-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/singular-transform-5-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/hittest/singular-transform-6-expected.txt b/third_party/blink/web_tests/svg/hittest/singular-transform-6-expected.txt
index 0b351ec..a8aebb25 100644
--- a/third_party/blink/web_tests/svg/hittest/singular-transform-6-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/singular-transform-6-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/hittest/singular-transform-7-expected.txt b/third_party/blink/web_tests/svg/hittest/singular-transform-7-expected.txt
index 63ab39f..5a2d9d52 100644
--- a/third_party/blink/web_tests/svg/hittest/singular-transform-7-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/singular-transform-7-expected.txt
@@ -3,5 +3,3 @@
 
 TEST COMPLETE
 
-
-
diff --git a/third_party/blink/web_tests/svg/hittest/svg-use-element-from-point-expected.txt b/third_party/blink/web_tests/svg/hittest/svg-use-element-from-point-expected.txt
index 546d3f4..e55eb8df6 100644
--- a/third_party/blink/web_tests/svg/hittest/svg-use-element-from-point-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/svg-use-element-from-point-expected.txt
@@ -1,4 +1,3 @@
 elementFromPoint should not enter infinite loop.
 
 PASS
-
diff --git a/third_party/blink/web_tests/svg/hittest/update-ellipse-expected.txt b/third_party/blink/web_tests/svg/hittest/update-ellipse-expected.txt
index dd13277..98b23d5 100644
--- a/third_party/blink/web_tests/svg/hittest/update-ellipse-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/update-ellipse-expected.txt
@@ -20,4 +20,3 @@
 (727, 284)
 (705, 402)
 (727, 384)
-
diff --git a/third_party/blink/web_tests/svg/hittest/update-rect-expected.txt b/third_party/blink/web_tests/svg/hittest/update-rect-expected.txt
index 18ce4b8..55810e61 100644
--- a/third_party/blink/web_tests/svg/hittest/update-rect-expected.txt
+++ b/third_party/blink/web_tests/svg/hittest/update-rect-expected.txt
@@ -24,4 +24,3 @@
 (712, 316)
 (610, 425)
 (739, 394)
-
diff --git a/third_party/blink/web_tests/svg/in-html/nested-scripts-expected.txt b/third_party/blink/web_tests/svg/in-html/nested-scripts-expected.txt
index d27d61c7..a0914c7 100644
--- a/third_party/blink/web_tests/svg/in-html/nested-scripts-expected.txt
+++ b/third_party/blink/web_tests/svg/in-html/nested-scripts-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/in-html/real-script-write-expected.txt b/third_party/blink/web_tests/svg/in-html/real-script-write-expected.txt
index 2307b5c..f972294c 100644
--- a/third_party/blink/web_tests/svg/in-html/real-script-write-expected.txt
+++ b/third_party/blink/web_tests/svg/in-html/real-script-write-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/in-html/script-expected.txt b/third_party/blink/web_tests/svg/in-html/script-expected.txt
index d1283b8..2216498 100644
--- a/third_party/blink/web_tests/svg/in-html/script-expected.txt
+++ b/third_party/blink/web_tests/svg/in-html/script-expected.txt
@@ -3,4 +3,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/in-html/script-external-expected.txt b/third_party/blink/web_tests/svg/in-html/script-external-expected.txt
index 07ed7d4..73d4951 100644
--- a/third_party/blink/web_tests/svg/in-html/script-external-expected.txt
+++ b/third_party/blink/web_tests/svg/in-html/script-external-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/in-html/script-nested-expected.txt b/third_party/blink/web_tests/svg/in-html/script-nested-expected.txt
index e412ec7..e6367245 100644
--- a/third_party/blink/web_tests/svg/in-html/script-nested-expected.txt
+++ b/third_party/blink/web_tests/svg/in-html/script-nested-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/in-html/script-write-expected.txt b/third_party/blink/web_tests/svg/in-html/script-write-expected.txt
index 52d14401..5b50a74 100644
--- a/third_party/blink/web_tests/svg/in-html/script-write-expected.txt
+++ b/third_party/blink/web_tests/svg/in-html/script-write-expected.txt
@@ -4,4 +4,3 @@
 
 TEST COMPLETE
 
-
diff --git a/third_party/blink/web_tests/svg/text/caret-in-svg-text-expected.txt b/third_party/blink/web_tests/svg/text/caret-in-svg-text-expected.txt
new file mode 100644
index 0000000..e89c199
--- /dev/null
+++ b/third_party/blink/web_tests/svg/text/caret-in-svg-text-expected.txt
@@ -0,0 +1,7 @@
+Sheriff Woody
+שדגש
+
+Failure. Was: 20,15,0,19, expected: 20,566,0,18
+Failure. Was: 113,15,0,19, expected: 114,566,0,18
+Failure. Was: 20,35,0,19, expected: 58,546,0,18
+Failure. Was: 55,35,0,19, expected: 20,546,0,18
diff --git a/third_party/blink/web_tests/svg/text/clear-floats-crash-expected.txt b/third_party/blink/web_tests/svg/text/clear-floats-crash-expected.txt
index e2b0929..f333c076 100644
--- a/third_party/blink/web_tests/svg/text/clear-floats-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/text/clear-floats-crash-expected.txt
@@ -1,3 +1,2 @@
 This test is to ensure that we do not crash when clearing floats during SVG load.
 PASS: Did not crash while rendering the SVG.
-
diff --git a/third_party/blink/web_tests/svg/text/highcharts-assertion-expected.txt b/third_party/blink/web_tests/svg/text/highcharts-assertion-expected.txt
index 69cfc5a9..7ef22e9 100644
--- a/third_party/blink/web_tests/svg/text/highcharts-assertion-expected.txt
+++ b/third_party/blink/web_tests/svg/text/highcharts-assertion-expected.txt
@@ -1,2 +1 @@
 PASS
-
diff --git a/third_party/blink/web_tests/svg/text/invalid-glyph-crash-expected.txt b/third_party/blink/web_tests/svg/text/invalid-glyph-crash-expected.txt
index 71624947..0afa793 100644
--- a/third_party/blink/web_tests/svg/text/invalid-glyph-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/text/invalid-glyph-crash-expected.txt
@@ -1,4 +1,3 @@
 This test passes if the text says PASS followed by a U+180E (Mongolian vowel separator).
 
 PASS᠎
-
diff --git a/third_party/blink/web_tests/svg/text/nonconformant-content-crash-1-expected.txt b/third_party/blink/web_tests/svg/text/nonconformant-content-crash-1-expected.txt
index 69cfc5a9..7ef22e9 100644
--- a/third_party/blink/web_tests/svg/text/nonconformant-content-crash-1-expected.txt
+++ b/third_party/blink/web_tests/svg/text/nonconformant-content-crash-1-expected.txt
@@ -1,2 +1 @@
 PASS
-
diff --git a/third_party/blink/web_tests/svg/text/nonconformant-content-crash-2-expected.txt b/third_party/blink/web_tests/svg/text/nonconformant-content-crash-2-expected.txt
index 69cfc5a9..7ef22e9 100644
--- a/third_party/blink/web_tests/svg/text/nonconformant-content-crash-2-expected.txt
+++ b/third_party/blink/web_tests/svg/text/nonconformant-content-crash-2-expected.txt
@@ -1,2 +1 @@
 PASS
-
diff --git a/third_party/blink/web_tests/svg/text/selection-style-within-mask-crash-expected.txt b/third_party/blink/web_tests/svg/text/selection-style-within-mask-crash-expected.txt
index 69cfc5a9..7ef22e9 100644
--- a/third_party/blink/web_tests/svg/text/selection-style-within-mask-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/text/selection-style-within-mask-crash-expected.txt
@@ -1,2 +1 @@
 PASS
-
diff --git a/third_party/blink/web_tests/svg/text/svg-zoom-large-value-expected.txt b/third_party/blink/web_tests/svg/text/svg-zoom-large-value-expected.txt
index 69cfc5a9..7ef22e9 100644
--- a/third_party/blink/web_tests/svg/text/svg-zoom-large-value-expected.txt
+++ b/third_party/blink/web_tests/svg/text/svg-zoom-large-value-expected.txt
@@ -1,2 +1 @@
 PASS
-
diff --git a/third_party/blink/web_tests/svg/text/text-block-child-crash-expected.txt b/third_party/blink/web_tests/svg/text/text-block-child-crash-expected.txt
index 8a28a0d..c6f20fc 100644
--- a/third_party/blink/web_tests/svg/text/text-block-child-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/text/text-block-child-crash-expected.txt
@@ -1,2 +1 @@
 Test passes if it does not crash. 
-
diff --git a/third_party/blink/web_tests/svg/text/text-font-invalid-expected.txt b/third_party/blink/web_tests/svg/text/text-font-invalid-expected.txt
index 8c848d6..b4d96837 100644
--- a/third_party/blink/web_tests/svg/text/text-font-invalid-expected.txt
+++ b/third_party/blink/web_tests/svg/text/text-font-invalid-expected.txt
@@ -1,3 +1,2 @@
 This test is to ensure that we do not crash when loading a SVG image without a valid font-family
 PASS: Did not crash when rendering the SVG image.
-
diff --git a/third_party/blink/web_tests/svg/text/text-font-uri-invalid-expected.txt b/third_party/blink/web_tests/svg/text/text-font-uri-invalid-expected.txt
index 5f7dc29..92ea316b 100644
--- a/third_party/blink/web_tests/svg/text/text-font-uri-invalid-expected.txt
+++ b/third_party/blink/web_tests/svg/text/text-font-uri-invalid-expected.txt
@@ -1,3 +1,2 @@
 This test is to ensure that we do not crash when loading a SVG image with an invalid font-face-uri
 PASS: Did not crash when rendering the SVG image.
-
diff --git a/third_party/blink/web_tests/svg/text/text-style-recalc-crash-expected.txt b/third_party/blink/web_tests/svg/text/text-style-recalc-crash-expected.txt
index 202c556..293e7aa 100644
--- a/third_party/blink/web_tests/svg/text/text-style-recalc-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/text/text-style-recalc-crash-expected.txt
@@ -1,3 +1,2 @@
 Test passes if it does not crash. 
 PASS
-
diff --git a/third_party/blink/web_tests/svg/text/unpaired-surrogate-crash-expected.txt b/third_party/blink/web_tests/svg/text/unpaired-surrogate-crash-expected.txt
index 729cc9fc..29661ed 100644
--- a/third_party/blink/web_tests/svg/text/unpaired-surrogate-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/text/unpaired-surrogate-crash-expected.txt
@@ -1,2 +1 @@
 PASSí§¨
-
diff --git a/third_party/blink/web_tests/svg/text/unpaired-surrogate-with-trailing-char-crash-expected.txt b/third_party/blink/web_tests/svg/text/unpaired-surrogate-with-trailing-char-crash-expected.txt
index 61e7f1b..4c62dea 100644
--- a/third_party/blink/web_tests/svg/text/unpaired-surrogate-with-trailing-char-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/text/unpaired-surrogate-with-trailing-char-crash-expected.txt
@@ -1,4 +1,3 @@
 You should see PASS followed by an unpaired surrogate (missing/replacement glyph) and a Arabic Alef.
 
 PASSí ®Ø§
-
diff --git a/third_party/blink/web_tests/svg/transforms/transform-origin-presentation-attribute-expected.txt b/third_party/blink/web_tests/svg/transforms/transform-origin-presentation-attribute-expected.txt
index 0dbb16f..6801653 100644
--- a/third_party/blink/web_tests/svg/transforms/transform-origin-presentation-attribute-expected.txt
+++ b/third_party/blink/web_tests/svg/transforms/transform-origin-presentation-attribute-expected.txt
@@ -5,4 +5,3 @@
 PASS rect1 transformOrigin, expected "50px 100px" actual "50px 100px"
 PASS rect2 transformOrigin, expected "0px 0px" actual "0px 0px"
 
-
diff --git a/third_party/blink/web_tests/svg/zoom/large-zoom-crash-expected.txt b/third_party/blink/web_tests/svg/zoom/large-zoom-crash-expected.txt
index 73409ae..c2541f4 100644
--- a/third_party/blink/web_tests/svg/zoom/large-zoom-crash-expected.txt
+++ b/third_party/blink/web_tests/svg/zoom/large-zoom-crash-expected.txt
@@ -1,2 +1 @@
 PASS if no crash.
-
diff --git a/third_party/blink/web_tests/svg/zoom/page/zoom-zoom-coords-expected.txt b/third_party/blink/web_tests/svg/zoom/page/zoom-zoom-coords-expected.txt
index ee156cd7..e40d8d1 100644
--- a/third_party/blink/web_tests/svg/zoom/page/zoom-zoom-coords-expected.txt
+++ b/third_party/blink/web_tests/svg/zoom/page/zoom-zoom-coords-expected.txt
@@ -2,7 +2,6 @@
 Test
 Test
 
-
 This test checks getBoundingClientRect() on zoomed HTML and SVG elements
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
@@ -62,9 +61,9 @@
 PASS image1.bottom is 275.00
 PASS text1.left is 100.00
 PASS text1.top is 282.66
-PASS text1.width is 47.98
+FAIL text1.width should be 47.98. Was 49.1875.
 PASS text1.height is 6.16
-PASS text1.right is 147.98
+FAIL text1.right should be 147.98. Was 149.1875.
 PASS text1.bottom is 288.82
 
 
@@ -88,10 +87,10 @@
 PASS image2.bottom is 125.00
 PASS text2.left is 175.00
 PASS text2.top is 132.66
-PASS text2.width is 47.98
-PASS text2.height is 6.02
-PASS text2.right is 222.98
-PASS text2.bottom is 138.70
+FAIL text2.width should be 47.98. Was 47.85938262939453.
+FAIL text2.height should be 6.02. Was 5.921872138977051.
+FAIL text2.right should be 222.98. Was 222.85938262939453.
+FAIL text2.bottom should be 138.7. Was 138.58593463897705.
 
 
 PASS svg3.left is 900.00
@@ -114,9 +113,9 @@
 PASS image3.bottom is 550.00
 PASS text3.left is 1100.00
 PASS text3.top is 565.33
-PASS text3.width is 95.97
+FAIL text3.width should be 95.97. Was 98.3750228881836.
 PASS text3.height is 12.31
-PASS text3.right is 1195.97
+FAIL text3.right should be 1195.97. Was 1198.3750228881836.
 PASS text3.bottom is 577.64
 
 
diff --git a/third_party/blink/web_tests/svg/zoom/text/lowdpi-zoom-text-expected.txt b/third_party/blink/web_tests/svg/zoom/text/lowdpi-zoom-text-expected.txt
index a43142f..170258d 100644
--- a/third_party/blink/web_tests/svg/zoom/text/lowdpi-zoom-text-expected.txt
+++ b/third_party/blink/web_tests/svg/zoom/text/lowdpi-zoom-text-expected.txt
@@ -6,4 +6,3 @@
 PASS
 PASS
 PASS
-
diff --git a/third_party/blink/web_tests/virtual/android/fullscreen/exit-full-screen-iframe-expected.txt b/third_party/blink/web_tests/virtual/android/fullscreen/exit-full-screen-iframe-expected.txt
new file mode 100644
index 0000000..9e9d41e2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/android/fullscreen/exit-full-screen-iframe-expected.txt
@@ -0,0 +1,10 @@
+Test for bug 90327: webkitCancelFullScreen for iframes
+
+To test manually, click the "Go full screen" button - the page should enter full screen mode and immediately exit again, without crashing.
+
+EVENT(webkitfullscreenchange)
+TEST(document.getElementById('frame').contentDocument.webkitIsFullScreen==true) OK
+EVENT(webkitfullscreenchange)
+TEST(document.getElementById('frame').contentDocument.webkitIsFullScreen==false) OK
+END OF TEST
+
diff --git a/third_party/blink/web_tests/virtual/android/fullscreen/full-screen-request-not-supported-expected.txt b/third_party/blink/web_tests/virtual/android/fullscreen/full-screen-request-not-supported-expected.txt
new file mode 100644
index 0000000..f30901c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/android/fullscreen/full-screen-request-not-supported-expected.txt
@@ -0,0 +1,4 @@
+EVENT(webkitfullscreenerror)
+END OF TEST
+
+Tests for the fullscreenSupported setting which will be set to false in those platforms where fullscreen is not supported.
diff --git a/third_party/blink/web_tests/virtual/android/fullscreen/non-ancestor-iframe-expected.txt b/third_party/blink/web_tests/virtual/android/fullscreen/non-ancestor-iframe-expected.txt
new file mode 100644
index 0000000..1a34301
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/android/fullscreen/non-ancestor-iframe-expected.txt
@@ -0,0 +1,6 @@
+This tests that full screen mode will not exit when a non-ancestor iframe is loaded in the page. Click enter full screen to start test.
+EVENT(webkitfullscreenchange)
+EVENT(load)
+EXPECTED (document.webkitIsFullScreen == 'true') OK
+END OF TEST
+
diff --git a/third_party/blink/web_tests/virtual/android/fullscreen/video-controls-override-expected.txt b/third_party/blink/web_tests/virtual/android/fullscreen/video-controls-override-expected.txt
new file mode 100644
index 0000000..26348bb
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/android/fullscreen/video-controls-override-expected.txt
@@ -0,0 +1,12 @@
+This tests that the video element's "controls" attribute is overridden in full screen mode, and that the controls are correctly hidden upon exiting full screen. Press any key to continue.
+
+EVENT(webkitfullscreenchange)
+EXPECTED (shadowRoot = internals.shadowRoot(video) != 'null') OK
+EXPECTED (panel = mediaControlsElement(shadowRoot.firstChild, '-webkit-media-controls-panel') != 'null') OK
+EXPECTED (internals.shadowPseudoId(panel) == '-webkit-media-controls-panel') OK
+EXPECTED (document.defaultView.getComputedStyle(panel)['display'] != 'none') OK
+EXPECTED (document.defaultView.getComputedStyle(panel)['height'] >= '20px') OK
+EVENT(webkitfullscreenchange)
+EXPECTED (document.defaultView.getComputedStyle(panel)['display'] == 'none') OK
+END OF TEST
+
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/12-55-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/12-55-expected.txt
new file mode 100644
index 0000000..f3c502a8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/12-55-expected.txt
@@ -0,0 +1,15 @@
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/182-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/182-expected.txt
new file mode 100644
index 0000000..f3c502a8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/182-expected.txt
@@ -0,0 +1,15 @@
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/2-dht-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/2-dht-expected.txt
new file mode 100644
index 0000000..f3c502a8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/2-dht-expected.txt
@@ -0,0 +1,15 @@
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/23-55-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/23-55-expected.txt
new file mode 100644
index 0000000..f3c502a8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/23-55-expected.txt
@@ -0,0 +1,15 @@
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/55-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/55-expected.txt
new file mode 100644
index 0000000..f3c502a8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/55-expected.txt
@@ -0,0 +1,15 @@
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.txt
new file mode 100644
index 0000000..b57075e
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.txt
@@ -0,0 +1,5 @@
+ 
+
+ 
+
+ 
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.txt
new file mode 100644
index 0000000..b57075e
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.txt
@@ -0,0 +1,5 @@
+ 
+
+ 
+
+ 
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.txt
new file mode 100644
index 0000000..ee73701
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.txt
@@ -0,0 +1,29 @@
+GRAYSCALE
+
+ 
+
+NONE
+
+ 
+
+BRIGHTNESS
+
+ 
+
+SATURATION
+
+ 
+
+SEPIA
+
+ 
+
+BLUR
+
+ 
+
+OPACITY
+
+ 
+
+BLUR+HUE
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/color-profile-image-pseudo-content-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/color-profile-image-pseudo-content-expected.txt
new file mode 100644
index 0000000..a0a2ef28
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/color-profile-image-pseudo-content-expected.txt
@@ -0,0 +1 @@
+ pseudo-content image replacement
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/extra-image-in-image-document-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/extra-image-in-image-document-expected.txt
new file mode 100644
index 0000000..89cfbe0
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/extra-image-in-image-document-expected.txt
@@ -0,0 +1,3 @@
+Test for bug 38752: Images cannot be dynamically added to image documents.
+
+PASS
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/image-empty-data-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/image-empty-data-expected.txt
new file mode 100644
index 0000000..96077e4
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/image-empty-data-expected.txt
@@ -0,0 +1 @@
+This is test for an image with no data. No crash means test PASS.
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/image-invalid-data-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/image-invalid-data-expected.txt
new file mode 100644
index 0000000..44a1273c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/image-invalid-data-expected.txt
@@ -0,0 +1 @@
+This is test for an image with invalid data. No crash means test PASS.
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/imagemap-nested-area-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/imagemap-nested-area-expected.txt
new file mode 100644
index 0000000..9c4f8e5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/imagemap-nested-area-expected.txt
@@ -0,0 +1,2 @@
+This tests that pressing Tab focuses areas in an image map even if they're not direct children.
+Test Passed
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.txt
new file mode 100644
index 0000000..9766b516
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.txt
@@ -0,0 +1 @@
+The red sector of the image should be at the 12 o'clock position.
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/percent-height-image-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/percent-height-image-expected.txt
new file mode 100644
index 0000000..3b3b411
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/percent-height-image-expected.txt
@@ -0,0 +1,3 @@
+Tests that an image with height 100% inside a floated div keeps its intrinsic height.
+See Bug: http://bugs.webkit.org/show_bug.cgi?id=45439
+PASS
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/png-with-color-profile-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/png-with-color-profile-expected.txt
new file mode 100644
index 0000000..9766b516
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/png-with-color-profile-expected.txt
@@ -0,0 +1 @@
+The red sector of the image should be at the 12 o'clock position.
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/text-content-crash-2-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/text-content-crash-2-expected.txt
new file mode 100644
index 0000000..9de1307
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/text-content-crash-2-expected.txt
@@ -0,0 +1,3 @@
+Test for http://bugs.webkit.org/show_bug.cgi?id=15008 ASSERTION FAILED: !firstLineBox() == !lastLineBox() setting content on image.
+
+No crash means SUCCESS.
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/text-content-crash-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/text-content-crash-expected.txt
new file mode 100644
index 0000000..4c2850f
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/text-content-crash-expected.txt
@@ -0,0 +1,3 @@
+Test for http://bugs.webkit.org/show_bug.cgi?id=13242 REGRESSION: Repro crash when specifying the content property for an image.
+
+No crash means SUCCESS.
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/viewport-in-standalone-image-document-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/viewport-in-standalone-image-document-expected.txt
new file mode 100644
index 0000000..797049a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/viewport-in-standalone-image-document-expected.txt
@@ -0,0 +1,3 @@
+This tests that a standalone image document has viewport settings.
+
+PASS
diff --git a/third_party/blink/web_tests/virtual/exotic-color-space/images/zoomed-img-size-expected.txt b/third_party/blink/web_tests/virtual/exotic-color-space/images/zoomed-img-size-expected.txt
new file mode 100644
index 0000000..872e920
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/exotic-color-space/images/zoomed-img-size-expected.txt
@@ -0,0 +1,31 @@
+Ideally, all ovals below should be reported as having width=37, height=33. Currently rounding prevents us from doing this.
+
+Zoom 1% PASS: 100x100 close enough to 37x33
+
+Zoom 2% PASS: 50x50 close enough to 37x33
+
+Zoom 3% PASS: 33x33 close enough to 37x33
+
+Zoom 4% PASS: 25x25 close enough to 37x33
+
+Zoom 5% PASS: 40x40 close enough to 37x33
+
+Zoom 30% PASS: 36x33 close enough to 37x33
+
+Zoom 33% PASS: 36x33 close enough to 37x33
+
+Zoom 50% PASS: 38x34 close enough to 37x33
+
+Zoom 70% PASS: 37x32 close enough to 37x33
+
+Zoom 100% PASS: 37x33
+
+Zoom 111% PASS: 37x33
+
+Zoom 150% PASS: 37x33
+
+Zoom 333% PASS: 37x33
+
+Zoom 400% PASS: 37x33
+
+Zoom 1234% PASS: 37x33
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/12-55-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/12-55-expected.txt
new file mode 100644
index 0000000..f3c502a8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/12-55-expected.txt
@@ -0,0 +1,15 @@
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/182-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/182-expected.txt
new file mode 100644
index 0000000..f3c502a8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/182-expected.txt
@@ -0,0 +1,15 @@
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/2-dht-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/2-dht-expected.txt
new file mode 100644
index 0000000..f3c502a8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/2-dht-expected.txt
@@ -0,0 +1,15 @@
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/23-55-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/23-55-expected.txt
new file mode 100644
index 0000000..f3c502a8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/23-55-expected.txt
@@ -0,0 +1,15 @@
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/55-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/55-expected.txt
new file mode 100644
index 0000000..f3c502a8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/55-expected.txt
@@ -0,0 +1,15 @@
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
+
+       
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-expected.txt
new file mode 100644
index 0000000..b57075e
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-expected.txt
@@ -0,0 +1,5 @@
+ 
+
+ 
+
+ 
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-png-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-png-expected.txt
new file mode 100644
index 0000000..b57075e
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-png-expected.txt
@@ -0,0 +1,5 @@
+ 
+
+ 
+
+ 
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.txt
new file mode 100644
index 0000000..ee73701
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.txt
@@ -0,0 +1,29 @@
+GRAYSCALE
+
+ 
+
+NONE
+
+ 
+
+BRIGHTNESS
+
+ 
+
+SATURATION
+
+ 
+
+SEPIA
+
+ 
+
+BLUR
+
+ 
+
+OPACITY
+
+ 
+
+BLUR+HUE
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/color-profile-image-pseudo-content-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/color-profile-image-pseudo-content-expected.txt
new file mode 100644
index 0000000..a0a2ef28
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/color-profile-image-pseudo-content-expected.txt
@@ -0,0 +1 @@
+ pseudo-content image replacement
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/extra-image-in-image-document-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/extra-image-in-image-document-expected.txt
new file mode 100644
index 0000000..89cfbe0
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/extra-image-in-image-document-expected.txt
@@ -0,0 +1,3 @@
+Test for bug 38752: Images cannot be dynamically added to image documents.
+
+PASS
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/image-empty-data-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/image-empty-data-expected.txt
new file mode 100644
index 0000000..96077e4
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/image-empty-data-expected.txt
@@ -0,0 +1 @@
+This is test for an image with no data. No crash means test PASS.
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/image-invalid-data-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/image-invalid-data-expected.txt
new file mode 100644
index 0000000..44a1273c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/image-invalid-data-expected.txt
@@ -0,0 +1 @@
+This is test for an image with invalid data. No crash means test PASS.
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/imagemap-nested-area-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/imagemap-nested-area-expected.txt
new file mode 100644
index 0000000..9c4f8e5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/imagemap-nested-area-expected.txt
@@ -0,0 +1,2 @@
+This tests that pressing Tab focuses areas in an image map even if they're not direct children.
+Test Passed
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/jpeg-with-color-profile-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/jpeg-with-color-profile-expected.txt
new file mode 100644
index 0000000..9766b516
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/jpeg-with-color-profile-expected.txt
@@ -0,0 +1 @@
+The red sector of the image should be at the 12 o'clock position.
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/percent-height-image-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/percent-height-image-expected.txt
new file mode 100644
index 0000000..3b3b411
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/percent-height-image-expected.txt
@@ -0,0 +1,3 @@
+Tests that an image with height 100% inside a floated div keeps its intrinsic height.
+See Bug: http://bugs.webkit.org/show_bug.cgi?id=45439
+PASS
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/png-with-color-profile-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/png-with-color-profile-expected.txt
new file mode 100644
index 0000000..9766b516
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/png-with-color-profile-expected.txt
@@ -0,0 +1 @@
+The red sector of the image should be at the 12 o'clock position.
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/text-content-crash-2-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/text-content-crash-2-expected.txt
new file mode 100644
index 0000000..9de1307
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/text-content-crash-2-expected.txt
@@ -0,0 +1,3 @@
+Test for http://bugs.webkit.org/show_bug.cgi?id=15008 ASSERTION FAILED: !firstLineBox() == !lastLineBox() setting content on image.
+
+No crash means SUCCESS.
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/text-content-crash-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/text-content-crash-expected.txt
new file mode 100644
index 0000000..4c2850f
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/text-content-crash-expected.txt
@@ -0,0 +1,3 @@
+Test for http://bugs.webkit.org/show_bug.cgi?id=13242 REGRESSION: Repro crash when specifying the content property for an image.
+
+No crash means SUCCESS.
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/viewport-in-standalone-image-document-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/viewport-in-standalone-image-document-expected.txt
new file mode 100644
index 0000000..797049a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/viewport-in-standalone-image-document-expected.txt
@@ -0,0 +1,3 @@
+This tests that a standalone image document has viewport settings.
+
+PASS
diff --git a/third_party/blink/web_tests/virtual/gpu-rasterization/images/zoomed-img-size-expected.txt b/third_party/blink/web_tests/virtual/gpu-rasterization/images/zoomed-img-size-expected.txt
new file mode 100644
index 0000000..872e920
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu-rasterization/images/zoomed-img-size-expected.txt
@@ -0,0 +1,31 @@
+Ideally, all ovals below should be reported as having width=37, height=33. Currently rounding prevents us from doing this.
+
+Zoom 1% PASS: 100x100 close enough to 37x33
+
+Zoom 2% PASS: 50x50 close enough to 37x33
+
+Zoom 3% PASS: 33x33 close enough to 37x33
+
+Zoom 4% PASS: 25x25 close enough to 37x33
+
+Zoom 5% PASS: 40x40 close enough to 37x33
+
+Zoom 30% PASS: 36x33 close enough to 37x33
+
+Zoom 33% PASS: 36x33 close enough to 37x33
+
+Zoom 50% PASS: 38x34 close enough to 37x33
+
+Zoom 70% PASS: 37x32 close enough to 37x33
+
+Zoom 100% PASS: 37x33
+
+Zoom 111% PASS: 37x33
+
+Zoom 150% PASS: 37x33
+
+Zoom 333% PASS: 37x33
+
+Zoom 400% PASS: 37x33
+
+Zoom 1234% PASS: 37x33
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/OffscreenCanvas-2d-imageData-in-worker-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/OffscreenCanvas-2d-imageData-in-worker-expected.txt
new file mode 100644
index 0000000..11416a98
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/OffscreenCanvas-2d-imageData-in-worker-expected.txt
@@ -0,0 +1,9 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS createImageData(sx, sy) creates blank image correctly
+PASS createImageData(ImageData) creates blank image correctly
+PASS getImageData(sx, sy, sw, sh) is successful.
+PASS putImageData(ImageData, dx, dy) is successful.
+PASS putImageData(ImageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) is successful.
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-ImageBitmap-structured-clone-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-ImageBitmap-structured-clone-expected.txt
new file mode 100644
index 0000000..72454de
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-ImageBitmap-structured-clone-expected.txt
@@ -0,0 +1,25 @@
+Tests that ImageBitmap supports structured clone and that the pixel data survives the trip between main <--> worker
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS bitmapWidth is imageWidth1
+PASS bitmapHeight is imageHeight1
+PASS bitmapWidth is imageWidth1
+PASS bitmapHeight is imageHeight1
+PASS bitmapWidth is imageWidth1
+PASS bitmapHeight is imageHeight1
+PASS The ImageBitmap pixel data survives the round trip
+PASS bitmapWidth is 0
+PASS bitmapHeight is 0
+PASS bitmapWidth is imageWidth1
+PASS bitmapHeight is imageHeight1
+PASS The ImageBitmap pixel data survives the round trip
+PASS bitmapWidth is imageWidth2
+PASS bitmapHeight is imageHeight2
+PASS bitmapWidth is imageWidth2
+PASS bitmapHeight is imageHeight2
+PASS The ImageBitmap pixel data survives the round trip
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-ImageBitmap-transferable-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-ImageBitmap-transferable-expected.txt
new file mode 100644
index 0000000..333b2287
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-ImageBitmap-transferable-expected.txt
@@ -0,0 +1,40 @@
+Tests that ImageBitmap is transferable and that the pixel data survives the trip, as well as createImageBitmap(ImageBitmap) works on worker thread
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS bitmapWidth is imageWidth
+PASS bitmapHeight is imageHeight
+PASS bitmapWidth is 0
+PASS bitmapHeight is 0
+PASS Apply structured cloning to a neutered ImageBitmap should throw an exception: DataCloneError: Failed to execute 'postMessage' on 'Worker': An ImageBitmap is detached and could not be cloned.
+PASS createImageBitmap from a neutered ImageBitmap was rejected
+PASS bitmapWidth is imageWidth
+PASS bitmapHeight is imageHeight
+PASS newImage.data[0] is within 5 of image.data[0]
+PASS newImage.data[1] is within 5 of image.data[1]
+PASS newImage.data[2] is within 5 of image.data[2]
+PASS newImage.data[3] is image.data[3]
+PASS newImage.data[4] is within 5 of image.data[4]
+PASS newImage.data[5] is within 5 of image.data[5]
+PASS newImage.data[6] is within 5 of image.data[6]
+PASS newImage.data[7] is image.data[7]
+PASS newImage.data[8] is within 5 of image.data[8]
+PASS newImage.data[9] is within 5 of image.data[9]
+PASS newImage.data[10] is within 5 of image.data[10]
+PASS newImage.data[11] is image.data[11]
+PASS newImage.data[12] is within 5 of image.data[12]
+PASS newImage.data[13] is within 5 of image.data[13]
+PASS newImage.data[14] is within 5 of image.data[14]
+PASS newImage.data[15] is image.data[15]
+PASS newImage.data[16] is within 5 of image.data[16]
+PASS newImage.data[17] is within 5 of image.data[17]
+PASS newImage.data[18] is within 5 of image.data[18]
+PASS newImage.data[19] is image.data[19]
+PASS newImage.data[20] is within 5 of image.data[20]
+PASS newImage.data[21] is within 5 of image.data[21]
+PASS newImage.data[22] is within 5 of image.data[22]
+PASS newImage.data[23] is image.data[23]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-ImageData-neutered-source-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-ImageData-neutered-source-expected.txt
new file mode 100644
index 0000000..d5a4934
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-ImageData-neutered-source-expected.txt
@@ -0,0 +1,24 @@
+Tests how putImageData and createImageBitmap would react when the source data is neutered
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS len is 4
+PASS image.data[0] is 255
+PASS image.data[1] is 0
+PASS image.data[2] is 0
+PASS image.data[3] is 255
+PASS newImage.data[0] is 255
+PASS newImage.data[1] is 0
+PASS newImage.data[2] is 0
+PASS newImage.data[3] is 255
+PASS len is 0
+PASS image.data[0] is undefined
+PASS image.data[1] is undefined
+PASS image.data[2] is undefined
+PASS image.data[3] is undefined
+PASS context.putImageData(image, 0, 0) threw exception InvalidStateError: Failed to execute 'putImageData' on 'CanvasRenderingContext2D': The source data has been neutered..
+PASS Promise rejected as expected: InvalidStateError: The source data has been detached.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-createImageBitmap-data-preserves-alpha-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-createImageBitmap-data-preserves-alpha-expected.txt
new file mode 100644
index 0000000..0231c47
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-createImageBitmap-data-preserves-alpha-expected.txt
@@ -0,0 +1,12 @@
+Tests that non-opaque pixels are faithfully preserved in conversions between ImageData and ImageBitmap
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS newImageData.data[0] is within 5 of imageData.data[0]
+PASS newImageData.data[1] is within 5 of imageData.data[1]
+PASS newImageData.data[2] is within 5 of imageData.data[2]
+PASS newImageData.data[3] is imageData.data[3]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-createImageBitmap-webgl-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-createImageBitmap-webgl-expected.txt
new file mode 100644
index 0000000..8979be3af
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-createImageBitmap-webgl-expected.txt
@@ -0,0 +1,22 @@
+Check the imageBitmap of webgl.
+PASS d[0] == 0 is true
+PASS d[1] == 255 is true
+PASS d[2] == 0 is true
+PASS d[3] == 255 is true
+PASS d[0] == 0 is true
+PASS d[1] == 255 is true
+PASS d[2] == 0 is true
+PASS d[3] == 255 is true
+Check the imageBitmap of webgl in the next frame. drawingBuffer is discarded.
+PASS d[0] == 0 is true
+PASS d[1] == 0 is true
+PASS d[2] == 0 is true
+PASS d[3] == 0 is true
+PASS d[0] == 0 is true
+PASS d[1] == 0 is true
+PASS d[2] == 0 is true
+PASS d[3] == 0 is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-hides-fallback-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-hides-fallback-expected.txt
new file mode 100644
index 0000000..3687cd0c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-hides-fallback-expected.txt
@@ -0,0 +1,3 @@
+The DOM part of this test succeeded. The canvas element had at least one child, indicating that we are hiding text by not rendering it, but we are creating DOM elements as expected.
+
+There should be no text below this, because the text is inside a canvas element and JavaScript is enabled.
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-lost-gpu-context-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-lost-gpu-context-expected.txt
index a8a1b43..25473ac2 100644
--- a/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-lost-gpu-context-expected.txt
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-lost-gpu-context-expected.txt
@@ -17,4 +17,3 @@
 PASS Context restored event dispatched after context lost.
 PASS contextLostTest is false
 PASS ctx.isContextLost() is false
-
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-normalize-string-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-normalize-string-expected.txt
new file mode 100644
index 0000000..172fcd0
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-normalize-string-expected.txt
@@ -0,0 +1,3 @@
+On success, two same text string with equal width will be rendered.
+
+TEST PASSED
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-textMetrics-width-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-textMetrics-width-expected.txt
new file mode 100644
index 0000000..0b89eea
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/canvas-textMetrics-width-expected.txt
@@ -0,0 +1 @@
+On success, the red text "Hello World" should be tightly contained inside the two thin red lines.
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/script-inside-canvas-fallback-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/script-inside-canvas-fallback-expected.txt
new file mode 100644
index 0000000..a1455c5c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/script-inside-canvas-fallback-expected.txt
@@ -0,0 +1 @@
+This text was set by a script inside a canvas element. Such scripts run even though the content is not displayed.
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/setWidthResetAfterForcedRender-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/setWidthResetAfterForcedRender-expected.txt
new file mode 100644
index 0000000..ebd8327
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/setWidthResetAfterForcedRender-expected.txt
@@ -0,0 +1,5 @@
+BUG ID: Bugzilla bug 43341 Setting canvas width after canvas already rendered resets canvas data appropriately, but doesn't repaint immediately.
+
+TEST PASS: The canvas should go blank due to setting on the canvas width.
+
+Actual output: (blank canvas)
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/shadow-offset-1-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/shadow-offset-1-expected.txt
new file mode 100644
index 0000000..719e072
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/shadow-offset-1-expected.txt
@@ -0,0 +1 @@
+There should be no red pixels below.
diff --git a/third_party/blink/web_tests/virtual/gpu/fast/canvas/toDataURL-alpha-expected.txt b/third_party/blink/web_tests/virtual/gpu/fast/canvas/toDataURL-alpha-expected.txt
new file mode 100644
index 0000000..5efbfe26
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/gpu/fast/canvas/toDataURL-alpha-expected.txt
@@ -0,0 +1 @@
+The test passes if both boxes below have the same color.
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/add-float-back-to-anonymous-block-previous-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/add-float-back-to-anonymous-block-previous-expected.txt
new file mode 100644
index 0000000..3ebcc3c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/add-float-back-to-anonymous-block-previous-expected.txt
@@ -0,0 +1,5 @@
+X 
+X
+PASS
+
+crbug.com/585064: Two contiguous anonymous blocks with inline content should be merged together. There should be a single green rectangle below.
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/assert-when-moving-float-2-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/assert-when-moving-float-2-expected.txt
new file mode 100644
index 0000000..b750b163
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/assert-when-moving-float-2-expected.txt
@@ -0,0 +1,3 @@
+ 
+foo
+Pass if no assert in debug.
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/assert-when-moving-float-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/assert-when-moving-float-expected.txt
new file mode 100644
index 0000000..deb8677
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/assert-when-moving-float-expected.txt
@@ -0,0 +1,3 @@
+ 
+foo
+crbug.com/641334: Passes if it does not assert.
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/block-with-negative-margin-clears-float-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/block-with-negative-margin-clears-float-expected.txt
new file mode 100644
index 0000000..c37a72d8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/block-with-negative-margin-clears-float-expected.txt
@@ -0,0 +1,3 @@
+crbug.com/591243: Clear floats when we have negative margin and are separated from the float by a div that doesn't track it.
+
+PASS
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/float-not-removed-crash-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/float-not-removed-crash-expected.txt
new file mode 100644
index 0000000..c6f20fc
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/float-not-removed-crash-expected.txt
@@ -0,0 +1 @@
+Test passes if it does not crash. 
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/float-not-removed-from-pre-block-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/float-not-removed-from-pre-block-expected.txt
new file mode 100644
index 0000000..c5da3398
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/float-not-removed-from-pre-block-expected.txt
@@ -0,0 +1,5 @@
+Bug 101970: Heap-use-after-free in WebCore::LayoutLayerModelObject::hasSelfPaintingLayer
+Test passes if it does not crash.
+
+  
+ 
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/floats-do-not-overhang-from-block-formatting-context-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/floats-do-not-overhang-from-block-formatting-context-expected.txt
new file mode 100644
index 0000000..d19987f
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/floats-do-not-overhang-from-block-formatting-context-expected.txt
@@ -0,0 +1,10 @@
+http://www.w3.org/TR/CSS2/visuren.html#float-position: "References to [the elements] in the [rules that govern the behaviour of floats] refer only to other elements in the same block formatting context as the float."
+
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
+PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/fieldset/fieldset-crash-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/intruding-float-not-removed-writing-mode-expected.txt
similarity index 100%
copy from third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/fieldset/fieldset-crash-expected.txt
copy to third_party/blink/web_tests/virtual/layout_ng/fast/block/float/intruding-float-not-removed-writing-mode-expected.txt
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/trailing-float-layout-2-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/trailing-float-layout-2-expected.txt
new file mode 100644
index 0000000..e89d7f0
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/block/float/trailing-float-layout-2-expected.txt
@@ -0,0 +1,4 @@
+AAAAA
+XYZSaft
+
+crbug.com/517030: Ensure trailing float gets a layout. Passes if it does not assert
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/block/margin-collapse/self-collapsing-block-getting-layout-set-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/block/margin-collapse/self-collapsing-block-getting-layout-set-expected.txt
new file mode 100644
index 0000000..0700c10
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/block/margin-collapse/self-collapsing-block-getting-layout-set-expected.txt
@@ -0,0 +1,3 @@
+ 
+crbug.com/479562: self-collapsing blocks getting layout set
+PASS
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/inline/inline-box-adjust-position-crash-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/inline/inline-box-adjust-position-crash-expected.txt
new file mode 100644
index 0000000..ab30141
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/inline/inline-box-adjust-position-crash-expected.txt
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+ PASS
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/fieldset/fieldset-crash-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/inline/inline-split-percent-height-object-crash-expected.txt
similarity index 100%
rename from third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/fieldset/fieldset-crash-expected.txt
rename to third_party/blink/web_tests/virtual/layout_ng/fast/inline/inline-split-percent-height-object-crash-expected.txt
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/inline/inline-width-containing-collapsed-whitespace-and-image-in-float-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/inline/inline-width-containing-collapsed-whitespace-and-image-in-float-expected.txt
new file mode 100644
index 0000000..5b18bb6
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/inline/inline-width-containing-collapsed-whitespace-and-image-in-float-expected.txt
@@ -0,0 +1,9 @@
+Test if width of inline box including a image and whitespaces is same with the included image width.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS document.querySelector('li').getBoundingClientRect().width is 32
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/inline/positioned-element-padding-contributes-width-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/inline/positioned-element-padding-contributes-width-expected.txt
new file mode 100644
index 0000000..e95b9ee4
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/inline/positioned-element-padding-contributes-width-expected.txt
@@ -0,0 +1,5 @@
+https://bugs.webkit.org/show_bug.cgi?id=108226: All the black boxes should be inside the blue rectangle.
+
+XX XX XX 
+X
+PASS
diff --git a/third_party/blink/web_tests/virtual/layout_ng/fast/inline/reattach-inlines-in-anonymous-blocks-with-out-of-flow-siblings-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/inline/reattach-inlines-in-anonymous-blocks-with-out-of-flow-siblings-expected.txt
new file mode 100644
index 0000000..8cf07c98
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng/fast/inline/reattach-inlines-in-anonymous-blocks-with-out-of-flow-siblings-expected.txt
@@ -0,0 +1,17 @@
+The numbers below should be on the same line.
+
+On success, you will see a series of "
+PASS
+" messages, followed by "
+TEST COMPLETE
+".
+
+PASS divs[2].offsetTop is divs[0].offsetTop
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+1 
+2 
+3
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/fieldset/fieldset-crash-expected.txt b/third_party/blink/web_tests/virtual/layout_ng/fast/writing-mode/orthogonal-writing-modes-scrollbarpart-crash-expected.txt
similarity index 100%
copy from third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/fast/forms/fieldset/fieldset-crash-expected.txt
copy to third_party/blink/web_tests/virtual/layout_ng/fast/writing-mode/orthogonal-writing-modes-scrollbarpart-crash-expected.txt
diff --git a/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/forms/fieldset/focus-in-fieldset-disabled-expected.txt b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/forms/fieldset/focus-in-fieldset-disabled-expected.txt
new file mode 100644
index 0000000..26dd7a95
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/forms/fieldset/focus-in-fieldset-disabled-expected.txt
@@ -0,0 +1,8 @@
+A form control in a disabled fieldset is not focusable:
+PASS input1.focus(); document.activeElement is document.body
+It becomes focusable if the fieldset is enabled:
+PASS input1.focus(); document.activeElement is input1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/forms/fieldset/validation-in-fieldset-expected.txt b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/forms/fieldset/validation-in-fieldset-expected.txt
new file mode 100644
index 0000000..adaa9b54
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/forms/fieldset/validation-in-fieldset-expected.txt
@@ -0,0 +1,18 @@
+A form control in initially disabled fieldset:
+PASS control1.willValidate is false
+Then, enables the fieldset:
+PASS document.getElementById("f1").disabled = false; control1.willValidate is true
+A form control in initially enabled fieldset:
+PASS control2.willValidate is true
+Then, disables fieldset:
+PASS fieldset2.disabled = true; control2.willValidate is false
+Detach the form control from the fieldset:
+PASS fieldset2.removeChild(control2); control2.willValidate is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/dynamic/insert-spanner-after-inner-multicol-crash-expected.txt b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/dynamic/insert-spanner-after-inner-multicol-crash-expected.txt
index 9763d1f08..9668d1a 100644
--- a/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/dynamic/insert-spanner-after-inner-multicol-crash-expected.txt
+++ b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/dynamic/insert-spanner-after-inner-multicol-crash-expected.txt
@@ -3,3 +3,4 @@
 PASS if no crash or assertion failure.
 
  

diff --git a/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/image-loaded-before-layout-assert-expected.txt b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/image-loaded-before-layout-assert-expected.txt
new file mode 100644
index 0000000..34ca227e
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/image-loaded-before-layout-assert-expected.txt
@@ -0,0 +1,3 @@
+This test attempts to trigger a paint invalidation after renderer creation but before layout.
+
+PASS if no assertion failure or crash.
diff --git a/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/inner-multicol-moved-into-continuation-expected.txt b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/inner-multicol-moved-into-continuation-expected.txt
new file mode 100644
index 0000000..ac287f1
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/inner-multicol-moved-into-continuation-expected.txt
@@ -0,0 +1,3 @@
+Inside a multicol container, establish an inline continuation around an inner multicol-container with a spanner.
+
+PASS if no crash or assertion failure.
diff --git a/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/nested-after-composited-layer-crash-expected.txt b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/nested-after-composited-layer-crash-expected.txt
index b87dec6..bf5e8fc4 100644
--- a/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/nested-after-composited-layer-crash-expected.txt
+++ b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/nested-after-composited-layer-crash-expected.txt
@@ -1 +1,3 @@
 PASS if no crash or assertion failure.
+

diff --git a/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/span/foreignObject-expected.txt b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/span/foreignObject-expected.txt
new file mode 100644
index 0000000..36f7a9f
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/span/foreignObject-expected.txt
@@ -0,0 +1 @@
+PASS if no assertion failure or crash.
diff --git a/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/textarea-with-placeholder-as-multicol-crash-expected.txt b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/textarea-with-placeholder-as-multicol-crash-expected.txt
new file mode 100644
index 0000000..b87dec6
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng_experimental/fast/multicol/textarea-with-placeholder-as-multicol-crash-expected.txt
@@ -0,0 +1 @@
+PASS if no crash or assertion failure.
diff --git a/third_party/blink/web_tests/virtual/layout_ng_experimental/printing/page-height-zero-expected.txt b/third_party/blink/web_tests/virtual/layout_ng_experimental/printing/page-height-zero-expected.txt
index 69fc2a6..c2eb1f3 100644
--- a/third_party/blink/web_tests/virtual/layout_ng_experimental/printing/page-height-zero-expected.txt
+++ b/third_party/blink/web_tests/virtual/layout_ng_experimental/printing/page-height-zero-expected.txt
@@ -8,3 +8,4 @@
 
 TEST COMPLETE
 

diff --git a/third_party/blink/web_tests/virtual/layout_ng_experimental/printing/viewport-size-dependant-iframe-with-multicol-crash-expected.txt b/third_party/blink/web_tests/virtual/layout_ng_experimental/printing/viewport-size-dependant-iframe-with-multicol-crash-expected.txt
new file mode 100644
index 0000000..b87dec6
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/layout_ng_experimental/printing/viewport-size-dependant-iframe-with-multicol-crash-expected.txt
@@ -0,0 +1 @@
+PASS if no crash or assertion failure.
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/anchor-empty-focus-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/anchor-empty-focus-expected.txt
new file mode 100644
index 0000000..04ba38fa
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/anchor-empty-focus-expected.txt
@@ -0,0 +1,10 @@
+This tests that focus() and sequential focus navigation work on empty anchors.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS document.activeElement is emptyAnchor1
+PASS document.activeElement is emptyAnchor2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-adopt-within-subframes-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-adopt-within-subframes-expected.txt
new file mode 100644
index 0000000..d4bc9a5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-adopt-within-subframes-expected.txt
@@ -0,0 +1,10 @@
+This test ensures beforeunload event fires exactly once in a subframe even if the frame was adopted to a frame that appears later in the tree.
+
+PASS: fired on parent
+PASS: fired on a
+PASS: fired on adoptee
+adopting
+adopted
+PASS: fired on b
+DONE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-crash-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-crash-expected.txt
new file mode 100644
index 0000000..41bb2a8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-crash-expected.txt
@@ -0,0 +1,9 @@
+Detaching a frame in beforeunload event handler should not crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS if no crash
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-forbidden-navigation-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-forbidden-navigation-expected.txt
new file mode 100644
index 0000000..5c63e004
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-forbidden-navigation-expected.txt
@@ -0,0 +1,8 @@
+This test ensures navigation is forbidden while beforeunload event is being fired. You should see PASS 1/2 and PASS 2/2 below:
+
+PASS 1/2
+
+--------
+Frame: '<!--framePath //<!--frame0-->-->'
+--------
+PASS: 2/2
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-in-subframe-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-in-subframe-expected.txt
new file mode 100644
index 0000000..d16afd4
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-in-subframe-expected.txt
@@ -0,0 +1,9 @@
+This tests beforeunload event in subframes. You should see PASS below:
+
+PASS
+
+
+--------
+Frame: '<!--framePath //<!--frame0-->-->'
+--------
+Child loaded.
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-javascript-navigation-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-javascript-navigation-expected.txt
new file mode 100644
index 0000000..1548e0a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-javascript-navigation-expected.txt
@@ -0,0 +1,3 @@
+This test ensures setting location.href with javascript scheme properly executes the script even while beforeunload event is being fired. You should see PASS 1/2 and PASS 2/2 below:
+
+PASS
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-remove-and-add-subframe-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-remove-and-add-subframe-expected.txt
new file mode 100644
index 0000000..b21dd8c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-remove-and-add-subframe-expected.txt
@@ -0,0 +1,7 @@
+This test ensures beforeunload event does not fire for subframes that has been removed from the DOM within a beforeunload event handler. Also ensures the event doesn't fire for subframes added within a beforeunload event handler. The latter behavior matches MSIE.
+
+PASS: fired on parent
+PASS: fired on a
+PASS: fired on c
+DONE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-return-bad-value-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-return-bad-value-expected.txt
new file mode 100644
index 0000000..25afd108
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-return-bad-value-expected.txt
@@ -0,0 +1,10 @@
+Tests that an exception is thrown when the value returned in the beforeunload callback cannot be converted to a String
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS Exception was thrown
+PASS testMessage is "Uncaught Exception in toString()"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-with-subframes-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-with-subframes-expected.txt
new file mode 100644
index 0000000..7212540a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/before-unload-with-subframes-expected.txt
@@ -0,0 +1,9 @@
+This test ensures beforeunload event fires in all subframes when a parent frame is navigated. You should see PASS 1/2 and PASS 2/2 below:
+
+PASS 1/2
+
+
+--------
+Frame: '<!--framePath //<!--frame0-->-->'
+--------
+PASS: 2/2
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/click-range-slider-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/click-range-slider-expected.txt
new file mode 100644
index 0000000..6d275f5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/click-range-slider-expected.txt
@@ -0,0 +1,7 @@
+Test that click events are fired for a slider when the range of values is dense enough that the thumb element is repositioned under the cursor on mouse press.
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS clickCount is 3
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/clipboard-dataTransferItemList-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/clipboard-dataTransferItemList-expected.txt
new file mode 100644
index 0000000..4e13f658
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/clipboard-dataTransferItemList-expected.txt
@@ -0,0 +1,59 @@
+To manually test, press your browser shortcut for copy and then for paste. Several lines that say 'PASS' should appear below.
+
+Copy handler: 
+Legacy
+DataTransferItemList
+Paste handler: 
+Legacy
+DataTransferItemList
+
+Tests copy / paste and DataTransferItemList
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Running test with Legacy copy handler and Legacy paste handler
+PASS testDataTransfer.getData("custom-data") is "hello world"
+PASS testDataTransfer.clearData(nonConvertibleToString) threw exception Exception in toString().
+PASS testDataTransfer.getData("custom-data") is "hello world"
+PASS testDataTransfer.types.length is 4
+PASS testDataTransfer.types.indexOf("text/plain") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/uri-list") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/html") >= 0 is true
+PASS testDataTransfer.types.indexOf("custom-data") >= 0 is true
+PASS testDataTransfer.getData("text") is "sample"
+PASS testDataTransfer.getData("url") is "http://www.google.com/"
+PASS testDataTransfer.getData("text/html") is "<em>Markup</em>"
+PASS testDataTransfer.getData("custom-data") is "hello world"
+Running test with Legacy copy handler and DataTransferItemList paste handler
+PASS testDataTransfer.getData("custom-data") is "hello world"
+PASS testDataTransfer.clearData(nonConvertibleToString) threw exception Exception in toString().
+PASS testDataTransfer.getData("custom-data") is "hello world"
+PASS testDataTransfer.items.length is 4
+PASS JSON.stringify(expectedTypes) is JSON.stringify(types)
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+Running test with DataTransferItemList copy handler and Legacy paste handler
+PASS testDataTransfer.items.item is undefined.
+PASS testDataTransfer.types.length is 4
+PASS testDataTransfer.types.indexOf("text/plain") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/uri-list") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/html") >= 0 is true
+PASS testDataTransfer.types.indexOf("custom-data") >= 0 is true
+PASS testDataTransfer.getData("text") is "sample"
+PASS testDataTransfer.getData("url") is "http://www.google.com/"
+PASS testDataTransfer.getData("text/html") is "<em>Markup</em>"
+PASS testDataTransfer.getData("custom-data") is "hello world"
+Running test with DataTransferItemList copy handler and DataTransferItemList paste handler
+PASS testDataTransfer.items.item is undefined.
+PASS testDataTransfer.items.length is 4
+PASS JSON.stringify(expectedTypes) is JSON.stringify(types)
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/composition-event-source-device-event-sender-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/composition-event-source-device-event-sender-expected.txt
new file mode 100644
index 0000000..e6fc1ea
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/composition-event-source-device-event-sender-expected.txt
@@ -0,0 +1,17 @@
+Test that composition events should have a sourceCapabilities and its firesTouchEvents should always be false.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+compositionstart
+PASS event.sourceCapabilities is non-null.
+PASS event.sourceCapabilities.firesTouchEvents is false
+compositionupdate
+PASS event.sourceCapabilities is non-null.
+PASS event.sourceCapabilities.firesTouchEvents is false
+compositionend
+PASS event.sourceCapabilities is non-null.
+PASS event.sourceCapabilities.firesTouchEvents is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/constructors/track-event-constructor-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/constructors/track-event-constructor-expected.txt
new file mode 100644
index 0000000..44388cd
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/constructors/track-event-constructor-expected.txt
@@ -0,0 +1,39 @@
+This tests the constructor for the TrackEvent DOM class.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+*** No initializer passed ***
+PASS new TrackEvent('TrackEvent').bubbles is false
+PASS new TrackEvent('TrackEvent').cancelable is false
+PASS new TrackEvent('TrackEvent').track is null
+
+*** Bubbles and cancelable true, track is missing ***
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true }).bubbles is true
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true }).cancelable is true
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true }).track is null
+
+*** Bubbles and cancelable true, invalid track ***
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).bubbles threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).cancelable threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).track threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+
+*** Initialize 'track' with a invalid values ***
+PASS new TrackEvent('TrackEvent', { track: 10 }).track threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+PASS new TrackEvent('TrackEvent', { track: 'string' }).track threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+PASS new TrackEvent('TrackEvent', { track: emptyObject }).track threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+PASS new TrackEvent('TrackEvent', { track: document }).track threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+
+*** Bubbles and cancelable true, valid track ***
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: trackElement.track }).bubbles is true
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: trackElement.track }).cancelable is true
+PASS new TrackEvent('TrackEvent', { track: trackElement.track }).track is trackElement.track
+
+*** Initialize 'track' with valid track object ***
+PASS new TrackEvent('TrackEvent', { track: trackElement.track }).track is trackElement.track
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/contextmenu-scrolled-page-with-frame-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/contextmenu-scrolled-page-with-frame-expected.txt
new file mode 100644
index 0000000..a9e7038
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/contextmenu-scrolled-page-with-frame-expected.txt
@@ -0,0 +1,4 @@
+This tests that context menu events are sent to the correct frame when a page is scrolled. To test manually, scroll the page so that the top of the iframe is flush with the top of the web page area, then right-click just below the iframe. You should get a context menu that does not contain any mention of frames.
+
+PASS: main document received a context menu event
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/drag-dataTransferItemList-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/drag-dataTransferItemList-expected.txt
new file mode 100644
index 0000000..de1d329
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/drag-dataTransferItemList-expected.txt
@@ -0,0 +1,81 @@
+To manually test, drag 'Drag Me' to 'Drop Here' and drop. Several lines that say 'PASS' should appear below.
+
+Drag Me
+Drop Here
+Drag handler: 
+Legacy
+DataTransferItemList
+Drop handler: 
+Legacy
+DataTransferItemList
+
+Tests drag'n drop and well as DataTransferItemList
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Running test with Legacy drag handler and Legacy drop handler
+PASS testDataTransfer.types.length is 4
+PASS testDataTransfer.types.indexOf("text/plain") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/uri-list") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/html") >= 0 is true
+PASS testDataTransfer.types.indexOf("custom-data") >= 0 is true
+PASS testDataTransfer.getData("text") is "sample"
+PASS testDataTransfer.getData("url") is "http://www.google.com/"
+PASS testDataTransfer.getData("text/html") is "<em>Markup</em>"
+PASS testDataTransfer.getData("custom-data") is "hello world"
+Running test with Legacy drag handler and DataTransferItemList drop handler
+PASS testDataTransfer.items.length is 4
+PASS testDataTransfer.items.add("test", "text/plain") is null
+PASS testDataTransfer.items.length is 4
+PASS JSON.stringify(expectedTypes) is JSON.stringify(types)
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+Running test with DataTransferItemList drag handler and Legacy drop handler
+PASS testDataTransfer.items.add() threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': 1 argument required, but only 0 present..
+PASS testDataTransfer.items.add(undefined) threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'..
+PASS testDataTransfer.items.add("sample") threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'..
+PASS testDataTransfer.items.add(null) threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'..
+PASS testItem.kind is "string"
+PASS testItem.type is "text/plain"
+PASS testItem.kind is "string"
+PASS testItem.type is "text/uri-list"
+PASS testItem.kind is "string"
+PASS testItem.type is "text/html"
+PASS testItem.kind is "string"
+PASS testItem.type is "custom-data"
+PASS testDataTransfer.types.length is 4
+PASS testDataTransfer.types.indexOf("text/plain") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/uri-list") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/html") >= 0 is true
+PASS testDataTransfer.types.indexOf("custom-data") >= 0 is true
+PASS testDataTransfer.getData("text") is "sample"
+PASS testDataTransfer.getData("url") is "http://www.google.com/"
+PASS testDataTransfer.getData("text/html") is "<em>Markup</em>"
+PASS testDataTransfer.getData("custom-data") is "hello world"
+Running test with DataTransferItemList drag handler and DataTransferItemList drop handler
+PASS testDataTransfer.items.add() threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': 1 argument required, but only 0 present..
+PASS testDataTransfer.items.add(undefined) threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'..
+PASS testDataTransfer.items.add("sample") threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'..
+PASS testDataTransfer.items.add(null) threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'..
+PASS testItem.kind is "string"
+PASS testItem.type is "text/plain"
+PASS testItem.kind is "string"
+PASS testItem.type is "text/uri-list"
+PASS testItem.kind is "string"
+PASS testItem.type is "text/html"
+PASS testItem.kind is "string"
+PASS testItem.type is "custom-data"
+PASS testDataTransfer.items.length is 4
+PASS testDataTransfer.items.add("test", "text/plain") is null
+PASS testDataTransfer.items.length is 4
+PASS JSON.stringify(expectedTypes) is JSON.stringify(types)
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/drag-image-filename-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/drag-image-filename-expected.txt
new file mode 100644
index 0000000..a49e9d20
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/drag-image-filename-expected.txt
@@ -0,0 +1,2 @@
+Filename being dragged: onload-image.png
+This test requires DumpRenderTree. To test manually, drag the image to the desktop. It should receive the name "onload-image.png".
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/drag-selects-image-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/drag-selects-image-expected.txt
new file mode 100644
index 0000000..128a795
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/drag-selects-image-expected.txt
@@ -0,0 +1,13 @@
+Non-editable area
+Editable area
+
+This tests that images are properly left selected or unselected when an image drag is started. Only the image in the editable area should be selected when an image drag is started.
+
+Starting test...
+0 range(s) selected
+Dragging image in non-editable area...
+0 range(s) selected
+Dragging image in editable area...
+1 range(s) selected
+imageTwo is selected
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/drag-svg-image-crash-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/drag-svg-image-crash-expected.txt
new file mode 100644
index 0000000..41065e8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/drag-svg-image-crash-expected.txt
@@ -0,0 +1,3 @@
+Tests dragging an SVG image. Test passes if the test does not crash.
+
+Success - drag entered
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/event-attribute-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/event-attribute-expected.txt
new file mode 100644
index 0000000..9a46b895
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/event-attribute-expected.txt
@@ -0,0 +1,272 @@
+Test that setting event handlers with attribute works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS /*img*/ typeof (element["onclick"]) is "function"
+PASS /*img*/ typeof (element["oncontextmenu"]) is "function"
+PASS /*img*/ typeof (element["ondblclick"]) is "function"
+PASS /*img*/ typeof (element["onmousedown"]) is "function"
+PASS /*img*/ typeof (element["onmousemove"]) is "function"
+PASS /*img*/ typeof (element["onmouseout"]) is "function"
+PASS /*img*/ typeof (element["onmouseover"]) is "function"
+PASS /*img*/ typeof (element["onmouseup"]) is "function"
+PASS /*img*/ typeof (element["onmousewheel"]) is "function"
+PASS /*img*/ typeof (element["onfocus"]) is "function"
+PASS /*img*/ typeof (element["onblur"]) is "function"
+PASS /*img*/ typeof (element["onkeydown"]) is "function"
+PASS /*img*/ typeof (element["onkeypress"]) is "function"
+PASS /*img*/ typeof (element["onkeyup"]) is "function"
+PASS /*img*/ typeof (element["onscroll"]) is "function"
+PASS /*img*/ typeof (element["onbeforecut"]) is "function"
+PASS /*img*/ typeof (element["oncut"]) is "function"
+PASS /*img*/ typeof (element["onbeforecopy"]) is "function"
+PASS /*img*/ typeof (element["oncopy"]) is "function"
+PASS /*img*/ typeof (element["onbeforepaste"]) is "function"
+PASS /*img*/ typeof (element["onpaste"]) is "function"
+PASS /*img*/ typeof (element["ondragenter"]) is "function"
+PASS /*img*/ typeof (element["ondragover"]) is "function"
+PASS /*img*/ typeof (element["ondragleave"]) is "function"
+PASS /*img*/ typeof (element["ondrop"]) is "function"
+PASS /*img*/ typeof (element["ondragstart"]) is "function"
+PASS /*img*/ typeof (element["ondrag"]) is "function"
+PASS /*img*/ typeof (element["ondragend"]) is "function"
+PASS /*img*/ typeof (element["onselectstart"]) is "function"
+PASS /*img*/ typeof (element["onsubmit"]) is "function"
+PASS /*img*/ typeof (element["onerror"]) is "function"
+PASS /*img*/ typeof (element["oninput"]) is "function"
+PASS /*img*/ typeof (element["oninvalid"]) is "function"
+PASS /*img*/ typeof (element["ontouchstart"]) is "function"
+PASS /*img*/ typeof (element["ontouchmove"]) is "function"
+PASS /*img*/ typeof (element["ontouchend"]) is "function"
+PASS /*img*/ typeof (element["ontouchcancel"]) is "function"
+PASS /*img*/ typeof (element["onwebkitfullscreenchange"]) is "function"
+PASS /*img*/ typeof (element["onwebkitfullscreenerror"]) is "function"
+PASS /*img*/ typeof (element["onabort"]) is "function"
+PASS /*img*/ typeof (element["onchange"]) is "function"
+PASS /*img*/ typeof (element["onreset"]) is "function"
+PASS /*img*/ typeof (element["onselect"]) is "function"
+PASS /*img*/ typeof (element["onload"]) is "function"
+PASS /*script*/ typeof (element["onclick"]) is "function"
+PASS /*script*/ typeof (element["oncontextmenu"]) is "function"
+PASS /*script*/ typeof (element["ondblclick"]) is "function"
+PASS /*script*/ typeof (element["onmousedown"]) is "function"
+PASS /*script*/ typeof (element["onmousemove"]) is "function"
+PASS /*script*/ typeof (element["onmouseout"]) is "function"
+PASS /*script*/ typeof (element["onmouseover"]) is "function"
+PASS /*script*/ typeof (element["onmouseup"]) is "function"
+PASS /*script*/ typeof (element["onmousewheel"]) is "function"
+PASS /*script*/ typeof (element["onfocus"]) is "function"
+PASS /*script*/ typeof (element["onblur"]) is "function"
+PASS /*script*/ typeof (element["onkeydown"]) is "function"
+PASS /*script*/ typeof (element["onkeypress"]) is "function"
+PASS /*script*/ typeof (element["onkeyup"]) is "function"
+PASS /*script*/ typeof (element["onscroll"]) is "function"
+PASS /*script*/ typeof (element["onbeforecut"]) is "function"
+PASS /*script*/ typeof (element["oncut"]) is "function"
+PASS /*script*/ typeof (element["onbeforecopy"]) is "function"
+PASS /*script*/ typeof (element["oncopy"]) is "function"
+PASS /*script*/ typeof (element["onbeforepaste"]) is "function"
+PASS /*script*/ typeof (element["onpaste"]) is "function"
+PASS /*script*/ typeof (element["ondragenter"]) is "function"
+PASS /*script*/ typeof (element["ondragover"]) is "function"
+PASS /*script*/ typeof (element["ondragleave"]) is "function"
+PASS /*script*/ typeof (element["ondrop"]) is "function"
+PASS /*script*/ typeof (element["ondragstart"]) is "function"
+PASS /*script*/ typeof (element["ondrag"]) is "function"
+PASS /*script*/ typeof (element["ondragend"]) is "function"
+PASS /*script*/ typeof (element["onselectstart"]) is "function"
+PASS /*script*/ typeof (element["onsubmit"]) is "function"
+PASS /*script*/ typeof (element["onerror"]) is "function"
+PASS /*script*/ typeof (element["oninput"]) is "function"
+PASS /*script*/ typeof (element["oninvalid"]) is "function"
+PASS /*script*/ typeof (element["ontouchstart"]) is "function"
+PASS /*script*/ typeof (element["ontouchmove"]) is "function"
+PASS /*script*/ typeof (element["ontouchend"]) is "function"
+PASS /*script*/ typeof (element["ontouchcancel"]) is "function"
+PASS /*script*/ typeof (element["onwebkitfullscreenchange"]) is "function"
+PASS /*script*/ typeof (element["onwebkitfullscreenerror"]) is "function"
+PASS /*script*/ typeof (element["onabort"]) is "function"
+PASS /*script*/ typeof (element["onchange"]) is "function"
+PASS /*script*/ typeof (element["onreset"]) is "function"
+PASS /*script*/ typeof (element["onselect"]) is "function"
+PASS /*script*/ typeof (element["onload"]) is "function"
+PASS /*video*/ typeof (element["onclick"]) is "function"
+PASS /*video*/ typeof (element["oncontextmenu"]) is "function"
+PASS /*video*/ typeof (element["ondblclick"]) is "function"
+PASS /*video*/ typeof (element["onmousedown"]) is "function"
+PASS /*video*/ typeof (element["onmousemove"]) is "function"
+PASS /*video*/ typeof (element["onmouseout"]) is "function"
+PASS /*video*/ typeof (element["onmouseover"]) is "function"
+PASS /*video*/ typeof (element["onmouseup"]) is "function"
+PASS /*video*/ typeof (element["onmousewheel"]) is "function"
+PASS /*video*/ typeof (element["onfocus"]) is "function"
+PASS /*video*/ typeof (element["onblur"]) is "function"
+PASS /*video*/ typeof (element["onkeydown"]) is "function"
+PASS /*video*/ typeof (element["onkeypress"]) is "function"
+PASS /*video*/ typeof (element["onkeyup"]) is "function"
+PASS /*video*/ typeof (element["onscroll"]) is "function"
+PASS /*video*/ typeof (element["onbeforecut"]) is "function"
+PASS /*video*/ typeof (element["oncut"]) is "function"
+PASS /*video*/ typeof (element["onbeforecopy"]) is "function"
+PASS /*video*/ typeof (element["oncopy"]) is "function"
+PASS /*video*/ typeof (element["onbeforepaste"]) is "function"
+PASS /*video*/ typeof (element["onpaste"]) is "function"
+PASS /*video*/ typeof (element["ondragenter"]) is "function"
+PASS /*video*/ typeof (element["ondragover"]) is "function"
+PASS /*video*/ typeof (element["ondragleave"]) is "function"
+PASS /*video*/ typeof (element["ondrop"]) is "function"
+PASS /*video*/ typeof (element["ondragstart"]) is "function"
+PASS /*video*/ typeof (element["ondrag"]) is "function"
+PASS /*video*/ typeof (element["ondragend"]) is "function"
+PASS /*video*/ typeof (element["onselectstart"]) is "function"
+PASS /*video*/ typeof (element["onsubmit"]) is "function"
+PASS /*video*/ typeof (element["onerror"]) is "function"
+PASS /*video*/ typeof (element["oninput"]) is "function"
+PASS /*video*/ typeof (element["oninvalid"]) is "function"
+PASS /*video*/ typeof (element["ontouchstart"]) is "function"
+PASS /*video*/ typeof (element["ontouchmove"]) is "function"
+PASS /*video*/ typeof (element["ontouchend"]) is "function"
+PASS /*video*/ typeof (element["ontouchcancel"]) is "function"
+PASS /*video*/ typeof (element["onwebkitfullscreenchange"]) is "function"
+PASS /*video*/ typeof (element["onwebkitfullscreenerror"]) is "function"
+PASS /*video*/ typeof (element["onabort"]) is "function"
+PASS /*video*/ typeof (element["onchange"]) is "function"
+PASS /*video*/ typeof (element["onreset"]) is "function"
+PASS /*video*/ typeof (element["onselect"]) is "function"
+PASS /*video*/ typeof (element["onload"]) is "function"
+PASS /*div*/ typeof (element["onclick"]) is "function"
+PASS /*div*/ typeof (element["oncontextmenu"]) is "function"
+PASS /*div*/ typeof (element["ondblclick"]) is "function"
+PASS /*div*/ typeof (element["onmousedown"]) is "function"
+PASS /*div*/ typeof (element["onmousemove"]) is "function"
+PASS /*div*/ typeof (element["onmouseout"]) is "function"
+PASS /*div*/ typeof (element["onmouseover"]) is "function"
+PASS /*div*/ typeof (element["onmouseup"]) is "function"
+PASS /*div*/ typeof (element["onmousewheel"]) is "function"
+PASS /*div*/ typeof (element["onfocus"]) is "function"
+PASS /*div*/ typeof (element["onblur"]) is "function"
+PASS /*div*/ typeof (element["onkeydown"]) is "function"
+PASS /*div*/ typeof (element["onkeypress"]) is "function"
+PASS /*div*/ typeof (element["onkeyup"]) is "function"
+PASS /*div*/ typeof (element["onscroll"]) is "function"
+PASS /*div*/ typeof (element["onbeforecut"]) is "function"
+PASS /*div*/ typeof (element["oncut"]) is "function"
+PASS /*div*/ typeof (element["onbeforecopy"]) is "function"
+PASS /*div*/ typeof (element["oncopy"]) is "function"
+PASS /*div*/ typeof (element["onbeforepaste"]) is "function"
+PASS /*div*/ typeof (element["onpaste"]) is "function"
+PASS /*div*/ typeof (element["ondragenter"]) is "function"
+PASS /*div*/ typeof (element["ondragover"]) is "function"
+PASS /*div*/ typeof (element["ondragleave"]) is "function"
+PASS /*div*/ typeof (element["ondrop"]) is "function"
+PASS /*div*/ typeof (element["ondragstart"]) is "function"
+PASS /*div*/ typeof (element["ondrag"]) is "function"
+PASS /*div*/ typeof (element["ondragend"]) is "function"
+PASS /*div*/ typeof (element["onselectstart"]) is "function"
+PASS /*div*/ typeof (element["onsubmit"]) is "function"
+PASS /*div*/ typeof (element["onerror"]) is "function"
+PASS /*div*/ typeof (element["oninput"]) is "function"
+PASS /*div*/ typeof (element["oninvalid"]) is "function"
+PASS /*div*/ typeof (element["ontouchstart"]) is "function"
+PASS /*div*/ typeof (element["ontouchmove"]) is "function"
+PASS /*div*/ typeof (element["ontouchend"]) is "function"
+PASS /*div*/ typeof (element["ontouchcancel"]) is "function"
+PASS /*div*/ typeof (element["onwebkitfullscreenchange"]) is "function"
+PASS /*div*/ typeof (element["onwebkitfullscreenerror"]) is "function"
+PASS /*div*/ typeof (element["onabort"]) is "function"
+PASS /*div*/ typeof (element["onchange"]) is "function"
+PASS /*div*/ typeof (element["onreset"]) is "function"
+PASS /*div*/ typeof (element["onselect"]) is "function"
+PASS /*div*/ typeof (element["onload"]) is "function"
+PASS /*form*/ typeof (element["onclick"]) is "function"
+PASS /*form*/ typeof (element["oncontextmenu"]) is "function"
+PASS /*form*/ typeof (element["ondblclick"]) is "function"
+PASS /*form*/ typeof (element["onmousedown"]) is "function"
+PASS /*form*/ typeof (element["onmousemove"]) is "function"
+PASS /*form*/ typeof (element["onmouseout"]) is "function"
+PASS /*form*/ typeof (element["onmouseover"]) is "function"
+PASS /*form*/ typeof (element["onmouseup"]) is "function"
+PASS /*form*/ typeof (element["onmousewheel"]) is "function"
+PASS /*form*/ typeof (element["onfocus"]) is "function"
+PASS /*form*/ typeof (element["onblur"]) is "function"
+PASS /*form*/ typeof (element["onkeydown"]) is "function"
+PASS /*form*/ typeof (element["onkeypress"]) is "function"
+PASS /*form*/ typeof (element["onkeyup"]) is "function"
+PASS /*form*/ typeof (element["onscroll"]) is "function"
+PASS /*form*/ typeof (element["onbeforecut"]) is "function"
+PASS /*form*/ typeof (element["oncut"]) is "function"
+PASS /*form*/ typeof (element["onbeforecopy"]) is "function"
+PASS /*form*/ typeof (element["oncopy"]) is "function"
+PASS /*form*/ typeof (element["onbeforepaste"]) is "function"
+PASS /*form*/ typeof (element["onpaste"]) is "function"
+PASS /*form*/ typeof (element["ondragenter"]) is "function"
+PASS /*form*/ typeof (element["ondragover"]) is "function"
+PASS /*form*/ typeof (element["ondragleave"]) is "function"
+PASS /*form*/ typeof (element["ondrop"]) is "function"
+PASS /*form*/ typeof (element["ondragstart"]) is "function"
+PASS /*form*/ typeof (element["ondrag"]) is "function"
+PASS /*form*/ typeof (element["ondragend"]) is "function"
+PASS /*form*/ typeof (element["onselectstart"]) is "function"
+PASS /*form*/ typeof (element["onsubmit"]) is "function"
+PASS /*form*/ typeof (element["onerror"]) is "function"
+PASS /*form*/ typeof (element["oninput"]) is "function"
+PASS /*form*/ typeof (element["oninvalid"]) is "function"
+PASS /*form*/ typeof (element["ontouchstart"]) is "function"
+PASS /*form*/ typeof (element["ontouchmove"]) is "function"
+PASS /*form*/ typeof (element["ontouchend"]) is "function"
+PASS /*form*/ typeof (element["ontouchcancel"]) is "function"
+PASS /*form*/ typeof (element["onwebkitfullscreenchange"]) is "function"
+PASS /*form*/ typeof (element["onwebkitfullscreenerror"]) is "function"
+PASS /*form*/ typeof (element["onabort"]) is "function"
+PASS /*form*/ typeof (element["onchange"]) is "function"
+PASS /*form*/ typeof (element["onreset"]) is "function"
+PASS /*form*/ typeof (element["onselect"]) is "function"
+PASS /*form*/ typeof (element["onload"]) is "function"
+PASS /*input*/ typeof (element["onclick"]) is "function"
+PASS /*input*/ typeof (element["oncontextmenu"]) is "function"
+PASS /*input*/ typeof (element["ondblclick"]) is "function"
+PASS /*input*/ typeof (element["onmousedown"]) is "function"
+PASS /*input*/ typeof (element["onmousemove"]) is "function"
+PASS /*input*/ typeof (element["onmouseout"]) is "function"
+PASS /*input*/ typeof (element["onmouseover"]) is "function"
+PASS /*input*/ typeof (element["onmouseup"]) is "function"
+PASS /*input*/ typeof (element["onmousewheel"]) is "function"
+PASS /*input*/ typeof (element["onfocus"]) is "function"
+PASS /*input*/ typeof (element["onblur"]) is "function"
+PASS /*input*/ typeof (element["onkeydown"]) is "function"
+PASS /*input*/ typeof (element["onkeypress"]) is "function"
+PASS /*input*/ typeof (element["onkeyup"]) is "function"
+PASS /*input*/ typeof (element["onscroll"]) is "function"
+PASS /*input*/ typeof (element["onbeforecut"]) is "function"
+PASS /*input*/ typeof (element["oncut"]) is "function"
+PASS /*input*/ typeof (element["onbeforecopy"]) is "function"
+PASS /*input*/ typeof (element["oncopy"]) is "function"
+PASS /*input*/ typeof (element["onbeforepaste"]) is "function"
+PASS /*input*/ typeof (element["onpaste"]) is "function"
+PASS /*input*/ typeof (element["ondragenter"]) is "function"
+PASS /*input*/ typeof (element["ondragover"]) is "function"
+PASS /*input*/ typeof (element["ondragleave"]) is "function"
+PASS /*input*/ typeof (element["ondrop"]) is "function"
+PASS /*input*/ typeof (element["ondragstart"]) is "function"
+PASS /*input*/ typeof (element["ondrag"]) is "function"
+PASS /*input*/ typeof (element["ondragend"]) is "function"
+PASS /*input*/ typeof (element["onselectstart"]) is "function"
+PASS /*input*/ typeof (element["onsubmit"]) is "function"
+PASS /*input*/ typeof (element["onerror"]) is "function"
+PASS /*input*/ typeof (element["oninput"]) is "function"
+PASS /*input*/ typeof (element["oninvalid"]) is "function"
+PASS /*input*/ typeof (element["ontouchstart"]) is "function"
+PASS /*input*/ typeof (element["ontouchmove"]) is "function"
+PASS /*input*/ typeof (element["ontouchend"]) is "function"
+PASS /*input*/ typeof (element["ontouchcancel"]) is "function"
+PASS /*input*/ typeof (element["onwebkitfullscreenchange"]) is "function"
+PASS /*input*/ typeof (element["onwebkitfullscreenerror"]) is "function"
+PASS /*input*/ typeof (element["onabort"]) is "function"
+PASS /*input*/ typeof (element["onchange"]) is "function"
+PASS /*input*/ typeof (element["onreset"]) is "function"
+PASS /*input*/ typeof (element["onselect"]) is "function"
+PASS /*input*/ typeof (element["onload"]) is "function"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/focus-querySelector-in-focus-event-handler-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/focus-querySelector-in-focus-event-handler-expected.txt
new file mode 100644
index 0000000..fd51af3f
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/focus-querySelector-in-focus-event-handler-expected.txt
@@ -0,0 +1,5 @@
+PASS :focus matches event.target
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/form-onchange-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/form-onchange-expected.txt
new file mode 100644
index 0000000..2bcd72e
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/form-onchange-expected.txt
@@ -0,0 +1,11 @@
+Tests that the onchange event can be set on any element with an attribute.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS input.onchange fired.
+PASS form.onchange fired.
+PASS div.onchange fired.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/hit-test-clip-path-reference-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/hit-test-clip-path-reference-expected.txt
new file mode 100644
index 0000000..5b2f327
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/hit-test-clip-path-reference-expected.txt
@@ -0,0 +1,17 @@
+Test that hit-test work with clip-path using svg reference
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS path contains point at (99, 247)
+PASS path contains point at (94, 242)
+PASS path contains point at (104, 252)
+PASS path contains point at (94, 252)
+PASS path contains point at (104, 242)
+PASS path does not contain point at (67, 215)
+PASS path does not contain point at (66, 214)
+PASS path does not contain point at (68, 216)
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/hit-test-counts-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/hit-test-counts-expected.txt
new file mode 100644
index 0000000..e8366d2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/hit-test-counts-expected.txt
@@ -0,0 +1,93 @@
+Count how many hit tests are required for various event scenarios. Hit tests can be expensive and it's often tempting to add more. These values should only ever be changed to go down, not up.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+Event on a simple div
+---------------------
+Initial: 0+0
+MouseMove: 1+0
+MouseDown: 1+2
+MouseUp: 0+1
+Wheel: 0+1
+TouchStart: 1+1
+TouchMove: 0+0
+TouchEnd: 0+0
+GestureTapDown: 0+1
+GestureShowPress: 0+1
+GestureTap: 0+3
+GestureScrollBegin: 0+1
+GestureTapCancel: 0+1
+GestureScrollUpdate: 0+0
+GestureScrollEnd: 0+0
+DoubleFingerTouch: 2+0
+
+Event entirely over one iframe nested in another
+---------------------
+Initial: 0+0 0+0 0+0
+MouseMove: 1+0 1+0 1+0
+MouseDown: 1+1 1+1 1+2
+MouseUp: 0+1 0+1 0+1
+Wheel: 0+1 0+1 0+1
+TouchStart: 2+0 2+0 1+1
+TouchMove: 0+0 0+0 0+0
+TouchEnd: 0+0 0+0 0+0
+GestureTapDown: 1+0 1+0 0+1
+GestureShowPress: 1+0 1+0 0+1
+GestureTap: 1+0 1+0 0+3
+GestureScrollBegin: 0+1 0+1 0+1
+GestureTapCancel: 1+0 1+0 0+1
+GestureScrollUpdate: 0+0 0+0 0+0
+GestureScrollEnd: 0+0 0+0 0+0
+DoubleFingerTouch: 2+0 2+0 2+0
+
+Event near boundary of two iframes
+---------------------
+Initial: 0+0 0+0 0+0
+MouseMove: 1+0 1+0 0+0
+MouseDown: 1+1 1+2 0+0
+MouseUp: 0+1 0+1 0+0
+Wheel: 0+1 0+1 0+0
+TouchStart: 2+0 1+1 1+0
+TouchMove: 0+0 0+0 0+0
+TouchEnd: 0+0 0+0 0+0
+GestureTapDown: 1+0 0+1 0+0
+GestureShowPress: 1+0 0+1 0+0
+GestureTap: 1+0 0+3 0+0
+GestureScrollBegin: 0+1 0+1 0+0
+GestureTapCancel: 1+0 0+1 0+0
+GestureScrollUpdate: 0+0 0+0 0+0
+GestureScrollEnd: 0+0 0+0 0+0
+DoubleFingerTouch: 2+0 2+0 1+0
+
+Event on a simple div (desktop viewport)
+---------------------
+Initial: 0+0
+MouseMove: 1+0
+MouseDown: 1+2
+MouseUp: 0+1
+Wheel: 0+1
+TouchStart: 1+1
+TouchMove: 0+0
+TouchEnd: 0+0
+GestureTapDown: 0+1
+GestureShowPress: 0+1
+GestureTap: 0+3
+GestureScrollBegin: 0+1
+GestureTapCancel: 0+1
+GestureScrollUpdate: 0+0
+GestureScrollEnd: 0+0
+DoubleFingerTouch: 2+0
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/iframe-mousewheel-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/iframe-mousewheel-expected.txt
new file mode 100644
index 0000000..6d4c85e5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/iframe-mousewheel-expected.txt
@@ -0,0 +1,9 @@
+This test can be used to verify that a mousewheel event is fired when wheeling over the subframe but not dispatched to the parent frame.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS received mousewheel event.
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/iframe-onmousemove-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/iframe-onmousemove-expected.txt
new file mode 100644
index 0000000..2d57d4c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/iframe-onmousemove-expected.txt
@@ -0,0 +1,11 @@
+This test can be used to verify that a mousemove event is fired when moving the mouse cursor over an element in a subframe.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS received mousemove event.
+
+TEST COMPLETE
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/ime-composition-events-001-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/ime-composition-events-001-expected.txt
new file mode 100644
index 0000000..9cdd53cd
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/ime-composition-events-001-expected.txt
@@ -0,0 +1,56 @@
+This tests that calling input-method functions sends Composition Events and Text Events introduced in DOM Level 3. To test manually, enable an IME, input CJK characters, and see this page doesn't show 'FAIL' lines.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS event.type is "compositionstart"
+PASS event.data is ""
+PASS event.type is "compositionupdate"
+PASS event.data is "1"
+PASS event.type is "compositionupdate"
+PASS event.data is "2"
+PASS event.type is "compositionupdate"
+PASS event.data is "3"
+PASS event.type is "compositionupdate"
+PASS event.data is "4"
+PASS event.type is "textInput"
+PASS event.data is "4"
+PASS event.type is "compositionend"
+PASS event.data is "4"
+PASS event.type is "compositionstart"
+PASS event.data is ""
+PASS event.type is "compositionupdate"
+PASS event.data is "5"
+PASS event.type is "compositionupdate"
+PASS event.data is "6"
+PASS event.type is "compositionupdate"
+PASS event.data is "7"
+PASS event.type is "compositionupdate"
+PASS event.data is ""
+PASS event.type is "textInput"
+PASS event.data is ""
+PASS event.type is "compositionend"
+PASS event.data is ""
+PASS event.type is "textInput"
+PASS event.data is "8"
+PASS event.type is "compositionstart"
+PASS event.data is ""
+PASS event.type is "compositionupdate"
+PASS event.data is "9"
+PASS event.type is "compositionend"
+PASS event.data is "9"
+PASS event.type is "compositionstart"
+PASS event.data is "have"
+PASS event.type is "compositionupdate"
+PASS event.data is "lost"
+PASS test.value is "I lost a pen"
+PASS event.type is "compositionupdate"
+PASS event.data is "made"
+PASS event.type is "textInput"
+PASS event.data is "made"
+PASS event.type is "compositionend"
+PASS event.data is "made"
+PASS test.value is "I made a pen"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/initkeyboardevent-crash-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/initkeyboardevent-crash-expected.txt
new file mode 100644
index 0000000..1ec136c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/initkeyboardevent-crash-expected.txt
@@ -0,0 +1,3 @@
+This tests that dispatching a keyboard event created via javascript does not crash.
+
+PASSED
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/javascript-uri-navigation-blocked-in-unload-handler-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/javascript-uri-navigation-blocked-in-unload-handler-expected.txt
new file mode 100644
index 0000000..695552ac
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/javascript-uri-navigation-blocked-in-unload-handler-expected.txt
@@ -0,0 +1,2 @@
+PASS: script executed
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/key-events-in-input-button-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/key-events-in-input-button-expected.txt
new file mode 100644
index 0000000..3c49f48
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/key-events-in-input-button-expected.txt
@@ -0,0 +1,18 @@
+To test manually, press keys and compare results to other browsers.
+
+target - type - ctrlKey,altKey,shiftKey,metaKey - key - keyCode - charCode
+Space:
+INPUT - keydown - false,false,false,false - - 32 - 0
+INPUT - keypress - false,false,false,false - - 32 - 32
+INPUT - keyup - false,false,false,false - - 32 - 0
+INPUT - click
+Enter:
+INPUT - keydown - false,false,false,false -Enter- 13 - 0
+INPUT - keypress - false,false,false,false -Enter- 13 - 13
+INPUT - click
+INPUT - keyup - false,false,false,false -Enter- 13 - 0
+A:
+INPUT - keydown - false,false,true,false -A- 65 - 0
+INPUT - keypress - false,false,true,false -A- 65 - 65
+INPUT - keyup - false,false,true,false -A- 65 - 0
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/keydown-1-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/keydown-1-expected.txt
new file mode 100644
index 0000000..08105613
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/keydown-1-expected.txt
@@ -0,0 +1,5 @@
+This tests that keydown events aren't sent to the main frame for command key presses that occur when a subframe is first responder. To run it manually, click inside the subframe, type a few characters, then do Command-A to Select All. Only the subframe should report a keydown event.
+
+keydown in subframe: [object KeyboardEvent]
+keydown in subframe: [object KeyboardEvent]
+This sentence should not end with a period
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/keydown-function-keys-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/keydown-function-keys-expected.txt
new file mode 100644
index 0000000..51fa6d8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/keydown-function-keys-expected.txt
@@ -0,0 +1,26 @@
+This test verifies the keycodes sent when we press function keys.
+
+Type=keydown,keyCode=112,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=112,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=113,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=113,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=114,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=114,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=115,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=115,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=116,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=116,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=117,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=117,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=118,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=118,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=119,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=119,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=120,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=120,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=121,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=121,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=122,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=122,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=123,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=123,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/keydown-remove-frame-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/keydown-remove-frame-expected.txt
new file mode 100644
index 0000000..6e840f29
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/keydown-remove-frame-expected.txt
@@ -0,0 +1 @@
+Tests that WebKit does not crash when a frame is removed during keydown event processing. To test manually, press any letter key. The iframe below should disappear and Safari should not crash.
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/message-port-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/message-port-expected.txt
new file mode 100644
index 0000000..955ad37
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/message-port-expected.txt
@@ -0,0 +1,16 @@
+Test cross-frame MessagePort communication.
+
+Should be a series of SUCCESS messages, followed with DONE.
+
+Simple exchange: SUCCESS
+Simple exchange: SUCCESS
+Posted port: SUCCESS
+Posted port: SUCCESS
+Event Listener: SUCCESS
+Event Listener: SUCCESS
+Closed port: SUCCESS
+Closed port: SUCCESS
+MessageEvent.cancelable defaults to false: PASS
+MessageEvent.cancelable defaults to false: PASS
+DONE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/message-port-inactive-document-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/message-port-inactive-document-expected.txt
new file mode 100644
index 0000000..ecb4e30
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/message-port-inactive-document-expected.txt
@@ -0,0 +1,4 @@
+Test that messaging an inactive frameless document works as expected.
+
+Didn't crash, freeze or respond: SUCCESS
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/middleClickAutoscroll-drag-scrollable-iframe-div-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/middleClickAutoscroll-drag-scrollable-iframe-div-expected.txt
new file mode 100644
index 0000000..f3126137
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/middleClickAutoscroll-drag-scrollable-iframe-div-expected.txt
@@ -0,0 +1,12 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+Starting Autoscroll test on iframe
+PASSED : the autoscroll has worked !
+
+Test for bug 336373.
+
+To test manually, hold the middle mouse button on the box with scrollbars and scroll by dragging the mouse outside the bounds of the box. If the bug occurs once the cursor leaves the bounds of the box it will remain stuck in the panning state.
+
+Click me
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/middleClickAutoscroll-modal-scrollable-iframe-div-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/middleClickAutoscroll-modal-scrollable-iframe-div-expected.txt
new file mode 100644
index 0000000..f3126137
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/middleClickAutoscroll-modal-scrollable-iframe-div-expected.txt
@@ -0,0 +1,12 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+Starting Autoscroll test on iframe
+PASSED : the autoscroll has worked !
+
+Test for bug 336373.
+
+To test manually, hold the middle mouse button on the box with scrollbars and scroll by dragging the mouse outside the bounds of the box. If the bug occurs once the cursor leaves the bounds of the box it will remain stuck in the panning state.
+
+Click me
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouse-cursor-style-change-iframe-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouse-cursor-style-change-iframe-expected.txt
new file mode 100644
index 0000000..4621ac5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouse-cursor-style-change-iframe-expected.txt
@@ -0,0 +1,22 @@
+Test that a cursor change that occurs due only to a style change correctly considers iframes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Mouse moved to cursor changing div
+PASS internals.getCurrentCursorInfo() is "type=Hand hotSpot=0,0"
+Changing cursor style
+PASS internals.getCurrentCursorInfo() is "type=Wait hotSpot=0,0"
+
+Now move mouse onto iframe above cursor changing div
+PASS document.elementFromPoint(100, y) is frame
+PASS document.elementsFromPoint(100, y).indexOf(container) > 0 is true
+PASS internals.cursorUpdatePending is false
+PASS internals.getCurrentCursorInfo() is "type=IBeam hotSpot=0,0"
+
+Changing cursor style of the background should not affect the cursor as it sits over the iframe
+PASS internals.getCurrentCursorInfo() is "type=IBeam hotSpot=0,0"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouse-drag-from-frame-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouse-drag-from-frame-expected.txt
new file mode 100644
index 0000000..c920b0a5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouse-drag-from-frame-expected.txt
@@ -0,0 +1,5 @@
+This tests that dragging from an element that returns false from its mousedown handler will not let the subsequent mousemove events be captured by the containing frame.
+Drag started
+Received mouse move
+Received mouseup event
+PASS!
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouse-relative-position-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouse-relative-position-expected.txt
new file mode 100644
index 0000000..cfb9c50
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouse-relative-position-expected.txt
@@ -0,0 +1,8 @@
+span
+PASS simulateElementClick(testElement, [100, 100, 200, 200]); is '100, 100, 200, 200'
+PASS simulateElementClick(spanElement, [16, 10, 16, 10]); is '16, 10, 16, 10'
+PASS simulateElementClick(inputElement, [39, 9, 95, 10]); is '39, 9, 95, 10'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mousedown-in-subframe-scrollbar-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mousedown-in-subframe-scrollbar-expected.txt
new file mode 100644
index 0000000..82da401e
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mousedown-in-subframe-scrollbar-expected.txt
@@ -0,0 +1,12 @@
+This tests that clicking on a scrollbar in a frame does not clear selections in the frame.
+
+Selection: This
+is
+text
+to
+force
+a
+vertical
+scrollbar
+to
+appear.
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mousemove-from-iframe-to-top-element-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mousemove-from-iframe-to-top-element-expected.txt
new file mode 100644
index 0000000..7ed497a1
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mousemove-from-iframe-to-top-element-expected.txt
@@ -0,0 +1,32 @@
+TOP
+
+Tests that hover is lost from iframe when the mouse is moved from iframe to the element that stacked up on iframe
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS hoverBgColor is "rgb(255, 0, 0)"
+
+
+PASS events[0] is "mouseenter"
+PASS targetIds[0] is "target"
+
+
+PASS events[1] is "mousemove"
+PASS targetIds[1] is "target"
+
+
+PASS bgColor is "rgb(255, 255, 0)"
+
+
+FAIL events[2] should be mouseleave. Was mouseout.
+PASS targetIds[2] is "target"
+
+
+FAIL events[3] should be mouseout. Was mouseleave.
+PASS targetIds[3] is "target"
+
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouseover-mouseout-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouseover-mouseout-expected.txt
new file mode 100644
index 0000000..a740a2ab
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouseover-mouseout-expected.txt
@@ -0,0 +1,33 @@
+Tests for bugs 3439, 5764, 7701 - Mouse events vs. DOM manipulation.
+
+Move the mouse pointer from left to right:
+
+1              
+1              
+2
+3
+4
+5
+Log
+
+mouseover on t1_1
+mouseout on t1_1
+mouseover on t1_2
+mouseout on t1_2
+mouseover on t2_1
+mouseout on t2_1
+mouseover on t2_2
+mouseout on t2_2
+mouseover on t3_1
+mouseover on t3_2
+mouseout on t3_2
+mouseover on t4_1
+mouseover on t4_2
+mouseout on t4_2
+mouseover on t5_1
+mouseover on t5_2
+mouseout on t5_2
+mouseover on frame6
+mouseover on t6
+mouseout on t6
+mouseout on frame6
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouseup-outside-button-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouseup-outside-button-expected.txt
new file mode 100644
index 0000000..decaa33
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/mouseup-outside-button-expected.txt
@@ -0,0 +1,11 @@
+This test verifies that a button that receives a mouse down event does not receive a corresponding mouse up event when the mouse up happens outside the button.
+
+If the test passes, you'll see a PASS message below.
+
+To run this test in Safari:
+
+Mouse down inside the button.
+Move the mouse outside the button.
+Mouse up.
+
+PASS: mouse up event did not fire
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onchange-passwordfield-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onchange-passwordfield-expected.txt
new file mode 100644
index 0000000..3881b16
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onchange-passwordfield-expected.txt
@@ -0,0 +1,5 @@
+This test verifies that the ENTER key fires the change event.
+
+PASS: change event fired.
+
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onchange-range-slider-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onchange-range-slider-expected.txt
new file mode 100644
index 0000000..a0182f3
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onchange-range-slider-expected.txt
@@ -0,0 +1,8 @@
+This test verifies that updating the slider for an input element with type=range fires a change event.
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS Change event fired.
+PASS slider.value is "0"
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onchange-searchfield-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onchange-searchfield-expected.txt
new file mode 100644
index 0000000..3881b16
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onchange-searchfield-expected.txt
@@ -0,0 +1,5 @@
+This test verifies that the ENTER key fires the change event.
+
+PASS: change event fired.
+
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onchange-textfield-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onchange-textfield-expected.txt
new file mode 100644
index 0000000..3881b16
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onchange-textfield-expected.txt
@@ -0,0 +1,5 @@
+This test verifies that the ENTER key fires the change event.
+
+PASS: change event fired.
+
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onload-after-document-close-no-subresource-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onload-after-document-close-no-subresource-expected.txt
new file mode 100644
index 0000000..3132777
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onload-after-document-close-no-subresource-expected.txt
@@ -0,0 +1,4 @@
+This test verifies that the load event fires after a document.close, even if the document contains no subresources. See bug 13241.
+
+PASS: onload fired
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onload-after-document-close-with-subresource-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onload-after-document-close-with-subresource-expected.txt
new file mode 100644
index 0000000..e1cfdca8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onload-after-document-close-with-subresource-expected.txt
@@ -0,0 +1,5 @@
+This test verifies that the load event doesn't fire until subresource content has loaded, even if you manually call document.close beforehand. See bug 13241.
+
+dimensions before onload (should be { 0 x 0 }, otherwise the test will falsely pass): { 0 x 0 }
+dimensions during onload (should be { 215 x 174 }, otherwise onload fired too early): { 215 x 174 }
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onsubmit-bubbling-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onsubmit-bubbling-expected.txt
new file mode 100644
index 0000000..ea03b2b
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/onsubmit-bubbling-expected.txt
@@ -0,0 +1,4 @@
+This page tests whether the form 'submit' event bubbles to containing elements. If it passes, you'll see 'PASS' messages below.
+
+PASS: containing element div2 caught submit event
+PASS: containing element div1 caught submit event
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/page-visibility-iframe-propagation-test-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/page-visibility-iframe-propagation-test-expected.txt
new file mode 100644
index 0000000..c22e5b2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/page-visibility-iframe-propagation-test-expected.txt
@@ -0,0 +1,26 @@
+This test checks that Page Visibility state events are propagated to child frames.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Main Page:
+PASS document.visibilityState is "visible"
+PASS document.hidden is false
+Child Frame:
+PASS childFrame.contentDocument.visibilityState is "visible"
+PASS childFrame.contentDocument.hidden is false
+Main Page:
+PASS document.visibilityState is "hidden"
+PASS document.hidden is true
+Child Frame:
+PASS childFrame.contentDocument.visibilityState is "hidden"
+PASS childFrame.contentDocument.hidden is true
+Main Page:
+PASS document.visibilityState is "visible"
+PASS document.hidden is false
+Child Frame:
+PASS childFrame.contentDocument.visibilityState is "visible"
+PASS childFrame.contentDocument.hidden is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/pageshow-pagehide-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/pageshow-pagehide-expected.txt
new file mode 100644
index 0000000..ff985236
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/pageshow-pagehide-expected.txt
@@ -0,0 +1,23 @@
+Test pageshow/pagehide event behavior in subframes.
+
+***Original load - onload and pageshow events should fire for subframes, and then for main frame***
+Subsubframe window.onload
+Subsubframe window.onpageshow, target = [object HTMLDocument], persisted = false
+Subframe window.onload
+Subframe window.onpageshow, target = [object HTMLDocument], persisted = false
+Main frame window.onload
+Main frame window.onpageshow, target = [object HTMLDocument], persisted = false
+***Navigating bottom-level subframe, onpagehide events should fire for subsubframe***
+Subsubframe window.onpagehide, target = [object HTMLDocument], persisted = false
+Subsubframe window.onunload
+Subsubframe window.onload
+Subsubframe window.onpageshow, target = [object HTMLDocument], persisted = false
+***Navigating mid-level subframe, onpagehide events should fire for both subframes***
+Subframe window.onpagehide, target = [object HTMLDocument], persisted = false
+Subframe window.onunload
+Subsubframe window.onpagehide, target = [object HTMLDocument], persisted = false
+Subsubframe window.onunload
+Subframe window.onload
+Subframe window.onpageshow, target = [object HTMLDocument], persisted = false
+***Done***
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/popup-allowed-from-gesture-only-once-iframes-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/popup-allowed-from-gesture-only-once-iframes-expected.txt
new file mode 100644
index 0000000..0b5b1d2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/popup-allowed-from-gesture-only-once-iframes-expected.txt
@@ -0,0 +1,5 @@
+Test that we don't create a new user gesture indicator every time an event is passed to an iframe.
+
+To run, click on the iframe. The test passes, if only one window is opened in response to the click.
+
+PASSED
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/popup-blocked-to-post-blank-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/popup-blocked-to-post-blank-expected.txt
new file mode 100644
index 0000000..7f4325c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/popup-blocked-to-post-blank-expected.txt
@@ -0,0 +1,2 @@
+CONSOLE ERROR: Not allowed to navigate top frame to data URL: data:text/html,<script>alert(window)</script>?
+If the POST pop-up was not blocked then there will be an ALERT containing a Window object. Otherwise, the test passes.
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/popup-when-select-change-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/popup-when-select-change-expected.txt
new file mode 100644
index 0000000..444e7f8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/popup-when-select-change-expected.txt
@@ -0,0 +1,4 @@
+CONSOLE MESSAGE: line 1: PASSED
+abcd
+efgh
+ If the pop-up was not blocked then there will be an PASS message. Otherwise, the test fails.
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/programmatic-check-no-change-event-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/programmatic-check-no-change-event-expected.txt
new file mode 100644
index 0000000..a1c2c893
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/programmatic-check-no-change-event-expected.txt
@@ -0,0 +1,4 @@
+This test checks that programmaticly changing the checked state of a checkbox does not fire the "change" event (but user action like calling "click" does).
+
+PASS: got exactly one change event.
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/remove-text-node-in-mouseup-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/remove-text-node-in-mouseup-expected.txt
new file mode 100644
index 0000000..fefaf6ab
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/remove-text-node-in-mouseup-expected.txt
@@ -0,0 +1,3 @@
+This test ensures Blink does fire a click event on the parent element of a clicked text node even when the text node has been removed in mouseup event.
+
+PASS
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/resize-raf-timing-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/resize-raf-timing-expected.txt
new file mode 100644
index 0000000..8d2a495
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/resize-raf-timing-expected.txt
@@ -0,0 +1,9 @@
+Test that resize events are fired at requestAnimationFrame timing
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS resizeEventCount is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/right-click-focus-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/right-click-focus-expected.txt
new file mode 100644
index 0000000..e70f436
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/right-click-focus-expected.txt
@@ -0,0 +1,4 @@
+Test that right-clicking on a text area properly focuses it.
+
+PASS
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/space-scroll-textinput-canceled-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/space-scroll-textinput-canceled-expected.txt
new file mode 100644
index 0000000..b8f95e32
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/space-scroll-textinput-canceled-expected.txt
@@ -0,0 +1,7 @@
+Tests that page shouldn't scroll when you hit space key on input field and 'textInput' event was canceled.
+
+PASS document.scrollingElement.scrollTop became 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/special-key-events-in-input-text-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/special-key-events-in-input-text-expected.txt
new file mode 100644
index 0000000..86acedc
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/special-key-events-in-input-text-expected.txt
@@ -0,0 +1,48 @@
+This test verifies that the correct sequence of keyboard events is generated for a keypress for certain special keys. To test manually, press keys and compare results to other browsers.
+
+target - type - ctrlKey,altKey,shiftKey,metaKey - key - keyCode - charCode
+
+Ampersand:
+INPUT - keydown - false,false,true,false -7- 55 - 0. Value: "".
+INPUT - keypress - false,false,true,false -7- 55 - 55. Value: "".
+INPUT - textInput - 7. Value: "".
+INPUT - keyup - false,false,true,false -7- 55 - 0. Value: "7".
+
+Backspace:
+INPUT - keydown - false,false,false,false -Backspace- 8 - 0. Value: "7".
+INPUT - keyup - false,false,false,false -Backspace- 8 - 0. Value: "".
+
+Percent:
+INPUT - keydown - false,false,true,false -5- 53 - 0. Value: "".
+INPUT - keypress - false,false,true,false -5- 53 - 53. Value: "".
+INPUT - textInput - 5. Value: "".
+INPUT - keyup - false,false,true,false -5- 53 - 0. Value: "5".
+
+Backspace:
+INPUT - keydown - false,false,false,false -Backspace- 8 - 0. Value: "5".
+INPUT - keyup - false,false,false,false -Backspace- 8 - 0. Value: "".
+
+Left parenthesis:
+INPUT - keydown - false,false,true,false -9- 57 - 0. Value: "".
+INPUT - keypress - false,false,true,false -9- 57 - 57. Value: "".
+INPUT - textInput - 9. Value: "".
+INPUT - keyup - false,false,true,false -9- 57 - 0. Value: "9".
+
+Backspace:
+INPUT - keydown - false,false,false,false -Backspace- 8 - 0. Value: "9".
+INPUT - keyup - false,false,false,false -Backspace- 8 - 0. Value: "".
+
+Right parenthesis:
+INPUT - keydown - false,false,true,false -0- 48 - 0. Value: "".
+INPUT - keypress - false,false,true,false -0- 48 - 48. Value: "".
+INPUT - textInput - 0. Value: "".
+INPUT - keyup - false,false,true,false -0- 48 - 0. Value: "0".
+
+Backspace:
+INPUT - keydown - false,false,false,false -Backspace- 8 - 0. Value: "0".
+INPUT - keyup - false,false,false,false -Backspace- 8 - 0. Value: "".
+
+Print screen:
+INPUT - keydown - false,false,false,false -PrintScreen- 44 - 0. Value: "".
+INPUT - keyup - false,false,false,false -PrintScreen- 44 - 0. Value: "".
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/stop-load-in-unload-handler-using-document-write-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/stop-load-in-unload-handler-using-document-write-expected.txt
new file mode 100644
index 0000000..69cfc5a9
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/stop-load-in-unload-handler-using-document-write-expected.txt
@@ -0,0 +1,2 @@
+PASS
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/stop-load-in-unload-handler-using-window-stop-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/stop-load-in-unload-handler-using-window-stop-expected.txt
new file mode 100644
index 0000000..69cfc5a9
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/stop-load-in-unload-handler-using-window-stop-expected.txt
@@ -0,0 +1,2 @@
+PASS
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/tab-crash-with-image-map-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/tab-crash-with-image-map-expected.txt
new file mode 100644
index 0000000..b639bfc
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/tab-crash-with-image-map-expected.txt
@@ -0,0 +1,9 @@
+Test passes if there is no crash
+
+Google (tabindex 5)
+
+Yahoo (tabindex 2)
+
+Google (tabindex 4)
+
+Yahoo (tabindex 6)
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt
new file mode 100644
index 0000000..734fd82
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt
@@ -0,0 +1,32 @@
+Verify that in the absence of any reason to adjust into an iframe, taps are handle in the frame matching the center point of the tap. bug 401504
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Sending GestureTap on top of iframe
+PASS sawClick is false
+
+
+Sending GestureTap above iframe
+Received click on DIV#container
+PASS sawClick is true
+
+
+Sending GestureTap to the left of iframe
+Received click on DIV#container
+PASS sawClick is true
+
+
+Sending GestureTap to the right of iframe
+Received click on DIV#container
+PASS sawClick is true
+
+
+Sending GestureTap below iframe
+Received click on DIV#container
+PASS sawClick is true
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt
new file mode 100644
index 0000000..77563f6
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt
@@ -0,0 +1,13 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+This test checks long press behavior inside an iframe when both touch drag/drop and touch editing are enabled.
+1. Check that long press on a draggable element starts drag.
+2. Check that long press on non-draggable text selects the text.
+3. Check that long press on selected text starts drag.
+
+Testing
+PASS
+FAIL
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt
new file mode 100644
index 0000000..0fcf7182
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt
@@ -0,0 +1,10 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+This test checks that a long press gesture on a draggable element in an iframe starts a drag/drop session.
+
+Testing
+FAIL
+PASS
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt
new file mode 100644
index 0000000..0fcf7182
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt
@@ -0,0 +1,10 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+This test checks that a long press gesture on a draggable element in an iframe starts a drag/drop session.
+
+Testing
+FAIL
+PASS
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt
new file mode 100644
index 0000000..8d21fc7b
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt
@@ -0,0 +1,8 @@
+This test passes if it doesn't trigger an ASSERT - crbug.com/254203
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt
new file mode 100644
index 0000000..b842570
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt
@@ -0,0 +1,8 @@
+This test passes if it doesn't trigger an ASSERT - crbug.com/285299
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/window-onerror-sandbox-01-expected.txt b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/window-onerror-sandbox-01-expected.txt
new file mode 100644
index 0000000..d8741d6
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/mouseevent_fractional/fast/events/window-onerror-sandbox-01-expected.txt
@@ -0,0 +1,10 @@
+CONSOLE ERROR: line 6: Uncaught ReferenceError: hahaha_good_luck_finding_me is not defined
+This test should trigger 'window.onerror' inside the sandboxed iframe, and successfully handle the error.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS message is "Uncaught ReferenceError: hahaha_good_luck_finding_me is not defined"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/not-site-per-process/http/tests/local/drag-over-remote-content-expected.txt b/third_party/blink/web_tests/virtual/not-site-per-process/http/tests/local/drag-over-remote-content-expected.txt
new file mode 100644
index 0000000..52fb975a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/not-site-per-process/http/tests/local/drag-over-remote-content-expected.txt
@@ -0,0 +1,9 @@
+This page just embeds drag-over-remote-content-iframe.html in an iframe. See its results below:
+
+This page tests the URL the DOM sees while the user drags a file. If the test passes, you'll see a PASS message.
+
+https://bugs.webkit.org/show_bug.cgi?id=25907 | rdar://problem/6910832.
+
+To test, drag Abe's image into this light blue div.
+PASS: ondragover saw a URL of ''
+
diff --git a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.txt b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.txt
new file mode 100644
index 0000000..48c4496
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/border-box-rect-clips-scrollbars-expected.txt
@@ -0,0 +1,9 @@
+Every scrollbar should be cut off at the dotted line.
+
+ 
+ 
+ 
+ 
+ 
+ 
+ 
diff --git a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbar-position-crash-expected.txt b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbar-position-crash-expected.txt
new file mode 100644
index 0000000..f0ebd2c50a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbar-position-crash-expected.txt
@@ -0,0 +1,2 @@
+PAS
+S
diff --git a/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt b/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt
new file mode 100644
index 0000000..734fd82
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt
@@ -0,0 +1,32 @@
+Verify that in the absence of any reason to adjust into an iframe, taps are handle in the frame matching the center point of the tap. bug 401504
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Sending GestureTap on top of iframe
+PASS sawClick is false
+
+
+Sending GestureTap above iframe
+Received click on DIV#container
+PASS sawClick is true
+
+
+Sending GestureTap to the left of iframe
+Received click on DIV#container
+PASS sawClick is true
+
+
+Sending GestureTap to the right of iframe
+Received click on DIV#container
+PASS sawClick is true
+
+
+Sending GestureTap below iframe
+Received click on DIV#container
+PASS sawClick is true
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt b/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt
new file mode 100644
index 0000000..77563f6
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt
@@ -0,0 +1,13 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+This test checks long press behavior inside an iframe when both touch drag/drop and touch editing are enabled.
+1. Check that long press on a draggable element starts drag.
+2. Check that long press on non-draggable text selects the text.
+3. Check that long press on selected text starts drag.
+
+Testing
+PASS
+FAIL
diff --git a/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt b/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt
new file mode 100644
index 0000000..0fcf7182
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt
@@ -0,0 +1,10 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+This test checks that a long press gesture on a draggable element in an iframe starts a drag/drop session.
+
+Testing
+FAIL
+PASS
diff --git a/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt b/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt
new file mode 100644
index 0000000..0fcf7182
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt
@@ -0,0 +1,10 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+This test checks that a long press gesture on a draggable element in an iframe starts a drag/drop session.
+
+Testing
+FAIL
+PASS
diff --git a/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt b/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt
new file mode 100644
index 0000000..8d21fc7b
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt
@@ -0,0 +1,8 @@
+This test passes if it doesn't trigger an ASSERT - crbug.com/254203
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt b/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt
new file mode 100644
index 0000000..b842570
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/scroll_customization/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt
@@ -0,0 +1,8 @@
+This test passes if it doesn't trigger an ASSERT - crbug.com/285299
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-image-object-fit-expected.txt b/third_party/blink/web_tests/virtual/threaded/compositing/visibility/visibility-image-layers-expected.txt
similarity index 100%
rename from third_party/blink/web_tests/flag-specific/enable-blink-features=LayoutNG/images/color-profile-image-object-fit-expected.txt
rename to third_party/blink/web_tests/virtual/threaded/compositing/visibility/visibility-image-layers-expected.txt
diff --git a/third_party/blink/web_tests/virtual/threaded/printing/viewport-size-dependant-iframe-with-multicol-crash-expected.txt b/third_party/blink/web_tests/virtual/threaded/printing/viewport-size-dependant-iframe-with-multicol-crash-expected.txt
new file mode 100644
index 0000000..b87dec6
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/threaded/printing/viewport-size-dependant-iframe-with-multicol-crash-expected.txt
@@ -0,0 +1 @@
+PASS if no crash or assertion failure.
diff --git a/third_party/blink/web_tests/virtual/threaded/printing/webgl-oversized-printing-expected.txt b/third_party/blink/web_tests/virtual/threaded/printing/webgl-oversized-printing-expected.txt
new file mode 100644
index 0000000..3a6412b
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/threaded/printing/webgl-oversized-printing-expected.txt
@@ -0,0 +1,5 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS Printed without crashing.
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/Location/window-shadow-location-using-js-object-with-toString-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/Location/window-shadow-location-using-js-object-with-toString-expected.txt
new file mode 100644
index 0000000..6b0d58a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/Location/window-shadow-location-using-js-object-with-toString-expected.txt
@@ -0,0 +1,5 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS result is 'pass.html'
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/Location/window-shadow-location-using-string-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/Location/window-shadow-location-using-string-expected.txt
new file mode 100644
index 0000000..6b0d58a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/Location/window-shadow-location-using-string-expected.txt
@@ -0,0 +1,5 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS result is 'pass.html'
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/anonymous-slot-with-changes-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/anonymous-slot-with-changes-expected.txt
new file mode 100644
index 0000000..23f9d0d
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/anonymous-slot-with-changes-expected.txt
@@ -0,0 +1,63 @@
+Tests that we clone object hierarchies
+PASS: 'postMessage((function(){}))' threw DataCloneError: Failed to execute 'postMessage' on 'Window': function(){} could not be cloned.
+PASS: eventData is null of type object
+PASS: eventData is null of type object
+PASS: eventData is null of type object
+PASS: eventData is null of type object
+PASS: eventData is null of type object
+PASS: eventData is undefined of type undefined
+PASS: eventData is undefined of type undefined
+PASS: eventData is undefined of type undefined
+PASS: eventData is undefined of type undefined
+PASS: eventData is undefined of type undefined
+PASS: eventData is 1 of type number
+PASS: eventData is 1 of type number
+PASS: eventData is 1 of type number
+PASS: eventData is 1 of type number
+PASS: eventData is 1 of type number
+PASS: eventData is true of type boolean
+PASS: eventData is true of type boolean
+PASS: eventData is true of type boolean
+PASS: eventData is true of type boolean
+PASS: eventData is true of type boolean
+PASS: eventData is 1 of type string
+PASS: eventData is 1 of type string
+PASS: eventData is 1 of type string
+PASS: eventData is 1 of type string
+PASS: eventData is 1 of type string
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is of type object
+PASS: eventData is of type object
+PASS: eventData is of type object
+PASS: eventData is of type object
+PASS: eventData is of type object
+PASS: eventData is 1,2,3 of type object
+PASS: eventData is 1,2,3 of type object
+PASS: eventData is 1,2,3 of type object
+PASS: eventData is 1,2,3 of type object
+PASS: eventData is 1,2,3 of type object
+PASS: eventData is ,,1 of type object
+PASS: eventData is ,,1 of type object
+PASS: eventData is ,,1 of type object
+PASS: eventData is ,,1 of type object
+PASS: eventData is ,,1 of type object
+PASS: eventData is 2009-02-13T23:31:30.000Z of type object
+PASS: eventData is 2009-02-13T23:31:30.000Z of type object
+PASS: eventData is 2009-02-13T23:31:30.000Z of type object
+PASS: eventData is 2009-02-13T23:31:30.000Z of type object
+PASS: eventData is 2009-02-13T23:31:30.000Z of type object
+PASS: eventData is done of type string
+PASS: eventData is done of type string
+PASS: eventData is done of type string
+PASS: eventData is done of type string
+PASS: eventData is done of type string
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/closure-access-after-navigation-iframe-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/closure-access-after-navigation-iframe-expected.txt
new file mode 100644
index 0000000..53ee75a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/closure-access-after-navigation-iframe-expected.txt
@@ -0,0 +1,15 @@
+Child 1 loaded.
+Child 1 objects set.
+getObjectOfChild1().myVal = child1
+getGlobalOfChild1().myGlobalVal = child1
+Child 2 loaded.
+getObjectOfChild1().myVal = child1
+getGlobalOfChild1().myGlobalVal = child1
+Child 2 objects set.
+getObjectOfChild1().myVal = child1
+getGlobalOfChild1().myGlobalVal = child1
+getObjectOfChild2().myVal = child2
+getGlobalOfChild2().myGlobalVal = child2
+getObjectOfParent().myVal = parent
+getGlobalOfParent().myGlobalVal = parent
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/dom-access-from-closure-iframe-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/dom-access-from-closure-iframe-expected.txt
new file mode 100644
index 0000000..e3238d4c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/dom-access-from-closure-iframe-expected.txt
@@ -0,0 +1,5 @@
+document.URL: fast/dom/Window/resources/dom-access-from-closure-iframe-child.html
+window.document.URL: fast/dom/Window/resources/notify-parent-done.html
+name: child
+window.name: child
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/es52-globals-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/es52-globals-expected.txt
new file mode 100644
index 0000000..b7d3026f
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/es52-globals-expected.txt
@@ -0,0 +1,16 @@
+PASS window.hasOwnProperty("Element") is true
+PASS window.hasOwnProperty("x") is true
+PASS window.hasOwnProperty("y") is false
+FAIL window.hasOwnProperty("f") should be true. Was false.
+FAIL window.hasOwnProperty("div") should be true. Was false.
+FAIL window.hasOwnProperty("a") should be true. Was false.
+PASS Element is not undefined
+PASS x is 1
+PASS y is undefined.
+PASS f is undefined.
+PASS div is undefined.
+PASS a is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/file-origin-window-open-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/file-origin-window-open-expected.txt
new file mode 100644
index 0000000..fdb87ea6
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/file-origin-window-open-expected.txt
@@ -0,0 +1,9 @@
+Test that web settings are applied early enough when creating a new view: if the settings are applied to late, a new window created by a file:// URL will have universal access even if universal access is not enabled.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS SecurityError: Blocked a frame with origin "null" from accessing a cross-origin frame.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/navigated-window-properties-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/navigated-window-properties-expected.txt
new file mode 100644
index 0000000..2498418
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/navigated-window-properties-expected.txt
@@ -0,0 +1 @@
+Accessing properties of a navigated window shouldn't crash
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-in-closure-after-navigation-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-in-closure-after-navigation-expected.txt
new file mode 100644
index 0000000..1579b43
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-in-closure-after-navigation-expected.txt
@@ -0,0 +1,12 @@
+Test that an inner global captured in a closure acts as if its creating context is detached when the creating context is navigated.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS window is self
+PASS window is frames
+PASS parent is top
+PASS window is non-null.
+FAIL self should be non-null. Was null
+FAIL frames should be non-null. Was null
+PASS parent is null.
+PASS top is null.
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
new file mode 100644
index 0000000..56f72c0
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
@@ -0,0 +1,121 @@
+CONSOLE WARNING: line 121: 'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage' or 'navigator.webkitPersistentStorage' instead.
+Tests access of cached DOMWindow properties after the associated frame is removed from a web page and garbage collected. Test should not crash and properties should be set to sane defaults.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS window.cached_applicationCache.oncached is null
+PASS window.cached_applicationCache.onchecking is null
+PASS window.cached_applicationCache.ondownloading is null
+PASS window.cached_applicationCache.onerror is null
+PASS window.cached_applicationCache.onnoupdate is null
+PASS window.cached_applicationCache.onobsolete is null
+PASS window.cached_applicationCache.onprogress is null
+PASS window.cached_applicationCache.onupdateready is null
+PASS window.cached_applicationCache.status is 0
+PASS window.cached_cookieStore.onchange is null
+FAIL window.cached_location.hash should be  (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.host should be  (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.hostname should be  (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.href should be about:blank (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.origin should be null (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.pathname should be blank (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.port should be  (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.protocol should be about: (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.search should be  (of type string). Was undefined (of type undefined).
+PASS window.cached_location_ancestorOrigins.length is 1
+PASS window.cached_locationbar.visible is false
+PASS window.cached_menubar.visible is false
+PASS window.cached_navigator.appCodeName is window.navigator.appCodeName
+PASS window.cached_navigator.appName is window.navigator.appName
+PASS window.cached_navigator.appVersion is ''
+PASS window.cached_navigator.cookieEnabled is false
+PASS window.cached_navigator.deviceMemory is window.navigator.deviceMemory
+PASS window.cached_navigator.doNotTrack is null
+PASS window.cached_navigator.hardwareConcurrency is window.navigator.hardwareConcurrency
+PASS window.cached_navigator.language is window.navigator.language
+PASS window.cached_navigator.maxTouchPoints is 0
+PASS window.cached_navigator.onLine is window.navigator.onLine
+PASS window.cached_navigator.platform is window.navigator.platform
+PASS window.cached_navigator.product is window.navigator.product
+PASS window.cached_navigator.productSub is window.navigator.productSub
+PASS window.cached_navigator.userAgent is ''
+PASS window.cached_navigator.vendor is window.navigator.vendor
+PASS window.cached_navigator.vendorSub is ''
+PASS window.cached_navigator_connection.onchange is null
+PASS window.cached_navigator_connection.ontypechange is null
+PASS window.cached_navigator_connection.saveData is false
+PASS window.cached_navigator_mediaDevices.ondevicechange is null
+PASS window.cached_navigator_mediaSession.metadata is null
+PASS window.cached_navigator_mediaSession.playbackState is 'none'
+PASS window.cached_navigator_presentation.defaultRequest is null
+PASS window.cached_navigator_presentation.receiver is null
+PASS window.cached_navigator_serial.onconnect is null
+PASS window.cached_navigator_serial.ondisconnect is null
+PASS window.cached_navigator_serviceWorker.controller is null
+PASS window.cached_navigator_serviceWorker.oncontrollerchange is null
+PASS window.cached_navigator_serviceWorker.onmessage is null
+PASS window.cached_navigator_usb.onconnect is null
+PASS window.cached_navigator_usb.ondisconnect is null
+PASS window.cached_navigator_userActivation.hasBeenActive is false
+PASS window.cached_navigator_userActivation.isActive is false
+PASS window.cached_navigator_xr.ondevicechange is null
+PASS window.cached_performance.oneventtimingbufferfull is null
+PASS window.cached_performance.onresourcetimingbufferfull is null
+PASS window.cached_performance.shouldYield is false
+PASS window.cached_performance_navigation.redirectCount is 0
+PASS window.cached_performance_navigation.type is 0
+PASS window.cached_performance_timing.connectEnd is 0
+PASS window.cached_performance_timing.connectStart is 0
+PASS window.cached_performance_timing.domComplete is 0
+PASS window.cached_performance_timing.domContentLoadedEventEnd is 0
+PASS window.cached_performance_timing.domContentLoadedEventStart is 0
+PASS window.cached_performance_timing.domInteractive is 0
+PASS window.cached_performance_timing.domLoading is 0
+PASS window.cached_performance_timing.domainLookupEnd is 0
+PASS window.cached_performance_timing.domainLookupStart is 0
+PASS window.cached_performance_timing.fetchStart is 0
+PASS window.cached_performance_timing.loadEventEnd is 0
+PASS window.cached_performance_timing.loadEventStart is 0
+PASS window.cached_performance_timing.navigationStart is 0
+PASS window.cached_performance_timing.redirectEnd is 0
+PASS window.cached_performance_timing.redirectStart is 0
+PASS window.cached_performance_timing.requestStart is 0
+PASS window.cached_performance_timing.responseEnd is 0
+PASS window.cached_performance_timing.responseStart is 0
+PASS window.cached_performance_timing.secureConnectionStart is 0
+PASS window.cached_performance_timing.unloadEventEnd is 0
+PASS window.cached_performance_timing.unloadEventStart is 0
+PASS window.cached_personalbar.visible is false
+PASS window.cached_screen.availHeight is 0
+PASS window.cached_screen.availLeft is 0
+PASS window.cached_screen.availTop is 0
+PASS window.cached_screen.availWidth is 0
+PASS window.cached_screen.colorDepth is 0
+PASS window.cached_screen.height is 0
+PASS window.cached_screen.keepAwake is false
+PASS window.cached_screen.pixelDepth is 0
+PASS window.cached_screen.width is 0
+PASS window.cached_screen_orientation.angle is 0
+PASS window.cached_screen_orientation.onchange is null
+PASS window.cached_screen_orientation.type is 'portrait-primary'
+PASS window.cached_scrollbars.visible is false
+PASS window.cached_speechSynthesis.onvoiceschanged is null
+PASS window.cached_speechSynthesis.paused is false
+PASS window.cached_speechSynthesis.pending is false
+PASS window.cached_speechSynthesis.speaking is false
+PASS window.cached_statusbar.visible is false
+PASS window.cached_styleMedia.type is ''
+PASS window.cached_toolbar.visible is false
+PASS window.cached_visualViewport.height is 0
+PASS window.cached_visualViewport.offsetLeft is 0
+PASS window.cached_visualViewport.offsetTop is 0
+PASS window.cached_visualViewport.onresize is null
+PASS window.cached_visualViewport.onscroll is null
+PASS window.cached_visualViewport.pageLeft is 0
+PASS window.cached_visualViewport.pageTop is 0
+PASS window.cached_visualViewport.scale is 0
+PASS window.cached_visualViewport.width is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
new file mode 100644
index 0000000..0e46b5e8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
@@ -0,0 +1,121 @@
+CONSOLE WARNING: line 121: 'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage' or 'navigator.webkitPersistentStorage' instead.
+Tests access of cached DOMWindow properties after the associated frame is no longer in a web page. Test should not crash and properties should be set to sane defaults.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS window.cached_applicationCache.oncached is null
+PASS window.cached_applicationCache.onchecking is null
+PASS window.cached_applicationCache.ondownloading is null
+PASS window.cached_applicationCache.onerror is null
+PASS window.cached_applicationCache.onnoupdate is null
+PASS window.cached_applicationCache.onobsolete is null
+PASS window.cached_applicationCache.onprogress is null
+PASS window.cached_applicationCache.onupdateready is null
+PASS window.cached_applicationCache.status is 0
+PASS window.cached_cookieStore.onchange is null
+FAIL window.cached_location.hash should be  (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.host should be  (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.hostname should be  (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.href should be about:blank (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.origin should be null (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.pathname should be blank (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.port should be  (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.protocol should be about: (of type string). Was undefined (of type undefined).
+FAIL window.cached_location.search should be  (of type string). Was undefined (of type undefined).
+PASS window.cached_location_ancestorOrigins.length is 1
+PASS window.cached_locationbar.visible is false
+PASS window.cached_menubar.visible is false
+PASS window.cached_navigator.appCodeName is window.navigator.appCodeName
+PASS window.cached_navigator.appName is window.navigator.appName
+PASS window.cached_navigator.appVersion is ''
+PASS window.cached_navigator.cookieEnabled is false
+PASS window.cached_navigator.deviceMemory is window.navigator.deviceMemory
+PASS window.cached_navigator.doNotTrack is null
+PASS window.cached_navigator.hardwareConcurrency is window.navigator.hardwareConcurrency
+PASS window.cached_navigator.language is window.navigator.language
+PASS window.cached_navigator.maxTouchPoints is 0
+PASS window.cached_navigator.onLine is window.navigator.onLine
+PASS window.cached_navigator.platform is window.navigator.platform
+PASS window.cached_navigator.product is window.navigator.product
+PASS window.cached_navigator.productSub is window.navigator.productSub
+PASS window.cached_navigator.userAgent is ''
+PASS window.cached_navigator.vendor is window.navigator.vendor
+PASS window.cached_navigator.vendorSub is ''
+PASS window.cached_navigator_connection.onchange is null
+PASS window.cached_navigator_connection.ontypechange is null
+PASS window.cached_navigator_connection.saveData is false
+PASS window.cached_navigator_mediaDevices.ondevicechange is null
+PASS window.cached_navigator_mediaSession.metadata is null
+PASS window.cached_navigator_mediaSession.playbackState is 'none'
+PASS window.cached_navigator_presentation.defaultRequest is null
+PASS window.cached_navigator_presentation.receiver is null
+PASS window.cached_navigator_serial.onconnect is null
+PASS window.cached_navigator_serial.ondisconnect is null
+PASS window.cached_navigator_serviceWorker.controller is null
+PASS window.cached_navigator_serviceWorker.oncontrollerchange is null
+PASS window.cached_navigator_serviceWorker.onmessage is null
+PASS window.cached_navigator_usb.onconnect is null
+PASS window.cached_navigator_usb.ondisconnect is null
+PASS window.cached_navigator_userActivation.hasBeenActive is false
+PASS window.cached_navigator_userActivation.isActive is false
+PASS window.cached_navigator_xr.ondevicechange is null
+PASS window.cached_performance.oneventtimingbufferfull is null
+PASS window.cached_performance.onresourcetimingbufferfull is null
+PASS window.cached_performance.shouldYield is false
+PASS window.cached_performance_navigation.redirectCount is 0
+PASS window.cached_performance_navigation.type is 0
+PASS window.cached_performance_timing.connectEnd is 0
+PASS window.cached_performance_timing.connectStart is 0
+PASS window.cached_performance_timing.domComplete is 0
+PASS window.cached_performance_timing.domContentLoadedEventEnd is 0
+PASS window.cached_performance_timing.domContentLoadedEventStart is 0
+PASS window.cached_performance_timing.domInteractive is 0
+PASS window.cached_performance_timing.domLoading is 0
+PASS window.cached_performance_timing.domainLookupEnd is 0
+PASS window.cached_performance_timing.domainLookupStart is 0
+PASS window.cached_performance_timing.fetchStart is 0
+PASS window.cached_performance_timing.loadEventEnd is 0
+PASS window.cached_performance_timing.loadEventStart is 0
+PASS window.cached_performance_timing.navigationStart is 0
+PASS window.cached_performance_timing.redirectEnd is 0
+PASS window.cached_performance_timing.redirectStart is 0
+PASS window.cached_performance_timing.requestStart is 0
+PASS window.cached_performance_timing.responseEnd is 0
+PASS window.cached_performance_timing.responseStart is 0
+PASS window.cached_performance_timing.secureConnectionStart is 0
+PASS window.cached_performance_timing.unloadEventEnd is 0
+PASS window.cached_performance_timing.unloadEventStart is 0
+PASS window.cached_personalbar.visible is false
+PASS window.cached_screen.availHeight is 0
+PASS window.cached_screen.availLeft is 0
+PASS window.cached_screen.availTop is 0
+PASS window.cached_screen.availWidth is 0
+PASS window.cached_screen.colorDepth is 0
+PASS window.cached_screen.height is 0
+PASS window.cached_screen.keepAwake is false
+PASS window.cached_screen.pixelDepth is 0
+PASS window.cached_screen.width is 0
+PASS window.cached_screen_orientation.angle is 0
+PASS window.cached_screen_orientation.onchange is null
+PASS window.cached_screen_orientation.type is 'portrait-primary'
+PASS window.cached_scrollbars.visible is false
+PASS window.cached_speechSynthesis.onvoiceschanged is null
+PASS window.cached_speechSynthesis.paused is false
+PASS window.cached_speechSynthesis.pending is false
+PASS window.cached_speechSynthesis.speaking is false
+PASS window.cached_statusbar.visible is false
+PASS window.cached_styleMedia.type is ''
+PASS window.cached_toolbar.visible is false
+PASS window.cached_visualViewport.height is 0
+PASS window.cached_visualViewport.offsetLeft is 0
+PASS window.cached_visualViewport.offsetTop is 0
+PASS window.cached_visualViewport.onresize is null
+PASS window.cached_visualViewport.onscroll is null
+PASS window.cached_visualViewport.pageLeft is 0
+PASS window.cached_visualViewport.pageTop is 0
+PASS window.cached_visualViewport.scale is 0
+PASS window.cached_visualViewport.width is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt
new file mode 100644
index 0000000..bd8e4ec0
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt
@@ -0,0 +1,190 @@
+CONSOLE WARNING: line 121: 'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage' or 'navigator.webkitPersistentStorage' instead.
+Tests property access on a cached DOMWindow after the associated frame is removed from a web page and garbage collected. Test should not crash and properties should be set to sane defaults.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS childWindow.closed is true
+PASS childWindow.defaultStatus is ''
+PASS childWindow.defaultstatus is ''
+PASS childWindow.devicePixelRatio is 0
+PASS childWindow.innerHeight is 0
+PASS childWindow.innerWidth is 0
+PASS childWindow.isSecureContext is false
+PASS childWindow.length is 0
+PASS childWindow.locationbar.visible is false
+PASS childWindow.menubar.visible is false
+PASS childWindow.name is ''
+PASS childWindow.navigator.appCodeName is window.navigator.appCodeName
+PASS childWindow.navigator.appName is window.navigator.appName
+PASS childWindow.navigator.appVersion is ''
+PASS childWindow.navigator.cookieEnabled is false
+PASS childWindow.navigator.doNotTrack is null
+PASS childWindow.navigator.hardwareConcurrency is window.navigator.hardwareConcurrency
+PASS childWindow.navigator.language is window.navigator.language
+PASS childWindow.navigator.maxTouchPoints is 0
+PASS childWindow.navigator.mediaDevices.ondevicechange is null
+PASS childWindow.navigator.mediaSession.metadata is null
+PASS childWindow.navigator.mediaSession.playbackState is 'none'
+PASS childWindow.navigator.onLine is window.navigator.onLine
+PASS childWindow.navigator.platform is window.navigator.platform
+PASS childWindow.navigator.product is window.navigator.product
+PASS childWindow.navigator.productSub is window.navigator.productSub
+PASS childWindow.navigator.userActivation.hasBeenActive is false
+PASS childWindow.navigator.userActivation.isActive is false
+PASS childWindow.navigator.userAgent is ''
+PASS childWindow.navigator.vendor is window.navigator.vendor
+PASS childWindow.navigator.vendorSub is ''
+PASS childWindow.onabort is null
+PASS childWindow.onactivateinvisible is null
+PASS childWindow.onafterprint is null
+PASS childWindow.onanimationend is null
+PASS childWindow.onanimationiteration is null
+PASS childWindow.onanimationstart is null
+PASS childWindow.onappinstalled is null
+PASS childWindow.onauxclick is null
+PASS childWindow.onbeforeinstallprompt is null
+PASS childWindow.onbeforeprint is null
+PASS childWindow.onbeforeunload is null
+PASS childWindow.onblur is null
+PASS childWindow.oncancel is null
+PASS childWindow.oncanplay is null
+PASS childWindow.oncanplaythrough is null
+PASS childWindow.onchange is null
+PASS childWindow.onclick is null
+PASS childWindow.onclose is null
+PASS childWindow.oncontextmenu is null
+PASS childWindow.oncuechange is null
+PASS childWindow.ondblclick is null
+PASS childWindow.ondevicemotion is null
+PASS childWindow.ondeviceorientation is null
+PASS childWindow.ondeviceorientationabsolute is null
+PASS childWindow.ondrag is null
+PASS childWindow.ondragend is null
+PASS childWindow.ondragenter is null
+PASS childWindow.ondragleave is null
+PASS childWindow.ondragover is null
+PASS childWindow.ondragstart is null
+PASS childWindow.ondrop is null
+PASS childWindow.ondurationchange is null
+PASS childWindow.onemptied is null
+PASS childWindow.onended is null
+PASS childWindow.onerror is null
+PASS childWindow.onfocus is null
+PASS childWindow.onformdata is null
+PASS childWindow.ongotpointercapture is null
+PASS childWindow.onhashchange is null
+PASS childWindow.oninput is null
+PASS childWindow.oninvalid is null
+PASS childWindow.onkeydown is null
+PASS childWindow.onkeypress is null
+PASS childWindow.onkeyup is null
+PASS childWindow.onlanguagechange is null
+PASS childWindow.onload is null
+PASS childWindow.onloadeddata is null
+PASS childWindow.onloadedmetadata is null
+PASS childWindow.onloadstart is null
+PASS childWindow.onlostpointercapture is null
+PASS childWindow.onmessage is null
+PASS childWindow.onmessageerror is null
+PASS childWindow.onmousedown is null
+PASS childWindow.onmouseenter is null
+PASS childWindow.onmouseleave is null
+PASS childWindow.onmousemove is null
+PASS childWindow.onmouseout is null
+PASS childWindow.onmouseover is null
+PASS childWindow.onmouseup is null
+PASS childWindow.onmousewheel is null
+PASS childWindow.onoffline is null
+PASS childWindow.ononline is null
+PASS childWindow.onpagehide is null
+PASS childWindow.onpageshow is null
+PASS childWindow.onpause is null
+PASS childWindow.onplay is null
+PASS childWindow.onplaying is null
+PASS childWindow.onpointercancel is null
+PASS childWindow.onpointerdown is null
+PASS childWindow.onpointerenter is null
+PASS childWindow.onpointerleave is null
+PASS childWindow.onpointermove is null
+PASS childWindow.onpointerout is null
+PASS childWindow.onpointerover is null
+PASS childWindow.onpointerrawmove is null
+PASS childWindow.onpointerup is null
+PASS childWindow.onpopstate is null
+PASS childWindow.onprogress is null
+PASS childWindow.onratechange is null
+PASS childWindow.onrejectionhandled is null
+PASS childWindow.onreset is null
+PASS childWindow.onresize is null
+PASS childWindow.onscroll is null
+PASS childWindow.onsearch is null
+PASS childWindow.onseeked is null
+PASS childWindow.onseeking is null
+PASS childWindow.onselect is null
+PASS childWindow.onselectionchange is null
+PASS childWindow.onselectstart is null
+PASS childWindow.onstalled is null
+PASS childWindow.onstorage is null
+PASS childWindow.onsubmit is null
+PASS childWindow.onsuspend is null
+PASS childWindow.ontimeupdate is null
+PASS childWindow.ontoggle is null
+PASS childWindow.ontouchcancel is null
+PASS childWindow.ontouchend is null
+PASS childWindow.ontouchmove is null
+PASS childWindow.ontouchstart is null
+PASS childWindow.ontransitionend is null
+PASS childWindow.onunhandledrejection is null
+PASS childWindow.onunload is null
+PASS childWindow.onvolumechange is null
+PASS childWindow.onwaiting is null
+PASS childWindow.onwebkitanimationend is null
+PASS childWindow.onwebkitanimationiteration is null
+PASS childWindow.onwebkitanimationstart is null
+PASS childWindow.onwebkittransitionend is null
+PASS childWindow.onwheel is null
+PASS childWindow.opener is null
+PASS childWindow.origin is 'file://'
+PASS childWindow.outerHeight is 0
+PASS childWindow.outerWidth is 0
+PASS childWindow.pageXOffset is 0
+PASS childWindow.pageYOffset is 0
+PASS childWindow.performance.onresourcetimingbufferfull is null
+PASS childWindow.personalbar.visible is false
+PASS childWindow.screen.availHeight is 0
+PASS childWindow.screen.availLeft is 0
+PASS childWindow.screen.availTop is 0
+PASS childWindow.screen.availWidth is 0
+PASS childWindow.screen.colorDepth is 0
+PASS childWindow.screen.height is 0
+PASS childWindow.screen.keepAwake is false
+PASS childWindow.screen.pixelDepth is 0
+PASS childWindow.screen.width is 0
+PASS childWindow.screenLeft is 0
+PASS childWindow.screenTop is 0
+PASS childWindow.screenX is 0
+PASS childWindow.screenY is 0
+PASS childWindow.scrollX is 0
+PASS childWindow.scrollY is 0
+PASS childWindow.scrollbars.visible is false
+PASS childWindow.speechSynthesis.onvoiceschanged is null
+PASS childWindow.speechSynthesis.paused is false
+PASS childWindow.speechSynthesis.pending is false
+PASS childWindow.speechSynthesis.speaking is false
+PASS childWindow.status is ''
+PASS childWindow.statusbar.visible is false
+PASS childWindow.styleMedia.type is ''
+PASS childWindow.toolbar.visible is false
+PASS childWindow.visualViewport.height is 0
+PASS childWindow.visualViewport.offsetLeft is 0
+PASS childWindow.visualViewport.offsetTop is 0
+PASS childWindow.visualViewport.onresize is null
+PASS childWindow.visualViewport.onscroll is null
+PASS childWindow.visualViewport.pageLeft is 0
+PASS childWindow.visualViewport.pageTop is 0
+PASS childWindow.visualViewport.scale is 0
+PASS childWindow.visualViewport.width is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt
new file mode 100644
index 0000000..217db59
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt
@@ -0,0 +1,190 @@
+CONSOLE WARNING: line 121: 'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage' or 'navigator.webkitPersistentStorage' instead.
+Tests property access on a cached DOMWindow after the associated frame is no longer in a web page. Test should not crash and properties should be set to sane defaults.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS childWindow.closed is true
+PASS childWindow.defaultStatus is ''
+PASS childWindow.defaultstatus is ''
+PASS childWindow.devicePixelRatio is 0
+PASS childWindow.innerHeight is 0
+PASS childWindow.innerWidth is 0
+PASS childWindow.isSecureContext is false
+PASS childWindow.length is 0
+PASS childWindow.locationbar.visible is false
+PASS childWindow.menubar.visible is false
+PASS childWindow.name is ''
+PASS childWindow.navigator.appCodeName is window.navigator.appCodeName
+PASS childWindow.navigator.appName is window.navigator.appName
+PASS childWindow.navigator.appVersion is ''
+PASS childWindow.navigator.cookieEnabled is false
+PASS childWindow.navigator.doNotTrack is null
+PASS childWindow.navigator.hardwareConcurrency is window.navigator.hardwareConcurrency
+PASS childWindow.navigator.language is window.navigator.language
+PASS childWindow.navigator.maxTouchPoints is 0
+PASS childWindow.navigator.mediaDevices.ondevicechange is null
+PASS childWindow.navigator.mediaSession.metadata is null
+PASS childWindow.navigator.mediaSession.playbackState is 'none'
+PASS childWindow.navigator.onLine is window.navigator.onLine
+PASS childWindow.navigator.platform is window.navigator.platform
+PASS childWindow.navigator.product is window.navigator.product
+PASS childWindow.navigator.productSub is window.navigator.productSub
+PASS childWindow.navigator.userActivation.hasBeenActive is false
+PASS childWindow.navigator.userActivation.isActive is false
+PASS childWindow.navigator.userAgent is ''
+PASS childWindow.navigator.vendor is window.navigator.vendor
+PASS childWindow.navigator.vendorSub is ''
+PASS childWindow.onabort is null
+PASS childWindow.onactivateinvisible is null
+PASS childWindow.onafterprint is null
+PASS childWindow.onanimationend is null
+PASS childWindow.onanimationiteration is null
+PASS childWindow.onanimationstart is null
+PASS childWindow.onappinstalled is null
+PASS childWindow.onauxclick is null
+PASS childWindow.onbeforeinstallprompt is null
+PASS childWindow.onbeforeprint is null
+PASS childWindow.onbeforeunload is null
+PASS childWindow.onblur is null
+PASS childWindow.oncancel is null
+PASS childWindow.oncanplay is null
+PASS childWindow.oncanplaythrough is null
+PASS childWindow.onchange is null
+PASS childWindow.onclick is null
+PASS childWindow.onclose is null
+PASS childWindow.oncontextmenu is null
+PASS childWindow.oncuechange is null
+PASS childWindow.ondblclick is null
+PASS childWindow.ondevicemotion is null
+PASS childWindow.ondeviceorientation is null
+PASS childWindow.ondeviceorientationabsolute is null
+PASS childWindow.ondrag is null
+PASS childWindow.ondragend is null
+PASS childWindow.ondragenter is null
+PASS childWindow.ondragleave is null
+PASS childWindow.ondragover is null
+PASS childWindow.ondragstart is null
+PASS childWindow.ondrop is null
+PASS childWindow.ondurationchange is null
+PASS childWindow.onemptied is null
+PASS childWindow.onended is null
+PASS childWindow.onerror is null
+PASS childWindow.onfocus is null
+PASS childWindow.onformdata is null
+PASS childWindow.ongotpointercapture is null
+PASS childWindow.onhashchange is null
+PASS childWindow.oninput is null
+PASS childWindow.oninvalid is null
+PASS childWindow.onkeydown is null
+PASS childWindow.onkeypress is null
+PASS childWindow.onkeyup is null
+PASS childWindow.onlanguagechange is null
+PASS childWindow.onload is null
+PASS childWindow.onloadeddata is null
+PASS childWindow.onloadedmetadata is null
+PASS childWindow.onloadstart is null
+PASS childWindow.onlostpointercapture is null
+PASS childWindow.onmessage is null
+PASS childWindow.onmessageerror is null
+PASS childWindow.onmousedown is null
+PASS childWindow.onmouseenter is null
+PASS childWindow.onmouseleave is null
+PASS childWindow.onmousemove is null
+PASS childWindow.onmouseout is null
+PASS childWindow.onmouseover is null
+PASS childWindow.onmouseup is null
+PASS childWindow.onmousewheel is null
+PASS childWindow.onoffline is null
+PASS childWindow.ononline is null
+PASS childWindow.onpagehide is null
+PASS childWindow.onpageshow is null
+PASS childWindow.onpause is null
+PASS childWindow.onplay is null
+PASS childWindow.onplaying is null
+PASS childWindow.onpointercancel is null
+PASS childWindow.onpointerdown is null
+PASS childWindow.onpointerenter is null
+PASS childWindow.onpointerleave is null
+PASS childWindow.onpointermove is null
+PASS childWindow.onpointerout is null
+PASS childWindow.onpointerover is null
+PASS childWindow.onpointerrawmove is null
+PASS childWindow.onpointerup is null
+PASS childWindow.onpopstate is null
+PASS childWindow.onprogress is null
+PASS childWindow.onratechange is null
+PASS childWindow.onrejectionhandled is null
+PASS childWindow.onreset is null
+PASS childWindow.onresize is null
+PASS childWindow.onscroll is null
+PASS childWindow.onsearch is null
+PASS childWindow.onseeked is null
+PASS childWindow.onseeking is null
+PASS childWindow.onselect is null
+PASS childWindow.onselectionchange is null
+PASS childWindow.onselectstart is null
+PASS childWindow.onstalled is null
+PASS childWindow.onstorage is null
+PASS childWindow.onsubmit is null
+PASS childWindow.onsuspend is null
+PASS childWindow.ontimeupdate is null
+PASS childWindow.ontoggle is null
+PASS childWindow.ontouchcancel is null
+PASS childWindow.ontouchend is null
+PASS childWindow.ontouchmove is null
+PASS childWindow.ontouchstart is null
+PASS childWindow.ontransitionend is null
+PASS childWindow.onunhandledrejection is null
+PASS childWindow.onunload is null
+PASS childWindow.onvolumechange is null
+PASS childWindow.onwaiting is null
+PASS childWindow.onwebkitanimationend is null
+PASS childWindow.onwebkitanimationiteration is null
+PASS childWindow.onwebkitanimationstart is null
+PASS childWindow.onwebkittransitionend is null
+PASS childWindow.onwheel is null
+PASS childWindow.opener is null
+PASS childWindow.origin is 'file://'
+PASS childWindow.outerHeight is 0
+PASS childWindow.outerWidth is 0
+PASS childWindow.pageXOffset is 0
+PASS childWindow.pageYOffset is 0
+PASS childWindow.performance.onresourcetimingbufferfull is null
+PASS childWindow.personalbar.visible is false
+PASS childWindow.screen.availHeight is 0
+PASS childWindow.screen.availLeft is 0
+PASS childWindow.screen.availTop is 0
+PASS childWindow.screen.availWidth is 0
+PASS childWindow.screen.colorDepth is 0
+PASS childWindow.screen.height is 0
+PASS childWindow.screen.keepAwake is false
+PASS childWindow.screen.pixelDepth is 0
+PASS childWindow.screen.width is 0
+PASS childWindow.screenLeft is 0
+PASS childWindow.screenTop is 0
+PASS childWindow.screenX is 0
+PASS childWindow.screenY is 0
+PASS childWindow.scrollX is 0
+PASS childWindow.scrollY is 0
+PASS childWindow.scrollbars.visible is false
+PASS childWindow.speechSynthesis.onvoiceschanged is null
+PASS childWindow.speechSynthesis.paused is false
+PASS childWindow.speechSynthesis.pending is false
+PASS childWindow.speechSynthesis.speaking is false
+PASS childWindow.status is ''
+PASS childWindow.statusbar.visible is false
+PASS childWindow.styleMedia.type is ''
+PASS childWindow.toolbar.visible is false
+PASS childWindow.visualViewport.height is 0
+PASS childWindow.visualViewport.offsetLeft is 0
+PASS childWindow.visualViewport.offsetTop is 0
+PASS childWindow.visualViewport.onresize is null
+PASS childWindow.visualViewport.onscroll is null
+PASS childWindow.visualViewport.pageLeft is 0
+PASS childWindow.visualViewport.pageTop is 0
+PASS childWindow.visualViewport.scale is 0
+PASS childWindow.visualViewport.width is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-access-after-navigation-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-access-after-navigation-expected.txt
new file mode 100644
index 0000000..f16504f
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-access-after-navigation-expected.txt
@@ -0,0 +1,3 @@
+Test for bug 27394: properties on a window object should be accessible after the frame of the window object has navigated to another page.
+
+SUCCESS
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-early-properties-xhr-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-early-properties-xhr-expected.txt
new file mode 100644
index 0000000..e4310f0
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-early-properties-xhr-expected.txt
@@ -0,0 +1,5 @@
+Test for bug 21752: Referencing XHR constructor for a not yet loaded frame permanently breaks it.
+
+Should say SUCCESS:
+
+SUCCESS
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-lookup-precedence-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-lookup-precedence-expected.txt
new file mode 100644
index 0000000..def93e0
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-lookup-precedence-expected.txt
@@ -0,0 +1,413 @@
+Tests lookup precedence for properties on Window objects in the presence of a child frame, and that IDL properties defined in the prototype (window.location, window.focus, etc) have higher lookup precedence than named document elements (such as input elements).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+
+PASS 'function alert() { [native code] }' is 'function alert() { [native code] }'
+PASS 'function alert() { [native code] }' is 'function alert() { [native code] }'
+PASS 'function atob() { [native code] }' is 'function atob() { [native code] }'
+PASS 'function atob() { [native code] }' is 'function atob() { [native code] }'
+PASS 'function () { [native code] }' is 'function () { [native code] }'
+PASS 'function () { [native code] }' is 'function () { [native code] }'
+PASS 'function btoa() { [native code] }' is 'function btoa() { [native code] }'
+PASS 'function btoa() { [native code] }' is 'function btoa() { [native code] }'
+PASS 'function captureEvents() { [native code] }' is 'function captureEvents() { [native code] }'
+PASS 'function captureEvents() { [native code] }' is 'function captureEvents() { [native code] }'
+PASS 'function clearInterval() { [native code] }' is 'function clearInterval() { [native code] }'
+PASS 'function clearInterval() { [native code] }' is 'function clearInterval() { [native code] }'
+PASS 'function clearTimeout() { [native code] }' is 'function clearTimeout() { [native code] }'
+PASS 'function clearTimeout() { [native code] }' is 'function clearTimeout() { [native code] }'
+PASS 'function () { [native code] }' is 'function () { [native code] }'
+PASS 'function () { [native code] }' is 'function () { [native code] }'
+PASS 'function confirm() { [native code] }' is 'function confirm() { [native code] }'
+PASS 'function confirm() { [native code] }' is 'function confirm() { [native code] }'
+PASS 'function find() { [native code] }' is 'function find() { [native code] }'
+PASS 'function find() { [native code] }' is 'function find() { [native code] }'
+PASS 'function () { [native code] }' is 'function () { [native code] }'
+PASS 'function () { [native code] }' is 'function () { [native code] }'
+PASS 'function getComputedStyle() { [native code] }' is 'function getComputedStyle() { [native code] }'
+PASS 'function getComputedStyle() { [native code] }' is 'function getComputedStyle() { [native code] }'
+PASS 'function getSelection() { [native code] }' is 'function getSelection() { [native code] }'
+PASS 'function getSelection() { [native code] }' is 'function getSelection() { [native code] }'
+PASS 'function moveBy() { [native code] }' is 'function moveBy() { [native code] }'
+PASS 'function moveBy() { [native code] }' is 'function moveBy() { [native code] }'
+PASS 'function moveTo() { [native code] }' is 'function moveTo() { [native code] }'
+PASS 'function moveTo() { [native code] }' is 'function moveTo() { [native code] }'
+PASS 'function open() { [native code] }' is 'function open() { [native code] }'
+PASS 'function open() { [native code] }' is 'function open() { [native code] }'
+PASS 'function print() { [native code] }' is 'function print() { [native code] }'
+PASS 'function print() { [native code] }' is 'function print() { [native code] }'
+PASS 'function prompt() { [native code] }' is 'function prompt() { [native code] }'
+PASS 'function prompt() { [native code] }' is 'function prompt() { [native code] }'
+PASS 'function releaseEvents() { [native code] }' is 'function releaseEvents() { [native code] }'
+PASS 'function releaseEvents() { [native code] }' is 'function releaseEvents() { [native code] }'
+PASS 'function resizeBy() { [native code] }' is 'function resizeBy() { [native code] }'
+PASS 'function resizeBy() { [native code] }' is 'function resizeBy() { [native code] }'
+PASS 'function resizeTo() { [native code] }' is 'function resizeTo() { [native code] }'
+PASS 'function resizeTo() { [native code] }' is 'function resizeTo() { [native code] }'
+PASS 'function scroll() { [native code] }' is 'function scroll() { [native code] }'
+PASS 'function scroll() { [native code] }' is 'function scroll() { [native code] }'
+PASS 'function scrollBy() { [native code] }' is 'function scrollBy() { [native code] }'
+PASS 'function scrollBy() { [native code] }' is 'function scrollBy() { [native code] }'
+PASS 'function scrollTo() { [native code] }' is 'function scrollTo() { [native code] }'
+PASS 'function scrollTo() { [native code] }' is 'function scrollTo() { [native code] }'
+PASS 'function setInterval() { [native code] }' is 'function setInterval() { [native code] }'
+PASS 'function setInterval() { [native code] }' is 'function setInterval() { [native code] }'
+PASS 'function setTimeout() { [native code] }' is 'function setTimeout() { [native code] }'
+PASS 'function setTimeout() { [native code] }' is 'function setTimeout() { [native code] }'
+PASS 'function stop() { [native code] }' is 'function stop() { [native code] }'
+PASS 'function stop() { [native code] }' is 'function stop() { [native code] }'
+PASS 'function toString() { [native code] }' is 'function toString() { [native code] }'
+PASS 'function toString() { [native code] }' is 'function toString() { [native code] }'
+PASS 'function Attr() { [native code] }' is 'function Attr() { [native code] }'
+PASS 'function Attr() { [native code] }' is 'function Attr() { [native code] }'
+PASS 'function CDATASection() { [native code] }' is 'function CDATASection() { [native code] }'
+PASS 'function CDATASection() { [native code] }' is 'function CDATASection() { [native code] }'
+PASS 'function CSSFontFaceRule() { [native code] }' is 'function CSSFontFaceRule() { [native code] }'
+PASS 'function CSSFontFaceRule() { [native code] }' is 'function CSSFontFaceRule() { [native code] }'
+PASS 'function CSSImportRule() { [native code] }' is 'function CSSImportRule() { [native code] }'
+PASS 'function CSSImportRule() { [native code] }' is 'function CSSImportRule() { [native code] }'
+PASS 'function CSSMediaRule() { [native code] }' is 'function CSSMediaRule() { [native code] }'
+PASS 'function CSSMediaRule() { [native code] }' is 'function CSSMediaRule() { [native code] }'
+PASS 'function CSSPageRule() { [native code] }' is 'function CSSPageRule() { [native code] }'
+PASS 'function CSSPageRule() { [native code] }' is 'function CSSPageRule() { [native code] }'
+PASS 'function CSSRule() { [native code] }' is 'function CSSRule() { [native code] }'
+PASS 'function CSSRule() { [native code] }' is 'function CSSRule() { [native code] }'
+PASS 'function CSSRuleList() { [native code] }' is 'function CSSRuleList() { [native code] }'
+PASS 'function CSSRuleList() { [native code] }' is 'function CSSRuleList() { [native code] }'
+PASS 'function CSSStyleDeclaration() { [native code] }' is 'function CSSStyleDeclaration() { [native code] }'
+PASS 'function CSSStyleDeclaration() { [native code] }' is 'function CSSStyleDeclaration() { [native code] }'
+PASS 'function CSSStyleRule() { [native code] }' is 'function CSSStyleRule() { [native code] }'
+PASS 'function CSSStyleRule() { [native code] }' is 'function CSSStyleRule() { [native code] }'
+PASS 'function CSSStyleSheet() { [native code] }' is 'function CSSStyleSheet() { [native code] }'
+PASS 'function CSSStyleSheet() { [native code] }' is 'function CSSStyleSheet() { [native code] }'
+PASS 'function CharacterData() { [native code] }' is 'function CharacterData() { [native code] }'
+PASS 'function CharacterData() { [native code] }' is 'function CharacterData() { [native code] }'
+PASS 'function Comment() { [native code] }' is 'function Comment() { [native code] }'
+PASS 'function Comment() { [native code] }' is 'function Comment() { [native code] }'
+PASS 'function DOMException() { [native code] }' is 'function DOMException() { [native code] }'
+PASS 'function DOMException() { [native code] }' is 'function DOMException() { [native code] }'
+PASS 'function DOMImplementation() { [native code] }' is 'function DOMImplementation() { [native code] }'
+PASS 'function DOMImplementation() { [native code] }' is 'function DOMImplementation() { [native code] }'
+PASS 'function DOMParser() { [native code] }' is 'function DOMParser() { [native code] }'
+PASS 'function DOMParser() { [native code] }' is 'function DOMParser() { [native code] }'
+PASS 'function Document() { [native code] }' is 'function Document() { [native code] }'
+PASS 'function Document() { [native code] }' is 'function Document() { [native code] }'
+PASS 'function DocumentFragment() { [native code] }' is 'function DocumentFragment() { [native code] }'
+PASS 'function DocumentFragment() { [native code] }' is 'function DocumentFragment() { [native code] }'
+PASS 'function DocumentType() { [native code] }' is 'function DocumentType() { [native code] }'
+PASS 'function DocumentType() { [native code] }' is 'function DocumentType() { [native code] }'
+PASS 'function Element() { [native code] }' is 'function Element() { [native code] }'
+PASS 'function Element() { [native code] }' is 'function Element() { [native code] }'
+PASS 'function Event() { [native code] }' is 'function Event() { [native code] }'
+PASS 'function Event() { [native code] }' is 'function Event() { [native code] }'
+PASS 'function HTMLAnchorElement() { [native code] }' is 'function HTMLAnchorElement() { [native code] }'
+PASS 'function HTMLAnchorElement() { [native code] }' is 'function HTMLAnchorElement() { [native code] }'
+PASS 'function HTMLAreaElement() { [native code] }' is 'function HTMLAreaElement() { [native code] }'
+PASS 'function HTMLAreaElement() { [native code] }' is 'function HTMLAreaElement() { [native code] }'
+PASS 'function HTMLBRElement() { [native code] }' is 'function HTMLBRElement() { [native code] }'
+PASS 'function HTMLBRElement() { [native code] }' is 'function HTMLBRElement() { [native code] }'
+PASS 'function HTMLBaseElement() { [native code] }' is 'function HTMLBaseElement() { [native code] }'
+PASS 'function HTMLBaseElement() { [native code] }' is 'function HTMLBaseElement() { [native code] }'
+PASS 'function HTMLBodyElement() { [native code] }' is 'function HTMLBodyElement() { [native code] }'
+PASS 'function HTMLBodyElement() { [native code] }' is 'function HTMLBodyElement() { [native code] }'
+PASS 'function HTMLButtonElement() { [native code] }' is 'function HTMLButtonElement() { [native code] }'
+PASS 'function HTMLButtonElement() { [native code] }' is 'function HTMLButtonElement() { [native code] }'
+PASS 'function HTMLCanvasElement() { [native code] }' is 'function HTMLCanvasElement() { [native code] }'
+PASS 'function HTMLCanvasElement() { [native code] }' is 'function HTMLCanvasElement() { [native code] }'
+PASS 'function HTMLDListElement() { [native code] }' is 'function HTMLDListElement() { [native code] }'
+PASS 'function HTMLDListElement() { [native code] }' is 'function HTMLDListElement() { [native code] }'
+PASS 'function HTMLDataListElement() { [native code] }' is 'function HTMLDataListElement() { [native code] }'
+PASS 'function HTMLDataListElement() { [native code] }' is 'function HTMLDataListElement() { [native code] }'
+PASS 'function HTMLDirectoryElement() { [native code] }' is 'function HTMLDirectoryElement() { [native code] }'
+PASS 'function HTMLDirectoryElement() { [native code] }' is 'function HTMLDirectoryElement() { [native code] }'
+PASS 'function HTMLDivElement() { [native code] }' is 'function HTMLDivElement() { [native code] }'
+PASS 'function HTMLDivElement() { [native code] }' is 'function HTMLDivElement() { [native code] }'
+PASS 'function HTMLDocument() { [native code] }' is 'function HTMLDocument() { [native code] }'
+PASS 'function HTMLDocument() { [native code] }' is 'function HTMLDocument() { [native code] }'
+PASS 'function HTMLElement() { [native code] }' is 'function HTMLElement() { [native code] }'
+PASS 'function HTMLElement() { [native code] }' is 'function HTMLElement() { [native code] }'
+PASS 'function HTMLEmbedElement() { [native code] }' is 'function HTMLEmbedElement() { [native code] }'
+PASS 'function HTMLEmbedElement() { [native code] }' is 'function HTMLEmbedElement() { [native code] }'
+PASS 'function HTMLFieldSetElement() { [native code] }' is 'function HTMLFieldSetElement() { [native code] }'
+PASS 'function HTMLFieldSetElement() { [native code] }' is 'function HTMLFieldSetElement() { [native code] }'
+PASS 'function HTMLFontElement() { [native code] }' is 'function HTMLFontElement() { [native code] }'
+PASS 'function HTMLFontElement() { [native code] }' is 'function HTMLFontElement() { [native code] }'
+PASS 'function HTMLFormElement() { [native code] }' is 'function HTMLFormElement() { [native code] }'
+PASS 'function HTMLFormElement() { [native code] }' is 'function HTMLFormElement() { [native code] }'
+PASS 'function HTMLFrameElement() { [native code] }' is 'function HTMLFrameElement() { [native code] }'
+PASS 'function HTMLFrameElement() { [native code] }' is 'function HTMLFrameElement() { [native code] }'
+PASS 'function HTMLFrameSetElement() { [native code] }' is 'function HTMLFrameSetElement() { [native code] }'
+PASS 'function HTMLFrameSetElement() { [native code] }' is 'function HTMLFrameSetElement() { [native code] }'
+PASS 'function HTMLHRElement() { [native code] }' is 'function HTMLHRElement() { [native code] }'
+PASS 'function HTMLHRElement() { [native code] }' is 'function HTMLHRElement() { [native code] }'
+PASS 'function HTMLHeadElement() { [native code] }' is 'function HTMLHeadElement() { [native code] }'
+PASS 'function HTMLHeadElement() { [native code] }' is 'function HTMLHeadElement() { [native code] }'
+PASS 'function HTMLHeadingElement() { [native code] }' is 'function HTMLHeadingElement() { [native code] }'
+PASS 'function HTMLHeadingElement() { [native code] }' is 'function HTMLHeadingElement() { [native code] }'
+PASS 'function HTMLHtmlElement() { [native code] }' is 'function HTMLHtmlElement() { [native code] }'
+PASS 'function HTMLHtmlElement() { [native code] }' is 'function HTMLHtmlElement() { [native code] }'
+PASS 'function HTMLIFrameElement() { [native code] }' is 'function HTMLIFrameElement() { [native code] }'
+PASS 'function HTMLIFrameElement() { [native code] }' is 'function HTMLIFrameElement() { [native code] }'
+PASS 'function HTMLImageElement() { [native code] }' is 'function HTMLImageElement() { [native code] }'
+PASS 'function HTMLImageElement() { [native code] }' is 'function HTMLImageElement() { [native code] }'
+PASS 'function HTMLInputElement() { [native code] }' is 'function HTMLInputElement() { [native code] }'
+PASS 'function HTMLInputElement() { [native code] }' is 'function HTMLInputElement() { [native code] }'
+PASS 'function HTMLLIElement() { [native code] }' is 'function HTMLLIElement() { [native code] }'
+PASS 'function HTMLLIElement() { [native code] }' is 'function HTMLLIElement() { [native code] }'
+PASS 'function HTMLLabelElement() { [native code] }' is 'function HTMLLabelElement() { [native code] }'
+PASS 'function HTMLLabelElement() { [native code] }' is 'function HTMLLabelElement() { [native code] }'
+PASS 'function HTMLLegendElement() { [native code] }' is 'function HTMLLegendElement() { [native code] }'
+PASS 'function HTMLLegendElement() { [native code] }' is 'function HTMLLegendElement() { [native code] }'
+PASS 'function HTMLLinkElement() { [native code] }' is 'function HTMLLinkElement() { [native code] }'
+PASS 'function HTMLLinkElement() { [native code] }' is 'function HTMLLinkElement() { [native code] }'
+PASS 'function HTMLMapElement() { [native code] }' is 'function HTMLMapElement() { [native code] }'
+PASS 'function HTMLMapElement() { [native code] }' is 'function HTMLMapElement() { [native code] }'
+PASS 'function HTMLMarqueeElement() { [native code] }' is 'function HTMLMarqueeElement() { [native code] }'
+PASS 'function HTMLMarqueeElement() { [native code] }' is 'function HTMLMarqueeElement() { [native code] }'
+PASS 'function HTMLMenuElement() { [native code] }' is 'function HTMLMenuElement() { [native code] }'
+PASS 'function HTMLMenuElement() { [native code] }' is 'function HTMLMenuElement() { [native code] }'
+PASS 'function HTMLMetaElement() { [native code] }' is 'function HTMLMetaElement() { [native code] }'
+PASS 'function HTMLMetaElement() { [native code] }' is 'function HTMLMetaElement() { [native code] }'
+PASS 'function HTMLModElement() { [native code] }' is 'function HTMLModElement() { [native code] }'
+PASS 'function HTMLModElement() { [native code] }' is 'function HTMLModElement() { [native code] }'
+PASS 'function HTMLOListElement() { [native code] }' is 'function HTMLOListElement() { [native code] }'
+PASS 'function HTMLOListElement() { [native code] }' is 'function HTMLOListElement() { [native code] }'
+PASS 'function HTMLObjectElement() { [native code] }' is 'function HTMLObjectElement() { [native code] }'
+PASS 'function HTMLObjectElement() { [native code] }' is 'function HTMLObjectElement() { [native code] }'
+PASS 'function HTMLOptGroupElement() { [native code] }' is 'function HTMLOptGroupElement() { [native code] }'
+PASS 'function HTMLOptGroupElement() { [native code] }' is 'function HTMLOptGroupElement() { [native code] }'
+PASS 'function HTMLOptionElement() { [native code] }' is 'function HTMLOptionElement() { [native code] }'
+PASS 'function HTMLOptionElement() { [native code] }' is 'function HTMLOptionElement() { [native code] }'
+PASS 'function HTMLParagraphElement() { [native code] }' is 'function HTMLParagraphElement() { [native code] }'
+PASS 'function HTMLParagraphElement() { [native code] }' is 'function HTMLParagraphElement() { [native code] }'
+PASS 'function HTMLParamElement() { [native code] }' is 'function HTMLParamElement() { [native code] }'
+PASS 'function HTMLParamElement() { [native code] }' is 'function HTMLParamElement() { [native code] }'
+PASS 'function HTMLPreElement() { [native code] }' is 'function HTMLPreElement() { [native code] }'
+PASS 'function HTMLPreElement() { [native code] }' is 'function HTMLPreElement() { [native code] }'
+PASS 'function HTMLQuoteElement() { [native code] }' is 'function HTMLQuoteElement() { [native code] }'
+PASS 'function HTMLQuoteElement() { [native code] }' is 'function HTMLQuoteElement() { [native code] }'
+PASS 'function HTMLScriptElement() { [native code] }' is 'function HTMLScriptElement() { [native code] }'
+PASS 'function HTMLScriptElement() { [native code] }' is 'function HTMLScriptElement() { [native code] }'
+PASS 'function HTMLSelectElement() { [native code] }' is 'function HTMLSelectElement() { [native code] }'
+PASS 'function HTMLSelectElement() { [native code] }' is 'function HTMLSelectElement() { [native code] }'
+PASS 'function HTMLStyleElement() { [native code] }' is 'function HTMLStyleElement() { [native code] }'
+PASS 'function HTMLStyleElement() { [native code] }' is 'function HTMLStyleElement() { [native code] }'
+PASS 'function HTMLTableCaptionElement() { [native code] }' is 'function HTMLTableCaptionElement() { [native code] }'
+PASS 'function HTMLTableCaptionElement() { [native code] }' is 'function HTMLTableCaptionElement() { [native code] }'
+PASS 'function HTMLTableCellElement() { [native code] }' is 'function HTMLTableCellElement() { [native code] }'
+PASS 'function HTMLTableCellElement() { [native code] }' is 'function HTMLTableCellElement() { [native code] }'
+PASS 'function HTMLTableColElement() { [native code] }' is 'function HTMLTableColElement() { [native code] }'
+PASS 'function HTMLTableColElement() { [native code] }' is 'function HTMLTableColElement() { [native code] }'
+PASS 'function HTMLTableElement() { [native code] }' is 'function HTMLTableElement() { [native code] }'
+PASS 'function HTMLTableElement() { [native code] }' is 'function HTMLTableElement() { [native code] }'
+PASS 'function HTMLTableRowElement() { [native code] }' is 'function HTMLTableRowElement() { [native code] }'
+PASS 'function HTMLTableRowElement() { [native code] }' is 'function HTMLTableRowElement() { [native code] }'
+PASS 'function HTMLTableSectionElement() { [native code] }' is 'function HTMLTableSectionElement() { [native code] }'
+PASS 'function HTMLTableSectionElement() { [native code] }' is 'function HTMLTableSectionElement() { [native code] }'
+PASS 'function HTMLTextAreaElement() { [native code] }' is 'function HTMLTextAreaElement() { [native code] }'
+PASS 'function HTMLTextAreaElement() { [native code] }' is 'function HTMLTextAreaElement() { [native code] }'
+PASS 'function HTMLTitleElement() { [native code] }' is 'function HTMLTitleElement() { [native code] }'
+PASS 'function HTMLTitleElement() { [native code] }' is 'function HTMLTitleElement() { [native code] }'
+PASS 'function HTMLUListElement() { [native code] }' is 'function HTMLUListElement() { [native code] }'
+PASS 'function HTMLUListElement() { [native code] }' is 'function HTMLUListElement() { [native code] }'
+PASS 'function KeyboardEvent() { [native code] }' is 'function KeyboardEvent() { [native code] }'
+PASS 'function KeyboardEvent() { [native code] }' is 'function KeyboardEvent() { [native code] }'
+PASS 'function MediaList() { [native code] }' is 'function MediaList() { [native code] }'
+PASS 'function MediaList() { [native code] }' is 'function MediaList() { [native code] }'
+PASS 'function MouseEvent() { [native code] }' is 'function MouseEvent() { [native code] }'
+PASS 'function MouseEvent() { [native code] }' is 'function MouseEvent() { [native code] }'
+PASS 'function MutationEvent() { [native code] }' is 'function MutationEvent() { [native code] }'
+PASS 'function MutationEvent() { [native code] }' is 'function MutationEvent() { [native code] }'
+PASS 'function NamedNodeMap() { [native code] }' is 'function NamedNodeMap() { [native code] }'
+PASS 'function NamedNodeMap() { [native code] }' is 'function NamedNodeMap() { [native code] }'
+PASS 'function Node() { [native code] }' is 'function Node() { [native code] }'
+PASS 'function Node() { [native code] }' is 'function Node() { [native code] }'
+PASS 'function NodeFilter() { [native code] }' is 'function NodeFilter() { [native code] }'
+PASS 'function NodeFilter() { [native code] }' is 'function NodeFilter() { [native code] }'
+PASS 'function NodeList() { [native code] }' is 'function NodeList() { [native code] }'
+PASS 'function NodeList() { [native code] }' is 'function NodeList() { [native code] }'
+PASS 'function ProcessingInstruction() { [native code] }' is 'function ProcessingInstruction() { [native code] }'
+PASS 'function ProcessingInstruction() { [native code] }' is 'function ProcessingInstruction() { [native code] }'
+PASS 'function ProgressEvent() { [native code] }' is 'function ProgressEvent() { [native code] }'
+PASS 'function ProgressEvent() { [native code] }' is 'function ProgressEvent() { [native code] }'
+PASS 'function Range() { [native code] }' is 'function Range() { [native code] }'
+PASS 'function Range() { [native code] }' is 'function Range() { [native code] }'
+PASS 'function SVGAngle() { [native code] }' is 'function SVGAngle() { [native code] }'
+PASS 'function SVGAngle() { [native code] }' is 'function SVGAngle() { [native code] }'
+PASS 'function SVGGradientElement() { [native code] }' is 'function SVGGradientElement() { [native code] }'
+PASS 'function SVGGradientElement() { [native code] }' is 'function SVGGradientElement() { [native code] }'
+PASS 'function SVGLength() { [native code] }' is 'function SVGLength() { [native code] }'
+PASS 'function SVGLength() { [native code] }' is 'function SVGLength() { [native code] }'
+PASS 'function SVGMarkerElement() { [native code] }' is 'function SVGMarkerElement() { [native code] }'
+PASS 'function SVGMarkerElement() { [native code] }' is 'function SVGMarkerElement() { [native code] }'
+PASS 'function SVGPreserveAspectRatio() { [native code] }' is 'function SVGPreserveAspectRatio() { [native code] }'
+PASS 'function SVGPreserveAspectRatio() { [native code] }' is 'function SVGPreserveAspectRatio() { [native code] }'
+PASS 'function SVGTextContentElement() { [native code] }' is 'function SVGTextContentElement() { [native code] }'
+PASS 'function SVGTextContentElement() { [native code] }' is 'function SVGTextContentElement() { [native code] }'
+PASS 'function SVGTextPathElement() { [native code] }' is 'function SVGTextPathElement() { [native code] }'
+PASS 'function SVGTextPathElement() { [native code] }' is 'function SVGTextPathElement() { [native code] }'
+PASS 'function SVGTransform() { [native code] }' is 'function SVGTransform() { [native code] }'
+PASS 'function SVGTransform() { [native code] }' is 'function SVGTransform() { [native code] }'
+PASS 'function SVGUnitTypes() { [native code] }' is 'function SVGUnitTypes() { [native code] }'
+PASS 'function SVGUnitTypes() { [native code] }' is 'function SVGUnitTypes() { [native code] }'
+PASS 'function StyleSheet() { [native code] }' is 'function StyleSheet() { [native code] }'
+PASS 'function StyleSheet() { [native code] }' is 'function StyleSheet() { [native code] }'
+PASS 'function StyleSheetList() { [native code] }' is 'function StyleSheetList() { [native code] }'
+PASS 'function StyleSheetList() { [native code] }' is 'function StyleSheetList() { [native code] }'
+PASS 'function Text() { [native code] }' is 'function Text() { [native code] }'
+PASS 'function Text() { [native code] }' is 'function Text() { [native code] }'
+PASS 'function TextEvent() { [native code] }' is 'function TextEvent() { [native code] }'
+PASS 'function TextEvent() { [native code] }' is 'function TextEvent() { [native code] }'
+PASS 'function UIEvent() { [native code] }' is 'function UIEvent() { [native code] }'
+PASS 'function UIEvent() { [native code] }' is 'function UIEvent() { [native code] }'
+PASS 'function WheelEvent() { [native code] }' is 'function WheelEvent() { [native code] }'
+PASS 'function WheelEvent() { [native code] }' is 'function WheelEvent() { [native code] }'
+PASS 'function XMLDocument() { [native code] }' is 'function XMLDocument() { [native code] }'
+PASS 'function XMLDocument() { [native code] }' is 'function XMLDocument() { [native code] }'
+PASS 'function XMLHttpRequest() { [native code] }' is 'function XMLHttpRequest() { [native code] }'
+PASS 'function XMLHttpRequest() { [native code] }' is 'function XMLHttpRequest() { [native code] }'
+PASS 'function XMLSerializer() { [native code] }' is 'function XMLSerializer() { [native code] }'
+PASS 'function XMLSerializer() { [native code] }' is 'function XMLSerializer() { [native code] }'
+PASS 'function XPathEvaluator() { [native code] }' is 'function XPathEvaluator() { [native code] }'
+PASS 'function XPathEvaluator() { [native code] }' is 'function XPathEvaluator() { [native code] }'
+PASS 'function XPathResult() { [native code] }' is 'function XPathResult() { [native code] }'
+PASS 'function XPathResult() { [native code] }' is 'function XPathResult() { [native code] }'
+PASS 'function XSLTProcessor() { [native code] }' is 'function XSLTProcessor() { [native code] }'
+PASS 'function XSLTProcessor() { [native code] }' is 'function XSLTProcessor() { [native code] }'
+PASS win['onload'] is null
+PASS win['onload'] is null
+PASS win['frames'] == '[object Window]' is true
+PASS win['frames'] == '[object Window]' is true
+PASS win['parent'] == '[object Window]' is true
+PASS win['parent'] == '[object Window]' is true
+PASS win['self'] == '[object Window]' is true
+PASS win['self'] == '[object Window]' is true
+PASS win['top'] == '[object Window]' is true
+PASS win['top'] == '[object Window]' is true
+PASS win['window'] == '[object Window]' is true
+PASS win['window'] == '[object Window]' is true
+PASS win['locationbar'] == '[object BarProp]' is true
+PASS win['locationbar'] == '[object BarProp]' is true
+PASS win['menubar'] == '[object BarProp]' is true
+PASS win['menubar'] == '[object BarProp]' is true
+PASS win['personalbar'] == '[object BarProp]' is true
+PASS win['personalbar'] == '[object BarProp]' is true
+PASS win['scrollbars'] == '[object BarProp]' is true
+PASS win['scrollbars'] == '[object BarProp]' is true
+PASS win['statusbar'] == '[object BarProp]' is true
+PASS win['statusbar'] == '[object BarProp]' is true
+PASS win['toolbar'] == '[object BarProp]' is true
+PASS win['toolbar'] == '[object BarProp]' is true
+PASS win['console'] == '[object Object]' is true
+PASS win['history'] == '[object History]' is true
+PASS win['navigator'] == '[object Navigator]' is true
+PASS win['navigator'] == '[object Navigator]' is true
+PASS win['screen'] == '[object Screen]' is true
+PASS win['screen'] == '[object Screen]' is true
+PASS win['clientInformation'] == '[object Navigator]' is true
+PASS win['clientInformation'] == '[object Navigator]' is true
+PASS win['document'] == '[object HTMLDocument]' is true
+PASS win['document'] == '[object HTMLDocument]' is true
+PASS win['location'] matched original
+PASS win['location'] matched original
+PASS win['onabort'] is null
+PASS win['onabort'] is null
+PASS win['onbeforeunload'] is null
+PASS win['onbeforeunload'] is null
+PASS win['onblur'] is null
+PASS win['onblur'] is null
+PASS win['onchange'] is null
+PASS win['onchange'] is null
+PASS win['onclick'] is null
+PASS win['onclick'] is null
+PASS win['ondblclick'] is null
+PASS win['ondblclick'] is null
+PASS win['onerror'] is null
+PASS win['onerror'] is null
+PASS win['onfocus'] is null
+PASS win['onfocus'] is null
+PASS win['onkeydown'] is null
+PASS win['onkeydown'] is null
+PASS win['onkeypress'] is null
+PASS win['onkeypress'] is null
+PASS win['onkeyup'] is null
+PASS win['onkeyup'] is null
+PASS win['onmousedown'] is null
+PASS win['onmousedown'] is null
+PASS win['onmousemove'] is null
+PASS win['onmousemove'] is null
+PASS win['onmouseout'] is null
+PASS win['onmouseout'] is null
+PASS win['onmouseover'] is null
+PASS win['onmouseover'] is null
+PASS win['onmouseup'] is null
+PASS win['onmouseup'] is null
+PASS win['onmousewheel'] is null
+PASS win['onmousewheel'] is null
+PASS win['onreset'] is null
+PASS win['onreset'] is null
+PASS win['onresize'] is null
+PASS win['onresize'] is null
+PASS win['onscroll'] is null
+PASS win['onscroll'] is null
+PASS win['onsearch'] is null
+PASS win['onsearch'] is null
+PASS win['onselect'] is null
+PASS win['onselect'] is null
+PASS win['onsubmit'] is null
+PASS win['onsubmit'] is null
+PASS win['onunload'] is null
+PASS win['onunload'] is null
+PASS win['opener'] is null
+PASS win['opener'] is null
+FAIL win['defaultStatus'] should be undefined (of type undefined). Was  (of type string).
+FAIL win['defaultStatus'] should be undefined (of type undefined). Was  (of type string).
+FAIL win['defaultstatus'] should be undefined (of type undefined). Was  (of type string).
+FAIL win['defaultstatus'] should be undefined (of type undefined). Was  (of type string).
+FAIL win['name'] should be undefined (of type undefined). Was  (of type string).
+FAIL win['name'] should be undefined (of type undefined). Was  (of type string).
+FAIL win['status'] should be undefined (of type undefined). Was  (of type string).
+FAIL win['status'] should be undefined (of type undefined). Was  (of type string).
+PASS win['devicePixelRatio'] matched original
+PASS win['devicePixelRatio'] matched original
+PASS win['innerHeight'] matched original
+PASS win['innerHeight'] matched original
+PASS win['innerWidth'] matched original
+PASS win['innerWidth'] matched original
+PASS win['length'] matched original
+PASS win['length'] matched original
+PASS win['outerHeight'] matched original
+PASS win['outerHeight'] matched original
+PASS win['outerWidth'] matched original
+PASS win['outerWidth'] matched original
+PASS win['pageXOffset'] matched original
+PASS win['pageXOffset'] matched original
+PASS win['pageYOffset'] matched original
+PASS win['pageYOffset'] matched original
+PASS win['screenLeft'] matched original
+PASS win['screenLeft'] matched original
+PASS win['screenTop'] matched original
+PASS win['screenTop'] matched original
+PASS win['screenX'] matched original
+PASS win['screenX'] matched original
+PASS win['screenY'] matched original
+PASS win['screenY'] matched original
+PASS win['scrollX'] matched original
+PASS win['scrollX'] matched original
+PASS win['scrollY'] matched original
+PASS win['scrollY'] matched original
+PASS typeof win['closed'] is 'boolean'
+PASS win['closed'] is false
+PASS typeof win['closed'] is 'boolean'
+PASS win['closed'] is false
+PASS typeof win['offscreenBuffering'] is 'boolean'
+PASS win['offscreenBuffering'] is true
+PASS typeof win['offscreenBuffering'] is 'boolean'
+PASS win['offscreenBuffering'] is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-object-cross-frame-calls-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-object-cross-frame-calls-expected.txt
new file mode 100644
index 0000000..f95b990
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-object-cross-frame-calls-expected.txt
@@ -0,0 +1,3 @@
+The following line should say "parent", meaning that the proper window object was used.
+
+parent
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-open-self-from-other-frame-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-open-self-from-other-frame-expected.txt
new file mode 100644
index 0000000..f920f2b5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-open-self-from-other-frame-expected.txt
@@ -0,0 +1,2 @@
+This tests that calling somewindow.open performs the frame name lookup in the context of somewindow and not the window running the script.
+SUCCESS - did not replace window contents
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-open-with-different-active-and-opener-windows-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-open-with-different-active-and-opener-windows-expected.txt
new file mode 100644
index 0000000..211b50a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-open-with-different-active-and-opener-windows-expected.txt
@@ -0,0 +1,9 @@
+Test that window.open sets the correct opener when the calling context != window
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS passed called on "this" argument of window.open
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-clone-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-clone-expected.txt
new file mode 100644
index 0000000..c2a1426
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-clone-expected.txt
@@ -0,0 +1,145 @@
+Tests that we clone object hierarchies
+PASS: 'postMessage((function(){}))' threw DataCloneError: Failed to execute 'postMessage' on 'Window': function(){} could not be cloned.
+PASS: 'postMessage(var x = 0; try { eval("badref"); } catch(e) { x = e; } x)' threw DataCloneError: Failed to execute 'postMessage' on 'Window': ReferenceError: badref is not defined could not be cloned.
+PASS: 'postMessage(arrayBuffer)' threw DataCloneError: Failed to execute 'postMessage' on 'Window': An ArrayBuffer is neutered and could not be cloned.
+PASS: 'postMessage("data")' threw DataCloneError: Failed to execute 'postMessage' on 'Window': ArrayBuffer at index 1 is a duplicate of an earlier ArrayBuffer.
+PASS: 'postMessage(uint8Array)' threw DataCloneError: Failed to execute 'postMessage' on 'Window': An ArrayBuffer is neutered and could not be cloned.
+PASS: 'postMessage(window)' threw DataCloneError: Failed to execute 'postMessage' on 'Window': #<Window> could not be cloned.
+PASS: 'postMessage(({get a() { throw "x" }}))' threw x
+PASS: 'postMessage((function() {return {get a() { throw "accessor-exn"; }};})())' threw accessor-exn
+PASS: 'postMessage((function() {var obja = {get p() { throw "accessor-exn"; }}; return {get a() { return obja; }};})())' threw accessor-exn
+PASS: lastIndex initially correct: was 3
+PASS: sanity on file reference equality
+PASS: eventData is null of type object
+PASS: eventData is undefined of type undefined
+PASS: eventData is 1 of type number
+PASS: eventData is true of type boolean
+PASS: eventData is 1 of type string
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is of type object
+PASS: eventData is a,a,b,a,b of type object
+PASS: eventData is a,a,b,[object Object] of type object
+PASS: eventData is 1,2,3 of type object
+PASS: eventData is ,,1 of type object
+PASS: eventData is data of type string
+PASS: eventData is data of type string
+PASS: eventData is 2009-02-13T23:31:30.000Z of type object
+PASS: eventData is [object Object] of type object
+PASS: eventData is true of type object
+PASS: eventData is false of type object
+PASS: eventData is gnirts of type object
+PASS: eventData is 42 of type object
+PASS: eventData is === to eventData.self
+PASS: eventData is === to eventData[0]
+PASS: eventData is === to eventData.self
+PASS: eventData.graph1 is === to eventData.graph2
+PASS: eventData[0] is === to eventData[1]
+PASS: eventData is [object ImageData] of type object
+PASS: eventData is 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 of type object
+PASS: eventData is [object ImageData] of type object
+PASS: eventData is 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 of type object
+PASS: Cloned Blob size equal to the original size.
+PASS: Cloned File size equal to the original size.
+PASS: eventData is 42 of type number
+PASS: eventData is 42 of type number
+PASS: evalThunk OK
+PASS: eventData is [object Object] of type object
+PASS: length correct
+PASS: evaluation order OK
+PASS: evaluation order OK/accessor reached
+PASS: evaluation order OK
+PASS: length correct
+PASS: index 0 OK
+PASS: accessor reached
+PASS: index 2 undefined
+PASS: length correct
+PASS: index 0 OK
+PASS: index 1 OK
+PASS: index 2 OK
+PASS: basic properties OK
+PASS: one accessor was run
+PASS: property was removed
+PASS: property was removed
+PASS: accessor was run
+PASS: dynamic property not sent
+PASS: reference equality preserved
+PASS: accessors used
+PASS: reference equality preserved (opposite order)
+PASS: accessors used (opposite order)
+PASS: accessor value was not nullified
+PASS: non-accessor value was not nullified
+PASS: accessor value was not nullified
+PASS: non-accessor value was not nullified
+PASS: non-accessor value was not nullified
+PASS: accessor value was not nullified
+PASS: non-accessor value was not nullified
+PASS: accessor value was not nullified
+PASS: accessor value was not nullified
+PASS: accessor value was not nullified
+PASS: non-accessor value was not nullified
+PASS: non-accessor value was not nullified
+PASS: non-accessor value is defined
+PASS: non-accessor value was not nullified
+PASS: non-accessor value is defined
+PASS: accessor value was not nullified
+PASS: non-accessor value was not nullified
+PASS: accessor value was not nullified
+PASS: window.pcalled === true
+PASS: window.acalled === true
+PASS: window.bcalled === true
+PASS: Boolean values correct (0)
+PASS: Boolean values correct (3)
+PASS: Boolean values correct (1,2)
+PASS: Boolean values correct (4,5)
+PASS: References to Booleans correct (0,1)
+PASS: References to Booleans correct (3,4)
+PASS: References to Booleans correct (0,2)
+PASS: References to Booleans correct (3,5)
+PASS: Number values correct (0)
+PASS: Number values correct (0,2)
+PASS: References to numbers correct (0,1)
+PASS: References to numbers correct (0,2)
+PASS: String values correct (0)
+PASS: String values correct (0,2)
+PASS: References to strings correct (0,1)
+PASS: References to strings correct (0,2)
+PASS: String object properties not serialized
+PASS: Number object properties not serialized
+PASS: Boolean object properties not serialized
+PASS: Date values correct (0)
+PASS: Date values correct (1)
+PASS: References to dates correct (0)
+PASS: References to dates correct (1)
+PASS: Regexp value correct (0)
+PASS: References to regexps correct (0)
+PASS: References to regexps correct (1)
+PASS: global set (0)
+PASS: global set (1)
+PASS: ignoreCase set (0)
+PASS: ignoreCase set (1)
+PASS: multiline set (0)
+PASS: multiline set (1)
+PASS: lastIndex correct (0)
+PASS: lastIndex correct (1)
+PASS: eventData is 2 of type number
+PASS: file references transfer
+PASS: FileList should not respect reference equality
+PASS: FileList should not respect reference equality
+PASS: FileList respects self-reference equality
+PASS: FileList length sent correctly
+PASS: FileList should not respect reference equality (0)
+PASS: FileList should not respect reference equality (1)
+PASS: FileList preserves order and data (name0)
+PASS: FileList preserves order and data (name1)
+PASS: FileList preserves order and data (date0)
+PASS: FileList preserves order and data (date1)
+PASS: eventData is done of type string
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-clone-frames-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-clone-frames-expected.txt
new file mode 100644
index 0000000..76c63c3
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-clone-frames-expected.txt
@@ -0,0 +1,12 @@
+Tests that we clone object hierarchies
+PASS: (frames[0].tests[0]).eventData instanceof (frames[0]).Object is true of type boolean
+PASS: (frames[0].tests[0]).event.data instanceof (frames[0]).Object is true of type boolean
+PASS: (frames[0].tests[1]).eventData instanceof (frames[0]).Array is true of type boolean
+PASS: (frames[0].tests[1]).event.data instanceof (frames[0]).Array is true of type boolean
+PASS: (frames[0].tests[2]).eventData instanceof (frames[0]).Date is true of type boolean
+PASS: (frames[0].tests[2]).event.data instanceof (frames[0]).Date is true of type boolean
+PASS: (frames[0].tests[3]).eventData instanceof (frames[0]).File is true of type boolean
+PASS: (frames[0].tests[3]).event.data instanceof (frames[0]).File is true of type boolean
+PASS: (frames[0].tests[4]).eventData instanceof (frames[0]).FileList is true of type boolean
+PASS: (frames[0].tests[4]).event.data instanceof (frames[0]).FileList is true of type boolean
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-clone-really-deep-array-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-clone-really-deep-array-expected.txt
new file mode 100644
index 0000000..dffc255
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-clone-really-deep-array-expected.txt
@@ -0,0 +1,4 @@
+Tests that we abort cloning overdeep arrays.
+PASS: 'postMessage(reallyDeepArray)' threw RangeError: Maximum call stack size exceeded
+PASS: eventData is done of type string
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-user-gesture-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-user-gesture-expected.txt
index fd72cb19..eaa0e8a 100644
--- a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-user-gesture-expected.txt
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-postmessage-user-gesture-expected.txt
@@ -1,6 +1,5 @@
 Test that user gesture is available through postMessages to appropriate frames.
 Click me
-
 PASS Stack postMessages on self window and the user gesture is only consumed once
 PASS Bounce postMessages between self and frame window and the user gesture is consumed only once in self window
 PASS Bounce postMessages between self and frame window and the user gesture is consumed 0 times in frame
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-property-clearing-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-property-clearing-expected.txt
new file mode 100644
index 0000000..8c51e778
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-property-clearing-expected.txt
@@ -0,0 +1,17 @@
+This page tests whether global declarations are cleared after a navigation. If the test passes, you'll see a series of PASS messages below.
+
+
+Page 0:
+PASS: 'x' in childWindow should be true and is.
+PASS: childWindow.x should be 1 and is.
+PASS: 'f' in childWindow should be true and is.
+PASS: childWindow.f should be function and is.
+
+Page 1:
+PASS: 'x' in childWindow should be false and is.
+PASS: childWindow.x should be undefined and is.
+PASS: 'f' in childWindow should be false and is.
+PASS: typeof childWindow.f should be undefined and is.
+PASS: 'name' in childWindow should be true and is.
+PASS: childWindow.name should be test and is.
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-resize-and-move-sub-frame-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-resize-and-move-sub-frame-expected.txt
new file mode 100644
index 0000000..2048e74
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/window-resize-and-move-sub-frame-expected.txt
@@ -0,0 +1,36 @@
+This tests that you can't move/resize a window by calling a move/resize on a subframe.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+frames[0].resizeTo Tests
+
+
+PASS window.outerWidth is resetWidth
+PASS window.outerHeight is resetHeight
+
+
+frames[0].resizeBy Tests
+
+
+PASS window.outerWidth is resetWidth
+PASS window.outerHeight is resetHeight
+
+
+frames[0].moveTo Tests
+
+
+PASS window.screenX is resetX
+PASS window.screenY is resetY
+
+
+frames[0].moveBy Tests
+
+
+PASS window.screenX is resetX
+PASS window.screenY is resetY
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/anchor-empty-focus-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/anchor-empty-focus-expected.txt
new file mode 100644
index 0000000..04ba38fa
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/anchor-empty-focus-expected.txt
@@ -0,0 +1,10 @@
+This tests that focus() and sequential focus navigation work on empty anchors.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS document.activeElement is emptyAnchor1
+PASS document.activeElement is emptyAnchor2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-adopt-within-subframes-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-adopt-within-subframes-expected.txt
new file mode 100644
index 0000000..d4bc9a5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-adopt-within-subframes-expected.txt
@@ -0,0 +1,10 @@
+This test ensures beforeunload event fires exactly once in a subframe even if the frame was adopted to a frame that appears later in the tree.
+
+PASS: fired on parent
+PASS: fired on a
+PASS: fired on adoptee
+adopting
+adopted
+PASS: fired on b
+DONE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-crash-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-crash-expected.txt
new file mode 100644
index 0000000..41bb2a8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-crash-expected.txt
@@ -0,0 +1,9 @@
+Detaching a frame in beforeunload event handler should not crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS if no crash
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-forbidden-navigation-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-forbidden-navigation-expected.txt
new file mode 100644
index 0000000..5c63e004
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-forbidden-navigation-expected.txt
@@ -0,0 +1,8 @@
+This test ensures navigation is forbidden while beforeunload event is being fired. You should see PASS 1/2 and PASS 2/2 below:
+
+PASS 1/2
+
+--------
+Frame: '<!--framePath //<!--frame0-->-->'
+--------
+PASS: 2/2
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-in-subframe-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-in-subframe-expected.txt
new file mode 100644
index 0000000..d16afd4
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-in-subframe-expected.txt
@@ -0,0 +1,9 @@
+This tests beforeunload event in subframes. You should see PASS below:
+
+PASS
+
+
+--------
+Frame: '<!--framePath //<!--frame0-->-->'
+--------
+Child loaded.
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-javascript-navigation-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-javascript-navigation-expected.txt
new file mode 100644
index 0000000..1548e0a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-javascript-navigation-expected.txt
@@ -0,0 +1,3 @@
+This test ensures setting location.href with javascript scheme properly executes the script even while beforeunload event is being fired. You should see PASS 1/2 and PASS 2/2 below:
+
+PASS
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-remove-and-add-subframe-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-remove-and-add-subframe-expected.txt
new file mode 100644
index 0000000..b21dd8c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-remove-and-add-subframe-expected.txt
@@ -0,0 +1,7 @@
+This test ensures beforeunload event does not fire for subframes that has been removed from the DOM within a beforeunload event handler. Also ensures the event doesn't fire for subframes added within a beforeunload event handler. The latter behavior matches MSIE.
+
+PASS: fired on parent
+PASS: fired on a
+PASS: fired on c
+DONE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-return-bad-value-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-return-bad-value-expected.txt
new file mode 100644
index 0000000..25afd108
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-return-bad-value-expected.txt
@@ -0,0 +1,10 @@
+Tests that an exception is thrown when the value returned in the beforeunload callback cannot be converted to a String
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS Exception was thrown
+PASS testMessage is "Uncaught Exception in toString()"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-with-subframes-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-with-subframes-expected.txt
new file mode 100644
index 0000000..7212540a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/before-unload-with-subframes-expected.txt
@@ -0,0 +1,9 @@
+This test ensures beforeunload event fires in all subframes when a parent frame is navigated. You should see PASS 1/2 and PASS 2/2 below:
+
+PASS 1/2
+
+
+--------
+Frame: '<!--framePath //<!--frame0-->-->'
+--------
+PASS: 2/2
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/click-range-slider-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/click-range-slider-expected.txt
new file mode 100644
index 0000000..6d275f5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/click-range-slider-expected.txt
@@ -0,0 +1,7 @@
+Test that click events are fired for a slider when the range of values is dense enough that the thumb element is repositioned under the cursor on mouse press.
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS clickCount is 3
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/clipboard-dataTransferItemList-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/clipboard-dataTransferItemList-expected.txt
new file mode 100644
index 0000000..4e13f658
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/clipboard-dataTransferItemList-expected.txt
@@ -0,0 +1,59 @@
+To manually test, press your browser shortcut for copy and then for paste. Several lines that say 'PASS' should appear below.
+
+Copy handler: 
+Legacy
+DataTransferItemList
+Paste handler: 
+Legacy
+DataTransferItemList
+
+Tests copy / paste and DataTransferItemList
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Running test with Legacy copy handler and Legacy paste handler
+PASS testDataTransfer.getData("custom-data") is "hello world"
+PASS testDataTransfer.clearData(nonConvertibleToString) threw exception Exception in toString().
+PASS testDataTransfer.getData("custom-data") is "hello world"
+PASS testDataTransfer.types.length is 4
+PASS testDataTransfer.types.indexOf("text/plain") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/uri-list") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/html") >= 0 is true
+PASS testDataTransfer.types.indexOf("custom-data") >= 0 is true
+PASS testDataTransfer.getData("text") is "sample"
+PASS testDataTransfer.getData("url") is "http://www.google.com/"
+PASS testDataTransfer.getData("text/html") is "<em>Markup</em>"
+PASS testDataTransfer.getData("custom-data") is "hello world"
+Running test with Legacy copy handler and DataTransferItemList paste handler
+PASS testDataTransfer.getData("custom-data") is "hello world"
+PASS testDataTransfer.clearData(nonConvertibleToString) threw exception Exception in toString().
+PASS testDataTransfer.getData("custom-data") is "hello world"
+PASS testDataTransfer.items.length is 4
+PASS JSON.stringify(expectedTypes) is JSON.stringify(types)
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+Running test with DataTransferItemList copy handler and Legacy paste handler
+PASS testDataTransfer.items.item is undefined.
+PASS testDataTransfer.types.length is 4
+PASS testDataTransfer.types.indexOf("text/plain") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/uri-list") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/html") >= 0 is true
+PASS testDataTransfer.types.indexOf("custom-data") >= 0 is true
+PASS testDataTransfer.getData("text") is "sample"
+PASS testDataTransfer.getData("url") is "http://www.google.com/"
+PASS testDataTransfer.getData("text/html") is "<em>Markup</em>"
+PASS testDataTransfer.getData("custom-data") is "hello world"
+Running test with DataTransferItemList copy handler and DataTransferItemList paste handler
+PASS testDataTransfer.items.item is undefined.
+PASS testDataTransfer.items.length is 4
+PASS JSON.stringify(expectedTypes) is JSON.stringify(types)
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/composition-event-source-device-event-sender-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/composition-event-source-device-event-sender-expected.txt
new file mode 100644
index 0000000..e6fc1ea
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/composition-event-source-device-event-sender-expected.txt
@@ -0,0 +1,17 @@
+Test that composition events should have a sourceCapabilities and its firesTouchEvents should always be false.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+compositionstart
+PASS event.sourceCapabilities is non-null.
+PASS event.sourceCapabilities.firesTouchEvents is false
+compositionupdate
+PASS event.sourceCapabilities is non-null.
+PASS event.sourceCapabilities.firesTouchEvents is false
+compositionend
+PASS event.sourceCapabilities is non-null.
+PASS event.sourceCapabilities.firesTouchEvents is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/constructors/track-event-constructor-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/constructors/track-event-constructor-expected.txt
new file mode 100644
index 0000000..44388cd
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/constructors/track-event-constructor-expected.txt
@@ -0,0 +1,39 @@
+This tests the constructor for the TrackEvent DOM class.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+*** No initializer passed ***
+PASS new TrackEvent('TrackEvent').bubbles is false
+PASS new TrackEvent('TrackEvent').cancelable is false
+PASS new TrackEvent('TrackEvent').track is null
+
+*** Bubbles and cancelable true, track is missing ***
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true }).bubbles is true
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true }).cancelable is true
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true }).track is null
+
+*** Bubbles and cancelable true, invalid track ***
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).bubbles threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).cancelable threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).track threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+
+*** Initialize 'track' with a invalid values ***
+PASS new TrackEvent('TrackEvent', { track: 10 }).track threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+PASS new TrackEvent('TrackEvent', { track: 'string' }).track threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+PASS new TrackEvent('TrackEvent', { track: emptyObject }).track threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+PASS new TrackEvent('TrackEvent', { track: document }).track threw exception TypeError: Failed to construct 'TrackEvent': The provided value is not of type '(VideoTrack or AudioTrack or TextTrack)'.
+
+*** Bubbles and cancelable true, valid track ***
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: trackElement.track }).bubbles is true
+PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: trackElement.track }).cancelable is true
+PASS new TrackEvent('TrackEvent', { track: trackElement.track }).track is trackElement.track
+
+*** Initialize 'track' with valid track object ***
+PASS new TrackEvent('TrackEvent', { track: trackElement.track }).track is trackElement.track
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/contextmenu-scrolled-page-with-frame-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/contextmenu-scrolled-page-with-frame-expected.txt
new file mode 100644
index 0000000..a9e7038
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/contextmenu-scrolled-page-with-frame-expected.txt
@@ -0,0 +1,4 @@
+This tests that context menu events are sent to the correct frame when a page is scrolled. To test manually, scroll the page so that the top of the iframe is flush with the top of the web page area, then right-click just below the iframe. You should get a context menu that does not contain any mention of frames.
+
+PASS: main document received a context menu event
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/drag-dataTransferItemList-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/drag-dataTransferItemList-expected.txt
new file mode 100644
index 0000000..de1d329
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/drag-dataTransferItemList-expected.txt
@@ -0,0 +1,81 @@
+To manually test, drag 'Drag Me' to 'Drop Here' and drop. Several lines that say 'PASS' should appear below.
+
+Drag Me
+Drop Here
+Drag handler: 
+Legacy
+DataTransferItemList
+Drop handler: 
+Legacy
+DataTransferItemList
+
+Tests drag'n drop and well as DataTransferItemList
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Running test with Legacy drag handler and Legacy drop handler
+PASS testDataTransfer.types.length is 4
+PASS testDataTransfer.types.indexOf("text/plain") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/uri-list") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/html") >= 0 is true
+PASS testDataTransfer.types.indexOf("custom-data") >= 0 is true
+PASS testDataTransfer.getData("text") is "sample"
+PASS testDataTransfer.getData("url") is "http://www.google.com/"
+PASS testDataTransfer.getData("text/html") is "<em>Markup</em>"
+PASS testDataTransfer.getData("custom-data") is "hello world"
+Running test with Legacy drag handler and DataTransferItemList drop handler
+PASS testDataTransfer.items.length is 4
+PASS testDataTransfer.items.add("test", "text/plain") is null
+PASS testDataTransfer.items.length is 4
+PASS JSON.stringify(expectedTypes) is JSON.stringify(types)
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+Running test with DataTransferItemList drag handler and Legacy drop handler
+PASS testDataTransfer.items.add() threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': 1 argument required, but only 0 present..
+PASS testDataTransfer.items.add(undefined) threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'..
+PASS testDataTransfer.items.add("sample") threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'..
+PASS testDataTransfer.items.add(null) threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'..
+PASS testItem.kind is "string"
+PASS testItem.type is "text/plain"
+PASS testItem.kind is "string"
+PASS testItem.type is "text/uri-list"
+PASS testItem.kind is "string"
+PASS testItem.type is "text/html"
+PASS testItem.kind is "string"
+PASS testItem.type is "custom-data"
+PASS testDataTransfer.types.length is 4
+PASS testDataTransfer.types.indexOf("text/plain") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/uri-list") >= 0 is true
+PASS testDataTransfer.types.indexOf("text/html") >= 0 is true
+PASS testDataTransfer.types.indexOf("custom-data") >= 0 is true
+PASS testDataTransfer.getData("text") is "sample"
+PASS testDataTransfer.getData("url") is "http://www.google.com/"
+PASS testDataTransfer.getData("text/html") is "<em>Markup</em>"
+PASS testDataTransfer.getData("custom-data") is "hello world"
+Running test with DataTransferItemList drag handler and DataTransferItemList drop handler
+PASS testDataTransfer.items.add() threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': 1 argument required, but only 0 present..
+PASS testDataTransfer.items.add(undefined) threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'..
+PASS testDataTransfer.items.add("sample") threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'..
+PASS testDataTransfer.items.add(null) threw exception TypeError: Failed to execute 'add' on 'DataTransferItemList': parameter 1 is not of type 'File'..
+PASS testItem.kind is "string"
+PASS testItem.type is "text/plain"
+PASS testItem.kind is "string"
+PASS testItem.type is "text/uri-list"
+PASS testItem.kind is "string"
+PASS testItem.type is "text/html"
+PASS testItem.kind is "string"
+PASS testItem.type is "custom-data"
+PASS testDataTransfer.items.length is 4
+PASS testDataTransfer.items.add("test", "text/plain") is null
+PASS testDataTransfer.items.length is 4
+PASS JSON.stringify(expectedTypes) is JSON.stringify(types)
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS testData is expectedTestData
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/drag-image-filename-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/drag-image-filename-expected.txt
new file mode 100644
index 0000000..a49e9d20
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/drag-image-filename-expected.txt
@@ -0,0 +1,2 @@
+Filename being dragged: onload-image.png
+This test requires DumpRenderTree. To test manually, drag the image to the desktop. It should receive the name "onload-image.png".
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/drag-selects-image-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/drag-selects-image-expected.txt
new file mode 100644
index 0000000..128a795
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/drag-selects-image-expected.txt
@@ -0,0 +1,13 @@
+Non-editable area
+Editable area
+
+This tests that images are properly left selected or unselected when an image drag is started. Only the image in the editable area should be selected when an image drag is started.
+
+Starting test...
+0 range(s) selected
+Dragging image in non-editable area...
+0 range(s) selected
+Dragging image in editable area...
+1 range(s) selected
+imageTwo is selected
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/drag-svg-image-crash-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/drag-svg-image-crash-expected.txt
new file mode 100644
index 0000000..41065e8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/drag-svg-image-crash-expected.txt
@@ -0,0 +1,3 @@
+Tests dragging an SVG image. Test passes if the test does not crash.
+
+Success - drag entered
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/event-attribute-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/event-attribute-expected.txt
new file mode 100644
index 0000000..9a46b895
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/event-attribute-expected.txt
@@ -0,0 +1,272 @@
+Test that setting event handlers with attribute works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS /*img*/ typeof (element["onclick"]) is "function"
+PASS /*img*/ typeof (element["oncontextmenu"]) is "function"
+PASS /*img*/ typeof (element["ondblclick"]) is "function"
+PASS /*img*/ typeof (element["onmousedown"]) is "function"
+PASS /*img*/ typeof (element["onmousemove"]) is "function"
+PASS /*img*/ typeof (element["onmouseout"]) is "function"
+PASS /*img*/ typeof (element["onmouseover"]) is "function"
+PASS /*img*/ typeof (element["onmouseup"]) is "function"
+PASS /*img*/ typeof (element["onmousewheel"]) is "function"
+PASS /*img*/ typeof (element["onfocus"]) is "function"
+PASS /*img*/ typeof (element["onblur"]) is "function"
+PASS /*img*/ typeof (element["onkeydown"]) is "function"
+PASS /*img*/ typeof (element["onkeypress"]) is "function"
+PASS /*img*/ typeof (element["onkeyup"]) is "function"
+PASS /*img*/ typeof (element["onscroll"]) is "function"
+PASS /*img*/ typeof (element["onbeforecut"]) is "function"
+PASS /*img*/ typeof (element["oncut"]) is "function"
+PASS /*img*/ typeof (element["onbeforecopy"]) is "function"
+PASS /*img*/ typeof (element["oncopy"]) is "function"
+PASS /*img*/ typeof (element["onbeforepaste"]) is "function"
+PASS /*img*/ typeof (element["onpaste"]) is "function"
+PASS /*img*/ typeof (element["ondragenter"]) is "function"
+PASS /*img*/ typeof (element["ondragover"]) is "function"
+PASS /*img*/ typeof (element["ondragleave"]) is "function"
+PASS /*img*/ typeof (element["ondrop"]) is "function"
+PASS /*img*/ typeof (element["ondragstart"]) is "function"
+PASS /*img*/ typeof (element["ondrag"]) is "function"
+PASS /*img*/ typeof (element["ondragend"]) is "function"
+PASS /*img*/ typeof (element["onselectstart"]) is "function"
+PASS /*img*/ typeof (element["onsubmit"]) is "function"
+PASS /*img*/ typeof (element["onerror"]) is "function"
+PASS /*img*/ typeof (element["oninput"]) is "function"
+PASS /*img*/ typeof (element["oninvalid"]) is "function"
+PASS /*img*/ typeof (element["ontouchstart"]) is "function"
+PASS /*img*/ typeof (element["ontouchmove"]) is "function"
+PASS /*img*/ typeof (element["ontouchend"]) is "function"
+PASS /*img*/ typeof (element["ontouchcancel"]) is "function"
+PASS /*img*/ typeof (element["onwebkitfullscreenchange"]) is "function"
+PASS /*img*/ typeof (element["onwebkitfullscreenerror"]) is "function"
+PASS /*img*/ typeof (element["onabort"]) is "function"
+PASS /*img*/ typeof (element["onchange"]) is "function"
+PASS /*img*/ typeof (element["onreset"]) is "function"
+PASS /*img*/ typeof (element["onselect"]) is "function"
+PASS /*img*/ typeof (element["onload"]) is "function"
+PASS /*script*/ typeof (element["onclick"]) is "function"
+PASS /*script*/ typeof (element["oncontextmenu"]) is "function"
+PASS /*script*/ typeof (element["ondblclick"]) is "function"
+PASS /*script*/ typeof (element["onmousedown"]) is "function"
+PASS /*script*/ typeof (element["onmousemove"]) is "function"
+PASS /*script*/ typeof (element["onmouseout"]) is "function"
+PASS /*script*/ typeof (element["onmouseover"]) is "function"
+PASS /*script*/ typeof (element["onmouseup"]) is "function"
+PASS /*script*/ typeof (element["onmousewheel"]) is "function"
+PASS /*script*/ typeof (element["onfocus"]) is "function"
+PASS /*script*/ typeof (element["onblur"]) is "function"
+PASS /*script*/ typeof (element["onkeydown"]) is "function"
+PASS /*script*/ typeof (element["onkeypress"]) is "function"
+PASS /*script*/ typeof (element["onkeyup"]) is "function"
+PASS /*script*/ typeof (element["onscroll"]) is "function"
+PASS /*script*/ typeof (element["onbeforecut"]) is "function"
+PASS /*script*/ typeof (element["oncut"]) is "function"
+PASS /*script*/ typeof (element["onbeforecopy"]) is "function"
+PASS /*script*/ typeof (element["oncopy"]) is "function"
+PASS /*script*/ typeof (element["onbeforepaste"]) is "function"
+PASS /*script*/ typeof (element["onpaste"]) is "function"
+PASS /*script*/ typeof (element["ondragenter"]) is "function"
+PASS /*script*/ typeof (element["ondragover"]) is "function"
+PASS /*script*/ typeof (element["ondragleave"]) is "function"
+PASS /*script*/ typeof (element["ondrop"]) is "function"
+PASS /*script*/ typeof (element["ondragstart"]) is "function"
+PASS /*script*/ typeof (element["ondrag"]) is "function"
+PASS /*script*/ typeof (element["ondragend"]) is "function"
+PASS /*script*/ typeof (element["onselectstart"]) is "function"
+PASS /*script*/ typeof (element["onsubmit"]) is "function"
+PASS /*script*/ typeof (element["onerror"]) is "function"
+PASS /*script*/ typeof (element["oninput"]) is "function"
+PASS /*script*/ typeof (element["oninvalid"]) is "function"
+PASS /*script*/ typeof (element["ontouchstart"]) is "function"
+PASS /*script*/ typeof (element["ontouchmove"]) is "function"
+PASS /*script*/ typeof (element["ontouchend"]) is "function"
+PASS /*script*/ typeof (element["ontouchcancel"]) is "function"
+PASS /*script*/ typeof (element["onwebkitfullscreenchange"]) is "function"
+PASS /*script*/ typeof (element["onwebkitfullscreenerror"]) is "function"
+PASS /*script*/ typeof (element["onabort"]) is "function"
+PASS /*script*/ typeof (element["onchange"]) is "function"
+PASS /*script*/ typeof (element["onreset"]) is "function"
+PASS /*script*/ typeof (element["onselect"]) is "function"
+PASS /*script*/ typeof (element["onload"]) is "function"
+PASS /*video*/ typeof (element["onclick"]) is "function"
+PASS /*video*/ typeof (element["oncontextmenu"]) is "function"
+PASS /*video*/ typeof (element["ondblclick"]) is "function"
+PASS /*video*/ typeof (element["onmousedown"]) is "function"
+PASS /*video*/ typeof (element["onmousemove"]) is "function"
+PASS /*video*/ typeof (element["onmouseout"]) is "function"
+PASS /*video*/ typeof (element["onmouseover"]) is "function"
+PASS /*video*/ typeof (element["onmouseup"]) is "function"
+PASS /*video*/ typeof (element["onmousewheel"]) is "function"
+PASS /*video*/ typeof (element["onfocus"]) is "function"
+PASS /*video*/ typeof (element["onblur"]) is "function"
+PASS /*video*/ typeof (element["onkeydown"]) is "function"
+PASS /*video*/ typeof (element["onkeypress"]) is "function"
+PASS /*video*/ typeof (element["onkeyup"]) is "function"
+PASS /*video*/ typeof (element["onscroll"]) is "function"
+PASS /*video*/ typeof (element["onbeforecut"]) is "function"
+PASS /*video*/ typeof (element["oncut"]) is "function"
+PASS /*video*/ typeof (element["onbeforecopy"]) is "function"
+PASS /*video*/ typeof (element["oncopy"]) is "function"
+PASS /*video*/ typeof (element["onbeforepaste"]) is "function"
+PASS /*video*/ typeof (element["onpaste"]) is "function"
+PASS /*video*/ typeof (element["ondragenter"]) is "function"
+PASS /*video*/ typeof (element["ondragover"]) is "function"
+PASS /*video*/ typeof (element["ondragleave"]) is "function"
+PASS /*video*/ typeof (element["ondrop"]) is "function"
+PASS /*video*/ typeof (element["ondragstart"]) is "function"
+PASS /*video*/ typeof (element["ondrag"]) is "function"
+PASS /*video*/ typeof (element["ondragend"]) is "function"
+PASS /*video*/ typeof (element["onselectstart"]) is "function"
+PASS /*video*/ typeof (element["onsubmit"]) is "function"
+PASS /*video*/ typeof (element["onerror"]) is "function"
+PASS /*video*/ typeof (element["oninput"]) is "function"
+PASS /*video*/ typeof (element["oninvalid"]) is "function"
+PASS /*video*/ typeof (element["ontouchstart"]) is "function"
+PASS /*video*/ typeof (element["ontouchmove"]) is "function"
+PASS /*video*/ typeof (element["ontouchend"]) is "function"
+PASS /*video*/ typeof (element["ontouchcancel"]) is "function"
+PASS /*video*/ typeof (element["onwebkitfullscreenchange"]) is "function"
+PASS /*video*/ typeof (element["onwebkitfullscreenerror"]) is "function"
+PASS /*video*/ typeof (element["onabort"]) is "function"
+PASS /*video*/ typeof (element["onchange"]) is "function"
+PASS /*video*/ typeof (element["onreset"]) is "function"
+PASS /*video*/ typeof (element["onselect"]) is "function"
+PASS /*video*/ typeof (element["onload"]) is "function"
+PASS /*div*/ typeof (element["onclick"]) is "function"
+PASS /*div*/ typeof (element["oncontextmenu"]) is "function"
+PASS /*div*/ typeof (element["ondblclick"]) is "function"
+PASS /*div*/ typeof (element["onmousedown"]) is "function"
+PASS /*div*/ typeof (element["onmousemove"]) is "function"
+PASS /*div*/ typeof (element["onmouseout"]) is "function"
+PASS /*div*/ typeof (element["onmouseover"]) is "function"
+PASS /*div*/ typeof (element["onmouseup"]) is "function"
+PASS /*div*/ typeof (element["onmousewheel"]) is "function"
+PASS /*div*/ typeof (element["onfocus"]) is "function"
+PASS /*div*/ typeof (element["onblur"]) is "function"
+PASS /*div*/ typeof (element["onkeydown"]) is "function"
+PASS /*div*/ typeof (element["onkeypress"]) is "function"
+PASS /*div*/ typeof (element["onkeyup"]) is "function"
+PASS /*div*/ typeof (element["onscroll"]) is "function"
+PASS /*div*/ typeof (element["onbeforecut"]) is "function"
+PASS /*div*/ typeof (element["oncut"]) is "function"
+PASS /*div*/ typeof (element["onbeforecopy"]) is "function"
+PASS /*div*/ typeof (element["oncopy"]) is "function"
+PASS /*div*/ typeof (element["onbeforepaste"]) is "function"
+PASS /*div*/ typeof (element["onpaste"]) is "function"
+PASS /*div*/ typeof (element["ondragenter"]) is "function"
+PASS /*div*/ typeof (element["ondragover"]) is "function"
+PASS /*div*/ typeof (element["ondragleave"]) is "function"
+PASS /*div*/ typeof (element["ondrop"]) is "function"
+PASS /*div*/ typeof (element["ondragstart"]) is "function"
+PASS /*div*/ typeof (element["ondrag"]) is "function"
+PASS /*div*/ typeof (element["ondragend"]) is "function"
+PASS /*div*/ typeof (element["onselectstart"]) is "function"
+PASS /*div*/ typeof (element["onsubmit"]) is "function"
+PASS /*div*/ typeof (element["onerror"]) is "function"
+PASS /*div*/ typeof (element["oninput"]) is "function"
+PASS /*div*/ typeof (element["oninvalid"]) is "function"
+PASS /*div*/ typeof (element["ontouchstart"]) is "function"
+PASS /*div*/ typeof (element["ontouchmove"]) is "function"
+PASS /*div*/ typeof (element["ontouchend"]) is "function"
+PASS /*div*/ typeof (element["ontouchcancel"]) is "function"
+PASS /*div*/ typeof (element["onwebkitfullscreenchange"]) is "function"
+PASS /*div*/ typeof (element["onwebkitfullscreenerror"]) is "function"
+PASS /*div*/ typeof (element["onabort"]) is "function"
+PASS /*div*/ typeof (element["onchange"]) is "function"
+PASS /*div*/ typeof (element["onreset"]) is "function"
+PASS /*div*/ typeof (element["onselect"]) is "function"
+PASS /*div*/ typeof (element["onload"]) is "function"
+PASS /*form*/ typeof (element["onclick"]) is "function"
+PASS /*form*/ typeof (element["oncontextmenu"]) is "function"
+PASS /*form*/ typeof (element["ondblclick"]) is "function"
+PASS /*form*/ typeof (element["onmousedown"]) is "function"
+PASS /*form*/ typeof (element["onmousemove"]) is "function"
+PASS /*form*/ typeof (element["onmouseout"]) is "function"
+PASS /*form*/ typeof (element["onmouseover"]) is "function"
+PASS /*form*/ typeof (element["onmouseup"]) is "function"
+PASS /*form*/ typeof (element["onmousewheel"]) is "function"
+PASS /*form*/ typeof (element["onfocus"]) is "function"
+PASS /*form*/ typeof (element["onblur"]) is "function"
+PASS /*form*/ typeof (element["onkeydown"]) is "function"
+PASS /*form*/ typeof (element["onkeypress"]) is "function"
+PASS /*form*/ typeof (element["onkeyup"]) is "function"
+PASS /*form*/ typeof (element["onscroll"]) is "function"
+PASS /*form*/ typeof (element["onbeforecut"]) is "function"
+PASS /*form*/ typeof (element["oncut"]) is "function"
+PASS /*form*/ typeof (element["onbeforecopy"]) is "function"
+PASS /*form*/ typeof (element["oncopy"]) is "function"
+PASS /*form*/ typeof (element["onbeforepaste"]) is "function"
+PASS /*form*/ typeof (element["onpaste"]) is "function"
+PASS /*form*/ typeof (element["ondragenter"]) is "function"
+PASS /*form*/ typeof (element["ondragover"]) is "function"
+PASS /*form*/ typeof (element["ondragleave"]) is "function"
+PASS /*form*/ typeof (element["ondrop"]) is "function"
+PASS /*form*/ typeof (element["ondragstart"]) is "function"
+PASS /*form*/ typeof (element["ondrag"]) is "function"
+PASS /*form*/ typeof (element["ondragend"]) is "function"
+PASS /*form*/ typeof (element["onselectstart"]) is "function"
+PASS /*form*/ typeof (element["onsubmit"]) is "function"
+PASS /*form*/ typeof (element["onerror"]) is "function"
+PASS /*form*/ typeof (element["oninput"]) is "function"
+PASS /*form*/ typeof (element["oninvalid"]) is "function"
+PASS /*form*/ typeof (element["ontouchstart"]) is "function"
+PASS /*form*/ typeof (element["ontouchmove"]) is "function"
+PASS /*form*/ typeof (element["ontouchend"]) is "function"
+PASS /*form*/ typeof (element["ontouchcancel"]) is "function"
+PASS /*form*/ typeof (element["onwebkitfullscreenchange"]) is "function"
+PASS /*form*/ typeof (element["onwebkitfullscreenerror"]) is "function"
+PASS /*form*/ typeof (element["onabort"]) is "function"
+PASS /*form*/ typeof (element["onchange"]) is "function"
+PASS /*form*/ typeof (element["onreset"]) is "function"
+PASS /*form*/ typeof (element["onselect"]) is "function"
+PASS /*form*/ typeof (element["onload"]) is "function"
+PASS /*input*/ typeof (element["onclick"]) is "function"
+PASS /*input*/ typeof (element["oncontextmenu"]) is "function"
+PASS /*input*/ typeof (element["ondblclick"]) is "function"
+PASS /*input*/ typeof (element["onmousedown"]) is "function"
+PASS /*input*/ typeof (element["onmousemove"]) is "function"
+PASS /*input*/ typeof (element["onmouseout"]) is "function"
+PASS /*input*/ typeof (element["onmouseover"]) is "function"
+PASS /*input*/ typeof (element["onmouseup"]) is "function"
+PASS /*input*/ typeof (element["onmousewheel"]) is "function"
+PASS /*input*/ typeof (element["onfocus"]) is "function"
+PASS /*input*/ typeof (element["onblur"]) is "function"
+PASS /*input*/ typeof (element["onkeydown"]) is "function"
+PASS /*input*/ typeof (element["onkeypress"]) is "function"
+PASS /*input*/ typeof (element["onkeyup"]) is "function"
+PASS /*input*/ typeof (element["onscroll"]) is "function"
+PASS /*input*/ typeof (element["onbeforecut"]) is "function"
+PASS /*input*/ typeof (element["oncut"]) is "function"
+PASS /*input*/ typeof (element["onbeforecopy"]) is "function"
+PASS /*input*/ typeof (element["oncopy"]) is "function"
+PASS /*input*/ typeof (element["onbeforepaste"]) is "function"
+PASS /*input*/ typeof (element["onpaste"]) is "function"
+PASS /*input*/ typeof (element["ondragenter"]) is "function"
+PASS /*input*/ typeof (element["ondragover"]) is "function"
+PASS /*input*/ typeof (element["ondragleave"]) is "function"
+PASS /*input*/ typeof (element["ondrop"]) is "function"
+PASS /*input*/ typeof (element["ondragstart"]) is "function"
+PASS /*input*/ typeof (element["ondrag"]) is "function"
+PASS /*input*/ typeof (element["ondragend"]) is "function"
+PASS /*input*/ typeof (element["onselectstart"]) is "function"
+PASS /*input*/ typeof (element["onsubmit"]) is "function"
+PASS /*input*/ typeof (element["onerror"]) is "function"
+PASS /*input*/ typeof (element["oninput"]) is "function"
+PASS /*input*/ typeof (element["oninvalid"]) is "function"
+PASS /*input*/ typeof (element["ontouchstart"]) is "function"
+PASS /*input*/ typeof (element["ontouchmove"]) is "function"
+PASS /*input*/ typeof (element["ontouchend"]) is "function"
+PASS /*input*/ typeof (element["ontouchcancel"]) is "function"
+PASS /*input*/ typeof (element["onwebkitfullscreenchange"]) is "function"
+PASS /*input*/ typeof (element["onwebkitfullscreenerror"]) is "function"
+PASS /*input*/ typeof (element["onabort"]) is "function"
+PASS /*input*/ typeof (element["onchange"]) is "function"
+PASS /*input*/ typeof (element["onreset"]) is "function"
+PASS /*input*/ typeof (element["onselect"]) is "function"
+PASS /*input*/ typeof (element["onload"]) is "function"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/focus-querySelector-in-focus-event-handler-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/focus-querySelector-in-focus-event-handler-expected.txt
new file mode 100644
index 0000000..fd51af3f
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/focus-querySelector-in-focus-event-handler-expected.txt
@@ -0,0 +1,5 @@
+PASS :focus matches event.target
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/form-onchange-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/form-onchange-expected.txt
new file mode 100644
index 0000000..2bcd72e
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/form-onchange-expected.txt
@@ -0,0 +1,11 @@
+Tests that the onchange event can be set on any element with an attribute.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS input.onchange fired.
+PASS form.onchange fired.
+PASS div.onchange fired.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/hit-test-clip-path-reference-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/hit-test-clip-path-reference-expected.txt
new file mode 100644
index 0000000..5b2f327
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/hit-test-clip-path-reference-expected.txt
@@ -0,0 +1,17 @@
+Test that hit-test work with clip-path using svg reference
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS path contains point at (99, 247)
+PASS path contains point at (94, 242)
+PASS path contains point at (104, 252)
+PASS path contains point at (94, 252)
+PASS path contains point at (104, 242)
+PASS path does not contain point at (67, 215)
+PASS path does not contain point at (66, 214)
+PASS path does not contain point at (68, 216)
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/hit-test-counts-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/hit-test-counts-expected.txt
new file mode 100644
index 0000000..e8366d2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/hit-test-counts-expected.txt
@@ -0,0 +1,93 @@
+Count how many hit tests are required for various event scenarios. Hit tests can be expensive and it's often tempting to add more. These values should only ever be changed to go down, not up.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+Event on a simple div
+---------------------
+Initial: 0+0
+MouseMove: 1+0
+MouseDown: 1+2
+MouseUp: 0+1
+Wheel: 0+1
+TouchStart: 1+1
+TouchMove: 0+0
+TouchEnd: 0+0
+GestureTapDown: 0+1
+GestureShowPress: 0+1
+GestureTap: 0+3
+GestureScrollBegin: 0+1
+GestureTapCancel: 0+1
+GestureScrollUpdate: 0+0
+GestureScrollEnd: 0+0
+DoubleFingerTouch: 2+0
+
+Event entirely over one iframe nested in another
+---------------------
+Initial: 0+0 0+0 0+0
+MouseMove: 1+0 1+0 1+0
+MouseDown: 1+1 1+1 1+2
+MouseUp: 0+1 0+1 0+1
+Wheel: 0+1 0+1 0+1
+TouchStart: 2+0 2+0 1+1
+TouchMove: 0+0 0+0 0+0
+TouchEnd: 0+0 0+0 0+0
+GestureTapDown: 1+0 1+0 0+1
+GestureShowPress: 1+0 1+0 0+1
+GestureTap: 1+0 1+0 0+3
+GestureScrollBegin: 0+1 0+1 0+1
+GestureTapCancel: 1+0 1+0 0+1
+GestureScrollUpdate: 0+0 0+0 0+0
+GestureScrollEnd: 0+0 0+0 0+0
+DoubleFingerTouch: 2+0 2+0 2+0
+
+Event near boundary of two iframes
+---------------------
+Initial: 0+0 0+0 0+0
+MouseMove: 1+0 1+0 0+0
+MouseDown: 1+1 1+2 0+0
+MouseUp: 0+1 0+1 0+0
+Wheel: 0+1 0+1 0+0
+TouchStart: 2+0 1+1 1+0
+TouchMove: 0+0 0+0 0+0
+TouchEnd: 0+0 0+0 0+0
+GestureTapDown: 1+0 0+1 0+0
+GestureShowPress: 1+0 0+1 0+0
+GestureTap: 1+0 0+3 0+0
+GestureScrollBegin: 0+1 0+1 0+0
+GestureTapCancel: 1+0 0+1 0+0
+GestureScrollUpdate: 0+0 0+0 0+0
+GestureScrollEnd: 0+0 0+0 0+0
+DoubleFingerTouch: 2+0 2+0 1+0
+
+Event on a simple div (desktop viewport)
+---------------------
+Initial: 0+0
+MouseMove: 1+0
+MouseDown: 1+2
+MouseUp: 0+1
+Wheel: 0+1
+TouchStart: 1+1
+TouchMove: 0+0
+TouchEnd: 0+0
+GestureTapDown: 0+1
+GestureShowPress: 0+1
+GestureTap: 0+3
+GestureScrollBegin: 0+1
+GestureTapCancel: 0+1
+GestureScrollUpdate: 0+0
+GestureScrollEnd: 0+0
+DoubleFingerTouch: 2+0
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/iframe-mousewheel-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/iframe-mousewheel-expected.txt
new file mode 100644
index 0000000..6d4c85e5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/iframe-mousewheel-expected.txt
@@ -0,0 +1,9 @@
+This test can be used to verify that a mousewheel event is fired when wheeling over the subframe but not dispatched to the parent frame.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS received mousewheel event.
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/iframe-onmousemove-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/iframe-onmousemove-expected.txt
new file mode 100644
index 0000000..2d57d4c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/iframe-onmousemove-expected.txt
@@ -0,0 +1,11 @@
+This test can be used to verify that a mousemove event is fired when moving the mouse cursor over an element in a subframe.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS received mousemove event.
+
+TEST COMPLETE
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/ime-composition-events-001-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/ime-composition-events-001-expected.txt
new file mode 100644
index 0000000..9cdd53cd
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/ime-composition-events-001-expected.txt
@@ -0,0 +1,56 @@
+This tests that calling input-method functions sends Composition Events and Text Events introduced in DOM Level 3. To test manually, enable an IME, input CJK characters, and see this page doesn't show 'FAIL' lines.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS event.type is "compositionstart"
+PASS event.data is ""
+PASS event.type is "compositionupdate"
+PASS event.data is "1"
+PASS event.type is "compositionupdate"
+PASS event.data is "2"
+PASS event.type is "compositionupdate"
+PASS event.data is "3"
+PASS event.type is "compositionupdate"
+PASS event.data is "4"
+PASS event.type is "textInput"
+PASS event.data is "4"
+PASS event.type is "compositionend"
+PASS event.data is "4"
+PASS event.type is "compositionstart"
+PASS event.data is ""
+PASS event.type is "compositionupdate"
+PASS event.data is "5"
+PASS event.type is "compositionupdate"
+PASS event.data is "6"
+PASS event.type is "compositionupdate"
+PASS event.data is "7"
+PASS event.type is "compositionupdate"
+PASS event.data is ""
+PASS event.type is "textInput"
+PASS event.data is ""
+PASS event.type is "compositionend"
+PASS event.data is ""
+PASS event.type is "textInput"
+PASS event.data is "8"
+PASS event.type is "compositionstart"
+PASS event.data is ""
+PASS event.type is "compositionupdate"
+PASS event.data is "9"
+PASS event.type is "compositionend"
+PASS event.data is "9"
+PASS event.type is "compositionstart"
+PASS event.data is "have"
+PASS event.type is "compositionupdate"
+PASS event.data is "lost"
+PASS test.value is "I lost a pen"
+PASS event.type is "compositionupdate"
+PASS event.data is "made"
+PASS event.type is "textInput"
+PASS event.data is "made"
+PASS event.type is "compositionend"
+PASS event.data is "made"
+PASS test.value is "I made a pen"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/initkeyboardevent-crash-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/initkeyboardevent-crash-expected.txt
new file mode 100644
index 0000000..1ec136c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/initkeyboardevent-crash-expected.txt
@@ -0,0 +1,3 @@
+This tests that dispatching a keyboard event created via javascript does not crash.
+
+PASSED
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/javascript-uri-navigation-blocked-in-unload-handler-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/javascript-uri-navigation-blocked-in-unload-handler-expected.txt
new file mode 100644
index 0000000..695552ac
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/javascript-uri-navigation-blocked-in-unload-handler-expected.txt
@@ -0,0 +1,2 @@
+PASS: script executed
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/key-events-in-input-button-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/key-events-in-input-button-expected.txt
new file mode 100644
index 0000000..3c49f48
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/key-events-in-input-button-expected.txt
@@ -0,0 +1,18 @@
+To test manually, press keys and compare results to other browsers.
+
+target - type - ctrlKey,altKey,shiftKey,metaKey - key - keyCode - charCode
+Space:
+INPUT - keydown - false,false,false,false - - 32 - 0
+INPUT - keypress - false,false,false,false - - 32 - 32
+INPUT - keyup - false,false,false,false - - 32 - 0
+INPUT - click
+Enter:
+INPUT - keydown - false,false,false,false -Enter- 13 - 0
+INPUT - keypress - false,false,false,false -Enter- 13 - 13
+INPUT - click
+INPUT - keyup - false,false,false,false -Enter- 13 - 0
+A:
+INPUT - keydown - false,false,true,false -A- 65 - 0
+INPUT - keypress - false,false,true,false -A- 65 - 65
+INPUT - keyup - false,false,true,false -A- 65 - 0
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/keydown-1-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/keydown-1-expected.txt
new file mode 100644
index 0000000..08105613
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/keydown-1-expected.txt
@@ -0,0 +1,5 @@
+This tests that keydown events aren't sent to the main frame for command key presses that occur when a subframe is first responder. To run it manually, click inside the subframe, type a few characters, then do Command-A to Select All. Only the subframe should report a keydown event.
+
+keydown in subframe: [object KeyboardEvent]
+keydown in subframe: [object KeyboardEvent]
+This sentence should not end with a period
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/keydown-function-keys-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/keydown-function-keys-expected.txt
new file mode 100644
index 0000000..51fa6d8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/keydown-function-keys-expected.txt
@@ -0,0 +1,26 @@
+This test verifies the keycodes sent when we press function keys.
+
+Type=keydown,keyCode=112,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=112,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=113,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=113,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=114,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=114,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=115,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=115,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=116,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=116,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=117,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=117,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=118,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=118,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=119,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=119,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=120,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=120,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=121,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=121,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=122,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=122,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keydown,keyCode=123,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
+Type=keyup,keyCode=123,ctrlKey=false,shiftKey=false,altKey=false,metaKey=false
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/keydown-remove-frame-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/keydown-remove-frame-expected.txt
new file mode 100644
index 0000000..6e840f29
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/keydown-remove-frame-expected.txt
@@ -0,0 +1 @@
+Tests that WebKit does not crash when a frame is removed during keydown event processing. To test manually, press any letter key. The iframe below should disappear and Safari should not crash.
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/message-port-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/message-port-expected.txt
new file mode 100644
index 0000000..955ad37
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/message-port-expected.txt
@@ -0,0 +1,16 @@
+Test cross-frame MessagePort communication.
+
+Should be a series of SUCCESS messages, followed with DONE.
+
+Simple exchange: SUCCESS
+Simple exchange: SUCCESS
+Posted port: SUCCESS
+Posted port: SUCCESS
+Event Listener: SUCCESS
+Event Listener: SUCCESS
+Closed port: SUCCESS
+Closed port: SUCCESS
+MessageEvent.cancelable defaults to false: PASS
+MessageEvent.cancelable defaults to false: PASS
+DONE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/message-port-inactive-document-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/message-port-inactive-document-expected.txt
new file mode 100644
index 0000000..ecb4e30
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/message-port-inactive-document-expected.txt
@@ -0,0 +1,4 @@
+Test that messaging an inactive frameless document works as expected.
+
+Didn't crash, freeze or respond: SUCCESS
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/middleClickAutoscroll-drag-scrollable-iframe-div-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/middleClickAutoscroll-drag-scrollable-iframe-div-expected.txt
new file mode 100644
index 0000000..f3126137
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/middleClickAutoscroll-drag-scrollable-iframe-div-expected.txt
@@ -0,0 +1,12 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+Starting Autoscroll test on iframe
+PASSED : the autoscroll has worked !
+
+Test for bug 336373.
+
+To test manually, hold the middle mouse button on the box with scrollbars and scroll by dragging the mouse outside the bounds of the box. If the bug occurs once the cursor leaves the bounds of the box it will remain stuck in the panning state.
+
+Click me
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/middleClickAutoscroll-modal-scrollable-iframe-div-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/middleClickAutoscroll-modal-scrollable-iframe-div-expected.txt
new file mode 100644
index 0000000..f3126137
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/middleClickAutoscroll-modal-scrollable-iframe-div-expected.txt
@@ -0,0 +1,12 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+Starting Autoscroll test on iframe
+PASSED : the autoscroll has worked !
+
+Test for bug 336373.
+
+To test manually, hold the middle mouse button on the box with scrollbars and scroll by dragging the mouse outside the bounds of the box. If the bug occurs once the cursor leaves the bounds of the box it will remain stuck in the panning state.
+
+Click me
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouse-cursor-style-change-iframe-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouse-cursor-style-change-iframe-expected.txt
new file mode 100644
index 0000000..4621ac5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouse-cursor-style-change-iframe-expected.txt
@@ -0,0 +1,22 @@
+Test that a cursor change that occurs due only to a style change correctly considers iframes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Mouse moved to cursor changing div
+PASS internals.getCurrentCursorInfo() is "type=Hand hotSpot=0,0"
+Changing cursor style
+PASS internals.getCurrentCursorInfo() is "type=Wait hotSpot=0,0"
+
+Now move mouse onto iframe above cursor changing div
+PASS document.elementFromPoint(100, y) is frame
+PASS document.elementsFromPoint(100, y).indexOf(container) > 0 is true
+PASS internals.cursorUpdatePending is false
+PASS internals.getCurrentCursorInfo() is "type=IBeam hotSpot=0,0"
+
+Changing cursor style of the background should not affect the cursor as it sits over the iframe
+PASS internals.getCurrentCursorInfo() is "type=IBeam hotSpot=0,0"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouse-drag-from-frame-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouse-drag-from-frame-expected.txt
new file mode 100644
index 0000000..c920b0a5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouse-drag-from-frame-expected.txt
@@ -0,0 +1,5 @@
+This tests that dragging from an element that returns false from its mousedown handler will not let the subsequent mousemove events be captured by the containing frame.
+Drag started
+Received mouse move
+Received mouseup event
+PASS!
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouse-relative-position-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouse-relative-position-expected.txt
new file mode 100644
index 0000000..cfb9c50
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouse-relative-position-expected.txt
@@ -0,0 +1,8 @@
+span
+PASS simulateElementClick(testElement, [100, 100, 200, 200]); is '100, 100, 200, 200'
+PASS simulateElementClick(spanElement, [16, 10, 16, 10]); is '16, 10, 16, 10'
+PASS simulateElementClick(inputElement, [39, 9, 95, 10]); is '39, 9, 95, 10'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mousedown-in-subframe-scrollbar-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mousedown-in-subframe-scrollbar-expected.txt
new file mode 100644
index 0000000..82da401e
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mousedown-in-subframe-scrollbar-expected.txt
@@ -0,0 +1,12 @@
+This tests that clicking on a scrollbar in a frame does not clear selections in the frame.
+
+Selection: This
+is
+text
+to
+force
+a
+vertical
+scrollbar
+to
+appear.
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mousemove-from-iframe-to-top-element-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mousemove-from-iframe-to-top-element-expected.txt
new file mode 100644
index 0000000..7ed497a1
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mousemove-from-iframe-to-top-element-expected.txt
@@ -0,0 +1,32 @@
+TOP
+
+Tests that hover is lost from iframe when the mouse is moved from iframe to the element that stacked up on iframe
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS hoverBgColor is "rgb(255, 0, 0)"
+
+
+PASS events[0] is "mouseenter"
+PASS targetIds[0] is "target"
+
+
+PASS events[1] is "mousemove"
+PASS targetIds[1] is "target"
+
+
+PASS bgColor is "rgb(255, 255, 0)"
+
+
+FAIL events[2] should be mouseleave. Was mouseout.
+PASS targetIds[2] is "target"
+
+
+FAIL events[3] should be mouseout. Was mouseleave.
+PASS targetIds[3] is "target"
+
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouseover-mouseout-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouseover-mouseout-expected.txt
new file mode 100644
index 0000000..a740a2ab
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouseover-mouseout-expected.txt
@@ -0,0 +1,33 @@
+Tests for bugs 3439, 5764, 7701 - Mouse events vs. DOM manipulation.
+
+Move the mouse pointer from left to right:
+
+1              
+1              
+2
+3
+4
+5
+Log
+
+mouseover on t1_1
+mouseout on t1_1
+mouseover on t1_2
+mouseout on t1_2
+mouseover on t2_1
+mouseout on t2_1
+mouseover on t2_2
+mouseout on t2_2
+mouseover on t3_1
+mouseover on t3_2
+mouseout on t3_2
+mouseover on t4_1
+mouseover on t4_2
+mouseout on t4_2
+mouseover on t5_1
+mouseover on t5_2
+mouseout on t5_2
+mouseover on frame6
+mouseover on t6
+mouseout on t6
+mouseout on frame6
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouseup-outside-button-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouseup-outside-button-expected.txt
new file mode 100644
index 0000000..decaa33
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/mouseup-outside-button-expected.txt
@@ -0,0 +1,11 @@
+This test verifies that a button that receives a mouse down event does not receive a corresponding mouse up event when the mouse up happens outside the button.
+
+If the test passes, you'll see a PASS message below.
+
+To run this test in Safari:
+
+Mouse down inside the button.
+Move the mouse outside the button.
+Mouse up.
+
+PASS: mouse up event did not fire
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onchange-passwordfield-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onchange-passwordfield-expected.txt
new file mode 100644
index 0000000..3881b16
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onchange-passwordfield-expected.txt
@@ -0,0 +1,5 @@
+This test verifies that the ENTER key fires the change event.
+
+PASS: change event fired.
+
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onchange-range-slider-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onchange-range-slider-expected.txt
new file mode 100644
index 0000000..a0182f3
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onchange-range-slider-expected.txt
@@ -0,0 +1,8 @@
+This test verifies that updating the slider for an input element with type=range fires a change event.
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+PASS Change event fired.
+PASS slider.value is "0"
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onchange-searchfield-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onchange-searchfield-expected.txt
new file mode 100644
index 0000000..3881b16
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onchange-searchfield-expected.txt
@@ -0,0 +1,5 @@
+This test verifies that the ENTER key fires the change event.
+
+PASS: change event fired.
+
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onchange-textfield-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onchange-textfield-expected.txt
new file mode 100644
index 0000000..3881b16
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onchange-textfield-expected.txt
@@ -0,0 +1,5 @@
+This test verifies that the ENTER key fires the change event.
+
+PASS: change event fired.
+
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onload-after-document-close-no-subresource-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onload-after-document-close-no-subresource-expected.txt
new file mode 100644
index 0000000..3132777
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onload-after-document-close-no-subresource-expected.txt
@@ -0,0 +1,4 @@
+This test verifies that the load event fires after a document.close, even if the document contains no subresources. See bug 13241.
+
+PASS: onload fired
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onload-after-document-close-with-subresource-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onload-after-document-close-with-subresource-expected.txt
new file mode 100644
index 0000000..e1cfdca8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onload-after-document-close-with-subresource-expected.txt
@@ -0,0 +1,5 @@
+This test verifies that the load event doesn't fire until subresource content has loaded, even if you manually call document.close beforehand. See bug 13241.
+
+dimensions before onload (should be { 0 x 0 }, otherwise the test will falsely pass): { 0 x 0 }
+dimensions during onload (should be { 215 x 174 }, otherwise onload fired too early): { 215 x 174 }
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onsubmit-bubbling-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onsubmit-bubbling-expected.txt
new file mode 100644
index 0000000..ea03b2b
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/onsubmit-bubbling-expected.txt
@@ -0,0 +1,4 @@
+This page tests whether the form 'submit' event bubbles to containing elements. If it passes, you'll see 'PASS' messages below.
+
+PASS: containing element div2 caught submit event
+PASS: containing element div1 caught submit event
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/page-visibility-iframe-propagation-test-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/page-visibility-iframe-propagation-test-expected.txt
new file mode 100644
index 0000000..c22e5b2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/page-visibility-iframe-propagation-test-expected.txt
@@ -0,0 +1,26 @@
+This test checks that Page Visibility state events are propagated to child frames.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Main Page:
+PASS document.visibilityState is "visible"
+PASS document.hidden is false
+Child Frame:
+PASS childFrame.contentDocument.visibilityState is "visible"
+PASS childFrame.contentDocument.hidden is false
+Main Page:
+PASS document.visibilityState is "hidden"
+PASS document.hidden is true
+Child Frame:
+PASS childFrame.contentDocument.visibilityState is "hidden"
+PASS childFrame.contentDocument.hidden is true
+Main Page:
+PASS document.visibilityState is "visible"
+PASS document.hidden is false
+Child Frame:
+PASS childFrame.contentDocument.visibilityState is "visible"
+PASS childFrame.contentDocument.hidden is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/pageshow-pagehide-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/pageshow-pagehide-expected.txt
new file mode 100644
index 0000000..ff985236
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/pageshow-pagehide-expected.txt
@@ -0,0 +1,23 @@
+Test pageshow/pagehide event behavior in subframes.
+
+***Original load - onload and pageshow events should fire for subframes, and then for main frame***
+Subsubframe window.onload
+Subsubframe window.onpageshow, target = [object HTMLDocument], persisted = false
+Subframe window.onload
+Subframe window.onpageshow, target = [object HTMLDocument], persisted = false
+Main frame window.onload
+Main frame window.onpageshow, target = [object HTMLDocument], persisted = false
+***Navigating bottom-level subframe, onpagehide events should fire for subsubframe***
+Subsubframe window.onpagehide, target = [object HTMLDocument], persisted = false
+Subsubframe window.onunload
+Subsubframe window.onload
+Subsubframe window.onpageshow, target = [object HTMLDocument], persisted = false
+***Navigating mid-level subframe, onpagehide events should fire for both subframes***
+Subframe window.onpagehide, target = [object HTMLDocument], persisted = false
+Subframe window.onunload
+Subsubframe window.onpagehide, target = [object HTMLDocument], persisted = false
+Subsubframe window.onunload
+Subframe window.onload
+Subframe window.onpageshow, target = [object HTMLDocument], persisted = false
+***Done***
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/popup-allowed-from-gesture-only-once-iframes-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/popup-allowed-from-gesture-only-once-iframes-expected.txt
new file mode 100644
index 0000000..0b5b1d2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/popup-allowed-from-gesture-only-once-iframes-expected.txt
@@ -0,0 +1,5 @@
+Test that we don't create a new user gesture indicator every time an event is passed to an iframe.
+
+To run, click on the iframe. The test passes, if only one window is opened in response to the click.
+
+PASSED
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/popup-blocked-to-post-blank-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/popup-blocked-to-post-blank-expected.txt
new file mode 100644
index 0000000..7f4325c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/popup-blocked-to-post-blank-expected.txt
@@ -0,0 +1,2 @@
+CONSOLE ERROR: Not allowed to navigate top frame to data URL: data:text/html,<script>alert(window)</script>?
+If the POST pop-up was not blocked then there will be an ALERT containing a Window object. Otherwise, the test passes.
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/popup-when-select-change-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/popup-when-select-change-expected.txt
new file mode 100644
index 0000000..444e7f8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/popup-when-select-change-expected.txt
@@ -0,0 +1,4 @@
+CONSOLE MESSAGE: line 1: PASSED
+abcd
+efgh
+ If the pop-up was not blocked then there will be an PASS message. Otherwise, the test fails.
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/programmatic-check-no-change-event-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/programmatic-check-no-change-event-expected.txt
new file mode 100644
index 0000000..a1c2c893
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/programmatic-check-no-change-event-expected.txt
@@ -0,0 +1,4 @@
+This test checks that programmaticly changing the checked state of a checkbox does not fire the "change" event (but user action like calling "click" does).
+
+PASS: got exactly one change event.
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/remove-text-node-in-mouseup-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/remove-text-node-in-mouseup-expected.txt
new file mode 100644
index 0000000..fefaf6ab
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/remove-text-node-in-mouseup-expected.txt
@@ -0,0 +1,3 @@
+This test ensures Blink does fire a click event on the parent element of a clicked text node even when the text node has been removed in mouseup event.
+
+PASS
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/resize-raf-timing-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/resize-raf-timing-expected.txt
new file mode 100644
index 0000000..8d2a495
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/resize-raf-timing-expected.txt
@@ -0,0 +1,9 @@
+Test that resize events are fired at requestAnimationFrame timing
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS resizeEventCount is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/right-click-focus-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/right-click-focus-expected.txt
new file mode 100644
index 0000000..e70f436
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/right-click-focus-expected.txt
@@ -0,0 +1,4 @@
+Test that right-clicking on a text area properly focuses it.
+
+PASS
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/select-element-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/select-element-expected.txt
new file mode 100644
index 0000000..b966f2ae
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/select-element-expected.txt
@@ -0,0 +1,142 @@
+This test verifies that the Home/End/PageUp/PageDown keys work correctly for <select> elements. Since it requires eventSender.keyDown, it will not run solo in the web browser; it must be run with run_web_tests.py.
+
+0
+1
+2
+3
+4
+5
+6
+ 
+0
+1
+2
+3
+4
+5
+6
+7
+ 
+0
+1
+2
+3
+4
+5
+6
+
+PASS sendKeyAndExpectIndex("ss", "PageDown", 0, 3) is true
+PASS sendKeyAndExpectIndex("ss", "PageDown", 1, 4) is true
+PASS sendKeyAndExpectIndex("ss", "PageDown", 2, 5) is true
+PASS sendKeyAndExpectIndex("ss", "PageDown", 3, 6) is true
+PASS sendKeyAndExpectIndex("ss", "PageDown", 4, 6) is true
+PASS sendKeyAndExpectIndex("ss", "PageDown", 5, 6) is true
+PASS sendKeyAndExpectIndex("ss", "PageDown", 6, 6) is true
+PASS sendKeyAndExpectIndex("ss", "PageUp", 6, 3) is true
+PASS sendKeyAndExpectIndex("ss", "PageUp", 5, 2) is true
+PASS sendKeyAndExpectIndex("ss", "PageUp", 4, 1) is true
+PASS sendKeyAndExpectIndex("ss", "PageUp", 3, 0) is true
+PASS sendKeyAndExpectIndex("ss", "PageUp", 2, 0) is true
+PASS sendKeyAndExpectIndex("ss", "PageUp", 1, 0) is true
+PASS sendKeyAndExpectIndex("ss", "PageUp", 0, 0) is true
+PASS sendKeyAndExpectIndex("ss", "Home", 6, 0) is true
+PASS sendKeyAndExpectIndex("ss", "Home", 5, 0) is true
+PASS sendKeyAndExpectIndex("ss", "Home", 4, 0) is true
+PASS sendKeyAndExpectIndex("ss", "Home", 3, 0) is true
+PASS sendKeyAndExpectIndex("ss", "Home", 2, 0) is true
+PASS sendKeyAndExpectIndex("ss", "Home", 1, 0) is true
+PASS sendKeyAndExpectIndex("ss", "Home", 0, 0) is true
+PASS sendKeyAndExpectIndex("ss", "End", 6, 6) is true
+PASS sendKeyAndExpectIndex("ss", "End", 5, 6) is true
+PASS sendKeyAndExpectIndex("ss", "End", 4, 6) is true
+PASS sendKeyAndExpectIndex("ss", "End", 3, 6) is true
+PASS sendKeyAndExpectIndex("ss", "End", 2, 6) is true
+PASS sendKeyAndExpectIndex("ss", "End", 1, 6) is true
+PASS sendKeyAndExpectIndex("ss", "End", 0, 6) is true
+PASS sendKeyAndExpectIndex("ssd", "PageDown", 0, 4) is true
+PASS sendKeyAndExpectIndex("ssd", "PageDown", 1, 4) is true
+PASS sendKeyAndExpectIndex("ssd", "PageDown", 2, 5) is true
+PASS sendKeyAndExpectIndex("ssd", "PageDown", 4, 6) is true
+PASS sendKeyAndExpectIndex("ssd", "PageDown", 5, 6) is true
+PASS sendKeyAndExpectIndex("ssd", "PageDown", 6, 6) is true
+PASS sendKeyAndExpectIndex("ssd", "PageDown", 7, 6) is true
+PASS sendKeyAndExpectIndex("ssd", "PageUp", 7, 4) is true
+PASS sendKeyAndExpectIndex("ssd", "PageUp", 6, 2) is true
+PASS sendKeyAndExpectIndex("ssd", "PageUp", 5, 2) is true
+PASS sendKeyAndExpectIndex("ssd", "PageUp", 4, 1) is true
+PASS sendKeyAndExpectIndex("ssd", "PageUp", 2, 1) is true
+PASS sendKeyAndExpectIndex("ssd", "PageUp", 1, 1) is true
+PASS sendKeyAndExpectIndex("ssd", "PageUp", 0, 1) is true
+PASS sendKeyAndExpectIndex("ssd", "Home", 7, 1) is true
+PASS sendKeyAndExpectIndex("ssd", "Home", 6, 1) is true
+PASS sendKeyAndExpectIndex("ssd", "Home", 5, 1) is true
+PASS sendKeyAndExpectIndex("ssd", "Home", 4, 1) is true
+PASS sendKeyAndExpectIndex("ssd", "Home", 3, 1) is true
+PASS sendKeyAndExpectIndex("ssd", "Home", 2, 1) is true
+PASS sendKeyAndExpectIndex("ssd", "Home", 1, 1) is true
+PASS sendKeyAndExpectIndex("ssd", "Home", 0, 1) is true
+PASS sendKeyAndExpectIndex("ssd", "End", 7, 6) is true
+PASS sendKeyAndExpectIndex("ssd", "End", 6, 6) is true
+PASS sendKeyAndExpectIndex("ssd", "End", 5, 6) is true
+PASS sendKeyAndExpectIndex("ssd", "End", 4, 6) is true
+PASS sendKeyAndExpectIndex("ssd", "End", 3, 6) is true
+PASS sendKeyAndExpectIndex("ssd", "End", 2, 6) is true
+PASS sendKeyAndExpectIndex("ssd", "End", 1, 6) is true
+PASS sendKeyAndExpectIndex("ssd", "End", 0, 6) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "PageDown", [0, 1, 2, 3]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "PageDown", [0, 1, 2, 3, 4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "PageDown", [0, 1, 2, 3, 4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "PageUp", [0, 1, 2, 3]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "PageUp", [0]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "PageUp", [0]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "End", [0, 1, 2, 3, 4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "End", [0, 1, 2, 3, 4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "Home", [0]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "Home", [0]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "PageDown", [3, 4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "PageDown", [3, 4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "PageUp", [3]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "PageUp", [0, 1, 2, 3]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "PageUp", [0, 1, 2, 3]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "PageUp", [0, 1, 2, 3]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "End", [3, 4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "End", [3, 4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "Home", [0, 1, 2, 3]) is true
+PASS sendWithShiftKeyAndExpectIndices("ss", "Home", [0, 1, 2, 3]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "PageDown", [1, 2, 4]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "PageDown", [1, 2, 4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "PageDown", [1, 2, 4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "PageUp", [1, 2]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "PageUp", [1]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "PageUp", [1]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "End", [1, 2, 4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "End", [1, 2, 4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "Home", [1]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "Home", [1]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "PageDown", [4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "PageDown", [4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "PageUp", [2, 4]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "PageUp", [1, 2, 4]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "PageUp", [1, 2, 4]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "End", [4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "End", [4, 5, 6]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "Home", [1, 2, 4]) is true
+PASS sendWithShiftKeyAndExpectIndices("ssd", "Home", [1, 2, 4]) is true
+PASS sendKeyAndExpectIndex("ssg", "PageDown", 0, 3) is true
+PASS sendKeyAndExpectIndex("ssg", "PageDown", 1, 3) is true
+PASS sendKeyAndExpectIndex("ssg", "PageDown", 2, 4) is true
+PASS sendKeyAndExpectIndex("ssg", "PageDown", 3, 5) is true
+PASS sendKeyAndExpectIndex("ssg", "PageDown", 4, 6) is true
+PASS sendKeyAndExpectIndex("ssg", "PageDown", 5, 6) is true
+PASS sendKeyAndExpectIndex("ssg", "PageDown", 6, 6) is true
+PASS sendKeyAndExpectIndex("ssg", "PageUp", 6, 4) is true
+PASS sendKeyAndExpectIndex("ssg", "PageUp", 5, 3) is true
+PASS sendKeyAndExpectIndex("ssg", "PageUp", 4, 2) is true
+PASS sendKeyAndExpectIndex("ssg", "PageUp", 3, 1) is true
+PASS sendKeyAndExpectIndex("ssg", "PageUp", 2, 0) is true
+PASS sendKeyAndExpectIndex("ssg", "PageUp", 1, 0) is true
+PASS sendKeyAndExpectIndex("ssg", "PageUp", 0, 0) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/space-scroll-textinput-canceled-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/space-scroll-textinput-canceled-expected.txt
new file mode 100644
index 0000000..b8f95e32
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/space-scroll-textinput-canceled-expected.txt
@@ -0,0 +1,7 @@
+Tests that page shouldn't scroll when you hit space key on input field and 'textInput' event was canceled.
+
+PASS document.scrollingElement.scrollTop became 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/special-key-events-in-input-text-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/special-key-events-in-input-text-expected.txt
new file mode 100644
index 0000000..86acedc
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/special-key-events-in-input-text-expected.txt
@@ -0,0 +1,48 @@
+This test verifies that the correct sequence of keyboard events is generated for a keypress for certain special keys. To test manually, press keys and compare results to other browsers.
+
+target - type - ctrlKey,altKey,shiftKey,metaKey - key - keyCode - charCode
+
+Ampersand:
+INPUT - keydown - false,false,true,false -7- 55 - 0. Value: "".
+INPUT - keypress - false,false,true,false -7- 55 - 55. Value: "".
+INPUT - textInput - 7. Value: "".
+INPUT - keyup - false,false,true,false -7- 55 - 0. Value: "7".
+
+Backspace:
+INPUT - keydown - false,false,false,false -Backspace- 8 - 0. Value: "7".
+INPUT - keyup - false,false,false,false -Backspace- 8 - 0. Value: "".
+
+Percent:
+INPUT - keydown - false,false,true,false -5- 53 - 0. Value: "".
+INPUT - keypress - false,false,true,false -5- 53 - 53. Value: "".
+INPUT - textInput - 5. Value: "".
+INPUT - keyup - false,false,true,false -5- 53 - 0. Value: "5".
+
+Backspace:
+INPUT - keydown - false,false,false,false -Backspace- 8 - 0. Value: "5".
+INPUT - keyup - false,false,false,false -Backspace- 8 - 0. Value: "".
+
+Left parenthesis:
+INPUT - keydown - false,false,true,false -9- 57 - 0. Value: "".
+INPUT - keypress - false,false,true,false -9- 57 - 57. Value: "".
+INPUT - textInput - 9. Value: "".
+INPUT - keyup - false,false,true,false -9- 57 - 0. Value: "9".
+
+Backspace:
+INPUT - keydown - false,false,false,false -Backspace- 8 - 0. Value: "9".
+INPUT - keyup - false,false,false,false -Backspace- 8 - 0. Value: "".
+
+Right parenthesis:
+INPUT - keydown - false,false,true,false -0- 48 - 0. Value: "".
+INPUT - keypress - false,false,true,false -0- 48 - 48. Value: "".
+INPUT - textInput - 0. Value: "".
+INPUT - keyup - false,false,true,false -0- 48 - 0. Value: "0".
+
+Backspace:
+INPUT - keydown - false,false,false,false -Backspace- 8 - 0. Value: "0".
+INPUT - keyup - false,false,false,false -Backspace- 8 - 0. Value: "".
+
+Print screen:
+INPUT - keydown - false,false,false,false -PrintScreen- 44 - 0. Value: "".
+INPUT - keyup - false,false,false,false -PrintScreen- 44 - 0. Value: "".
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/stop-load-in-unload-handler-using-document-write-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/stop-load-in-unload-handler-using-document-write-expected.txt
new file mode 100644
index 0000000..69cfc5a9
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/stop-load-in-unload-handler-using-document-write-expected.txt
@@ -0,0 +1,2 @@
+PASS
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/stop-load-in-unload-handler-using-window-stop-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/stop-load-in-unload-handler-using-window-stop-expected.txt
new file mode 100644
index 0000000..69cfc5a9
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/stop-load-in-unload-handler-using-window-stop-expected.txt
@@ -0,0 +1,2 @@
+PASS
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/tab-crash-with-image-map-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/tab-crash-with-image-map-expected.txt
new file mode 100644
index 0000000..b639bfc
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/tab-crash-with-image-map-expected.txt
@@ -0,0 +1,9 @@
+Test passes if there is no crash
+
+Google (tabindex 5)
+
+Yahoo (tabindex 2)
+
+Google (tabindex 4)
+
+Yahoo (tabindex 6)
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt
new file mode 100644
index 0000000..734fd82
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/gesture/gesture-tap-near-iframe-expected.txt
@@ -0,0 +1,32 @@
+Verify that in the absence of any reason to adjust into an iframe, taps are handle in the frame matching the center point of the tap. bug 401504
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Sending GestureTap on top of iframe
+PASS sawClick is false
+
+
+Sending GestureTap above iframe
+Received click on DIV#container
+PASS sawClick is true
+
+
+Sending GestureTap to the left of iframe
+Received click on DIV#container
+PASS sawClick is true
+
+
+Sending GestureTap to the right of iframe
+Received click on DIV#container
+PASS sawClick is true
+
+
+Sending GestureTap below iframe
+Received click on DIV#container
+PASS sawClick is true
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt
new file mode 100644
index 0000000..77563f6
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/gesture/long-press-drag-drop-touch-editing-combined-in-iframe-expected.txt
@@ -0,0 +1,13 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+This test checks long press behavior inside an iframe when both touch drag/drop and touch editing are enabled.
+1. Check that long press on a draggable element starts drag.
+2. Check that long press on non-draggable text selects the text.
+3. Check that long press on selected text starts drag.
+
+Testing
+PASS
+FAIL
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt
new file mode 100644
index 0000000..0fcf7182
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag-expected.txt
@@ -0,0 +1,10 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+This test checks that a long press gesture on a draggable element in an iframe starts a drag/drop session.
+
+Testing
+FAIL
+PASS
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt
new file mode 100644
index 0000000..0fcf7182
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag-expected.txt
@@ -0,0 +1,10 @@
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+This test checks that a long press gesture on a draggable element in an iframe starts a drag/drop session.
+
+Testing
+FAIL
+PASS
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt
new file mode 100644
index 0000000..8d21fc7b
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/touch-handler-iframe-plugin-assert-expected.txt
@@ -0,0 +1,8 @@
+This test passes if it doesn't trigger an ASSERT - crbug.com/254203
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt
new file mode 100644
index 0000000..b842570
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/touch/touch-handler-iframe-unload-assert-expected.txt
@@ -0,0 +1,8 @@
+This test passes if it doesn't trigger an ASSERT - crbug.com/285299
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/window-onerror-sandbox-01-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/window-onerror-sandbox-01-expected.txt
new file mode 100644
index 0000000..d8741d6
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/events/window-onerror-sandbox-01-expected.txt
@@ -0,0 +1,10 @@
+CONSOLE ERROR: line 6: Uncaught ReferenceError: hahaha_good_luck_finding_me is not defined
+This test should trigger 'window.onerror' inside the sandboxed iframe, and successfully handle the error.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS message is "Uncaught ReferenceError: hahaha_good_luck_finding_me is not defined"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/exit-full-screen-iframe-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/exit-full-screen-iframe-expected.txt
new file mode 100644
index 0000000..9e9d41e2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/exit-full-screen-iframe-expected.txt
@@ -0,0 +1,10 @@
+Test for bug 90327: webkitCancelFullScreen for iframes
+
+To test manually, click the "Go full screen" button - the page should enter full screen mode and immediately exit again, without crashing.
+
+EVENT(webkitfullscreenchange)
+TEST(document.getElementById('frame').contentDocument.webkitIsFullScreen==true) OK
+EVENT(webkitfullscreenchange)
+TEST(document.getElementById('frame').contentDocument.webkitIsFullScreen==false) OK
+END OF TEST
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/full-screen-request-not-supported-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/full-screen-request-not-supported-expected.txt
new file mode 100644
index 0000000..f30901c
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/full-screen-request-not-supported-expected.txt
@@ -0,0 +1,4 @@
+EVENT(webkitfullscreenerror)
+END OF TEST
+
+Tests for the fullscreenSupported setting which will be set to false in those platforms where fullscreen is not supported.
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/non-ancestor-iframe-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/non-ancestor-iframe-expected.txt
new file mode 100644
index 0000000..1a34301
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/non-ancestor-iframe-expected.txt
@@ -0,0 +1,6 @@
+This tests that full screen mode will not exit when a non-ancestor iframe is loaded in the page. Click enter full screen to start test.
+EVENT(webkitfullscreenchange)
+EVENT(load)
+EXPECTED (document.webkitIsFullScreen == 'true') OK
+END OF TEST
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/video-controls-override-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/video-controls-override-expected.txt
new file mode 100644
index 0000000..26348bb
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/video-controls-override-expected.txt
@@ -0,0 +1,12 @@
+This tests that the video element's "controls" attribute is overridden in full screen mode, and that the controls are correctly hidden upon exiting full screen. Press any key to continue.
+
+EVENT(webkitfullscreenchange)
+EXPECTED (shadowRoot = internals.shadowRoot(video) != 'null') OK
+EXPECTED (panel = mediaControlsElement(shadowRoot.firstChild, '-webkit-media-controls-panel') != 'null') OK
+EXPECTED (internals.shadowPseudoId(panel) == '-webkit-media-controls-panel') OK
+EXPECTED (document.defaultView.getComputedStyle(panel)['display'] != 'none') OK
+EXPECTED (document.defaultView.getComputedStyle(panel)['height'] >= '20px') OK
+EVENT(webkitfullscreenchange)
+EXPECTED (document.defaultView.getComputedStyle(panel)['display'] == 'none') OK
+END OF TEST
+
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/video-fail-to-enter-full-screen-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/video-fail-to-enter-full-screen-expected.txt
new file mode 100644
index 0000000..d023fa2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/user-activation-v2/fullscreen/video-fail-to-enter-full-screen-expected.txt
@@ -0,0 +1,5 @@
+CONSOLE WARNING: line 12: Failed to execute 'requestFullscreen' on 'Element': API can only be initiated by a user gesture.
+This tests that the video should not be rendered in full screen if requestFullScreen() fails.
+
+END OF TEST
+
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_canplay-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_canplay-expected.txt
new file mode 100644
index 0000000..5e6fde0
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_canplay-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger canplay event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_canplay_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_canplay_manual-expected.txt
new file mode 100644
index 0000000..9a159c4d
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_canplay_manual-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on non-autoplay video should trigger canplay event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_canplaythrough-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_canplaythrough-expected.txt
new file mode 100644
index 0000000..cac961ab
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_canplaythrough-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger canplaythrough event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_canplaythrough_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_canplaythrough_manual-expected.txt
new file mode 100644
index 0000000..24a8ab4
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_canplaythrough_manual-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on non-autoplay video should trigger canplaythrough event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadeddata-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadeddata-expected.txt
new file mode 100644
index 0000000..1a24cbb
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadeddata-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger loadeddata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadeddata_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadeddata_manual-expected.txt
new file mode 100644
index 0000000..102dc02
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadeddata_manual-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on non-autoplay video should trigger loadeddata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadedmetadata-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadedmetadata-expected.txt
new file mode 100644
index 0000000..114c8ec
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadedmetadata-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger loadedmetadata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadedmetadata_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadedmetadata_manual-expected.txt
new file mode 100644
index 0000000..004d77d
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadedmetadata_manual-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on non-autoplay video should trigger loadedmetadata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadstart-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadstart-expected.txt
new file mode 100644
index 0000000..ac4658bc
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadstart-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger loadstart event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadstart_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadstart_manual-expected.txt
new file mode 100644
index 0000000..f98b9e3b
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_loadstart_manual-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on non-autoplay video should trigger loadstart event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_order_canplay_canplaythrough-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_order_canplay_canplaythrough-expected.txt
new file mode 100644
index 0000000..b3d596c2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_order_canplay_canplaythrough-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger canplay then canplaythrough event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_order_canplay_playing-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_order_canplay_playing-expected.txt
new file mode 100644
index 0000000..26450c7
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_order_canplay_playing-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger canplay then playing event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_order_loadedmetadata_loadeddata-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_order_loadedmetadata_loadeddata-expected.txt
new file mode 100644
index 0000000..465e9aa5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_order_loadedmetadata_loadeddata-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger loadedmetadata then loadeddata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_order_loadstart_progress-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_order_loadstart_progress-expected.txt
new file mode 100644
index 0000000..708552a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_order_loadstart_progress-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger loadstart then progress event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_pause_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_pause_manual-expected.txt
new file mode 100644
index 0000000..d0d06558
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_pause_manual-expected.txt
@@ -0,0 +1,12 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause(). https://goo.gl/LdLk22
+calling play() then pause() on non-autoplay video should trigger pause event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_play-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_play-expected.txt
new file mode 100644
index 0000000..ea471f8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_play-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger play event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_play_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_play_manual-expected.txt
new file mode 100644
index 0000000..02ef9a5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_play_manual-expected.txt
@@ -0,0 +1,12 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause(). https://goo.gl/LdLk22
+calling play() on video should trigger play event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_playing-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_playing-expected.txt
new file mode 100644
index 0000000..a4021332
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_playing-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger playing event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_playing_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_playing_manual-expected.txt
new file mode 100644
index 0000000..e931338
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_playing_manual-expected.txt
@@ -0,0 +1,11 @@
+calling play() on video should trigger playing event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_progress-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_progress-expected.txt
new file mode 100644
index 0000000..79e6d69
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_progress-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger progress event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_progress_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_progress_manual-expected.txt
new file mode 100644
index 0000000..690a093
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_progress_manual-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on non-autoplay video should trigger progress event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_timeupdate-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_timeupdate-expected.txt
new file mode 100644
index 0000000..8257ee3
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_timeupdate-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on a sufficiently long autoplay video should trigger timeupdate event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_timeupdate_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_timeupdate_manual-expected.txt
new file mode 100644
index 0000000..e0e7b28
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/events/event_timeupdate_manual-expected.txt
@@ -0,0 +1,11 @@
+calling play() on a sufficiently long video should trigger timeupdate event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/networkState/networkState_during_loadstart-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/networkState/networkState_during_loadstart-expected.txt
new file mode 100644
index 0000000..ee38b43
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/networkState/networkState_during_loadstart-expected.txt
@@ -0,0 +1,11 @@
+audioElement.networkState should be NETWORK_LOADING during loadstart event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "2" is "2"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/paused/paused_false_during_play-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/paused/paused_false_during_play-expected.txt
new file mode 100644
index 0000000..e7288c2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/paused/paused_false_during_play-expected.txt
@@ -0,0 +1,11 @@
+audio.paused should be false during play event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS false is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/paused/paused_true_during_pause-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/paused/paused_true_during_pause-expected.txt
new file mode 100644
index 0000000..e52c8cb
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/paused/paused_true_during_pause-expected.txt
@@ -0,0 +1,12 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause(). https://goo.gl/LdLk22
+audio.paused should be true during pause event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_canplay-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_canplay-expected.txt
new file mode 100644
index 0000000..b396331
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_canplay-expected.txt
@@ -0,0 +1,11 @@
+audio.readyState should be >= HAVE_FUTURE_DATA during canplay event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_canplaythrough-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_canplaythrough-expected.txt
new file mode 100644
index 0000000..2357f59
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_canplaythrough-expected.txt
@@ -0,0 +1,11 @@
+audio.readyState should be HAVE_ENOUGH_DATA during canplaythrough event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "4" is "4"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_loadeddata-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_loadeddata-expected.txt
new file mode 100644
index 0000000..3b98ef2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_loadeddata-expected.txt
@@ -0,0 +1,11 @@
+audio.readyState should be >= HAVE_CURRENT_DATA during loadeddata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_loadedmetadata-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_loadedmetadata-expected.txt
new file mode 100644
index 0000000..dd16c3f
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_loadedmetadata-expected.txt
@@ -0,0 +1,11 @@
+audio.readyState should be >= HAVE_METADATA during loadedmetadata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_playing-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_playing-expected.txt
new file mode 100644
index 0000000..210bfa0
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/audio/readyState/readyState_during_playing-expected.txt
@@ -0,0 +1,11 @@
+audio.readyState should be >= HAVE_FUTURE_DATA during playing event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/currentSrc/currentSrc_empty_if_no_src-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/currentSrc/currentSrc_empty_if_no_src-expected.txt
new file mode 100644
index 0000000..15fa14a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/currentSrc/currentSrc_empty_if_no_src-expected.txt
@@ -0,0 +1,11 @@
+video.currentSrc - empty if no source
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "" is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/currentSrc/currentSrc_nonempty_after_adding_source_child-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/currentSrc/currentSrc_nonempty_after_adding_source_child-expected.txt
new file mode 100644
index 0000000..2723776
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/currentSrc/currentSrc_nonempty_after_adding_source_child-expected.txt
@@ -0,0 +1,12 @@
+videoElement.currentSrc should not be empty after adding source element (even with a bogus value)
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS false is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/currentSrc/currentSrc_property_exists-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/currentSrc/currentSrc_property_exists-expected.txt
new file mode 100644
index 0000000..aabc979
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/currentSrc/currentSrc_property_exists-expected.txt
@@ -0,0 +1,11 @@
+video.currentSrc - existence test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/error/error_null-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/error/error_null-expected.txt
new file mode 100644
index 0000000..cc1125e8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/error/error_null-expected.txt
@@ -0,0 +1,11 @@
+video.error - null if no source
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "null" is "null"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/error/error_onerror_called_on_bogus_source-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/error/error_onerror_called_on_bogus_source-expected.txt
new file mode 100644
index 0000000..af769cc
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/error/error_onerror_called_on_bogus_source-expected.txt
@@ -0,0 +1,11 @@
+videoElement.onerror is triggered on bogus source
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "4" is "4"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/error/error_property_exists-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/error/error_property_exists-expected.txt
new file mode 100644
index 0000000..55cf1ff
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/error/error_property_exists-expected.txt
@@ -0,0 +1,11 @@
+video.error - existence test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_canplay-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_canplay-expected.txt
new file mode 100644
index 0000000..5e6fde0
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_canplay-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger canplay event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_canplay_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_canplay_manual-expected.txt
new file mode 100644
index 0000000..9a159c4d
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_canplay_manual-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on non-autoplay video should trigger canplay event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_canplaythrough-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_canplaythrough-expected.txt
new file mode 100644
index 0000000..cac961ab
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_canplaythrough-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger canplaythrough event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_canplaythrough_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_canplaythrough_manual-expected.txt
new file mode 100644
index 0000000..24a8ab4
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_canplaythrough_manual-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on non-autoplay video should trigger canplaythrough event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadeddata-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadeddata-expected.txt
new file mode 100644
index 0000000..1a24cbb
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadeddata-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger loadeddata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadeddata_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadeddata_manual-expected.txt
new file mode 100644
index 0000000..102dc02
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadeddata_manual-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on non-autoplay video should trigger loadeddata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadedmetadata-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadedmetadata-expected.txt
new file mode 100644
index 0000000..114c8ec
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadedmetadata-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger loadedmetadata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadedmetadata_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadedmetadata_manual-expected.txt
new file mode 100644
index 0000000..004d77d
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadedmetadata_manual-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on non-autoplay video should trigger loadedmetadata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadstart-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadstart-expected.txt
new file mode 100644
index 0000000..ac4658bc
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadstart-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger loadstart event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadstart_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadstart_manual-expected.txt
new file mode 100644
index 0000000..f98b9e3b
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_loadstart_manual-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on non-autoplay video should trigger loadstart event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_order_canplay_canplaythrough-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_order_canplay_canplaythrough-expected.txt
new file mode 100644
index 0000000..b3d596c2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_order_canplay_canplaythrough-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger canplay then canplaythrough event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_order_canplay_playing-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_order_canplay_playing-expected.txt
new file mode 100644
index 0000000..26450c7
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_order_canplay_playing-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger canplay then playing event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_order_loadedmetadata_loadeddata-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_order_loadedmetadata_loadeddata-expected.txt
new file mode 100644
index 0000000..465e9aa5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_order_loadedmetadata_loadeddata-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger loadedmetadata then loadeddata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_order_loadstart_progress-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_order_loadstart_progress-expected.txt
new file mode 100644
index 0000000..708552a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_order_loadstart_progress-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger loadstart then progress event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_pause_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_pause_manual-expected.txt
new file mode 100644
index 0000000..d0d06558
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_pause_manual-expected.txt
@@ -0,0 +1,12 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause(). https://goo.gl/LdLk22
+calling play() then pause() on non-autoplay video should trigger pause event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_play-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_play-expected.txt
new file mode 100644
index 0000000..ea471f8
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_play-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger play event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_play_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_play_manual-expected.txt
new file mode 100644
index 0000000..02ef9a5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_play_manual-expected.txt
@@ -0,0 +1,12 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause(). https://goo.gl/LdLk22
+calling play() on video should trigger play event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_playing-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_playing-expected.txt
new file mode 100644
index 0000000..a4021332
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_playing-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger playing event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_playing_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_playing_manual-expected.txt
new file mode 100644
index 0000000..e931338
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_playing_manual-expected.txt
@@ -0,0 +1,11 @@
+calling play() on video should trigger playing event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_progress-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_progress-expected.txt
new file mode 100644
index 0000000..79e6d69
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_progress-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on autoplay video should trigger progress event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_progress_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_progress_manual-expected.txt
new file mode 100644
index 0000000..690a093
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_progress_manual-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on non-autoplay video should trigger progress event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_timeupdate-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_timeupdate-expected.txt
new file mode 100644
index 0000000..8257ee3
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_timeupdate-expected.txt
@@ -0,0 +1,11 @@
+setting src attribute on a sufficiently long autoplay video should trigger timeupdate event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_timeupdate_manual-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_timeupdate_manual-expected.txt
new file mode 100644
index 0000000..e0e7b28
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/events/event_timeupdate_manual-expected.txt
@@ -0,0 +1,11 @@
+calling play() on a sufficiently long video should trigger timeupdate event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/networkState/networkState_during_loadstart-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/networkState/networkState_during_loadstart-expected.txt
new file mode 100644
index 0000000..21b1a84
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/networkState/networkState_during_loadstart-expected.txt
@@ -0,0 +1,11 @@
+videoElement.networkState should be NETWORK_LOADING during loadstart event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "2" is "2"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/networkState/networkState_initial-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/networkState/networkState_initial-expected.txt
new file mode 100644
index 0000000..1c86bf7
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/networkState/networkState_initial-expected.txt
@@ -0,0 +1,11 @@
+video.networkState - default state
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "0" is "0"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/networkState/networkState_property_exists-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/networkState/networkState_property_exists-expected.txt
new file mode 100644
index 0000000..586a8b44
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/networkState/networkState_property_exists-expected.txt
@@ -0,0 +1,11 @@
+video.networkState - existence test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/paused/paused_false_during_play-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/paused/paused_false_during_play-expected.txt
new file mode 100644
index 0000000..2f42a05
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/paused/paused_false_during_play-expected.txt
@@ -0,0 +1,11 @@
+video.paused should be false during play event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS false is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/paused/paused_true_during_pause-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/paused/paused_true_during_pause-expected.txt
new file mode 100644
index 0000000..d82edd2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/paused/paused_true_during_pause-expected.txt
@@ -0,0 +1,12 @@
+CONSOLE ERROR: Uncaught (in promise) AbortError: The play() request was interrupted by a call to pause(). https://goo.gl/LdLk22
+video.paused should be true during pause event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_property_exists-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_property_exists-expected.txt
new file mode 100644
index 0000000..20bf8d21
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_property_exists-expected.txt
@@ -0,0 +1,11 @@
+video.preload - existence test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_auto_value-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_auto_value-expected.txt
new file mode 100644
index 0000000..5ebd452
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_auto_value-expected.txt
@@ -0,0 +1,11 @@
+video.preload - reflection test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "auto" is "auto"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_bogus_value-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_bogus_value-expected.txt
new file mode 100644
index 0000000..0cb5b25
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_bogus_value-expected.txt
@@ -0,0 +1,11 @@
+video.preload - reflection test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "metadata" is "metadata"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_empty-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_empty-expected.txt
new file mode 100644
index 0000000..5ebd452
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_empty-expected.txt
@@ -0,0 +1,11 @@
+video.preload - reflection test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "auto" is "auto"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_metadata-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_metadata-expected.txt
new file mode 100644
index 0000000..0cb5b25
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_metadata-expected.txt
@@ -0,0 +1,11 @@
+video.preload - reflection test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "metadata" is "metadata"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_no_value-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_no_value-expected.txt
new file mode 100644
index 0000000..0cb5b25
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_no_value-expected.txt
@@ -0,0 +1,11 @@
+video.preload - reflection test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "metadata" is "metadata"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_none-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_none-expected.txt
new file mode 100644
index 0000000..0570dfa
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_none-expected.txt
@@ -0,0 +1,11 @@
+video.preload - reflection test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "none" is "none"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_none_autoplay-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_none_autoplay-expected.txt
new file mode 100644
index 0000000..0570dfa
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/preload/preload_reflects_none_autoplay-expected.txt
@@ -0,0 +1,11 @@
+video.preload - reflection test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "none" is "none"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_canplay-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_canplay-expected.txt
new file mode 100644
index 0000000..e2fa4c5
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_canplay-expected.txt
@@ -0,0 +1,11 @@
+video.readyState should be >= HAVE_FUTURE_DATA during canplay event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_canplaythrough-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_canplaythrough-expected.txt
new file mode 100644
index 0000000..948bf98
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_canplaythrough-expected.txt
@@ -0,0 +1,11 @@
+video.readyState should be HAVE_ENOUGH_DATA during canplaythrough event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "4" is "4"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_loadeddata-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_loadeddata-expected.txt
new file mode 100644
index 0000000..3c10903
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_loadeddata-expected.txt
@@ -0,0 +1,11 @@
+video.readyState should be >= HAVE_CURRENT_DATA during loadeddata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_loadedmetadata-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_loadedmetadata-expected.txt
new file mode 100644
index 0000000..202c0a41
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_loadedmetadata-expected.txt
@@ -0,0 +1,11 @@
+video.readyState should be >= HAVE_METADATA during loadedmetadata event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_playing-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_playing-expected.txt
new file mode 100644
index 0000000..d70c1f29
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_during_playing-expected.txt
@@ -0,0 +1,11 @@
+video.readyState should be >= HAVE_FUTURE_DATA during playing event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_initial-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_initial-expected.txt
new file mode 100644
index 0000000..b9f65069
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_initial-expected.txt
@@ -0,0 +1,11 @@
+video.readyState - default state
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "0" is "0"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_property_exists-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_property_exists-expected.txt
new file mode 100644
index 0000000..c1d4a16
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/readyState/readyState_property_exists-expected.txt
@@ -0,0 +1,11 @@
+video.readyState - existence test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/src/src_reflects_attribute_not_source_elements-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/src/src_reflects_attribute_not_source_elements-expected.txt
new file mode 100644
index 0000000..1ce3015
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/src/src_reflects_attribute_not_source_elements-expected.txt
@@ -0,0 +1,11 @@
+video.src - reflection test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/src/src_reflects_no_value-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/src/src_reflects_no_value-expected.txt
new file mode 100644
index 0000000..123ee9a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/src/src_reflects_no_value-expected.txt
@@ -0,0 +1,11 @@
+video.src - empty if no source
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS "" is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/src/src_removal_does_not_trigger_loadstart-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/src/src_removal_does_not_trigger_loadstart-expected.txt
new file mode 100644
index 0000000..30c28eb
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/W3C/video/src/src_removal_does_not_trigger_loadstart-expected.txt
@@ -0,0 +1,11 @@
+removing src attribute should not trigger loadstart event
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
+
+spec reference
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/fallback-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/fallback-expected.txt
new file mode 100644
index 0000000..9d8b3f4
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/fallback-expected.txt
@@ -0,0 +1 @@
+Test that fallback content is not rendered
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/media-document-audio-size-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/media-document-audio-size-expected.txt
new file mode 100644
index 0000000..cb02db2
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/media-document-audio-size-expected.txt
@@ -0,0 +1,4 @@
+This tests that in a standalone media document with audio content, the media element has non-zero size.
+
+PASS
+
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/svg-as-image-with-media-blocked-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/svg-as-image-with-media-blocked-expected.txt
new file mode 100644
index 0000000..df1c1b6a
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/svg-as-image-with-media-blocked-expected.txt
@@ -0,0 +1 @@
+This test attempts to load foreignObject audio and video embedded in an SVG file loaded as the src attribute of an img element. If successful, none of these files will load and a green rectangle will be visible below this text. If unsuccessful, the browser will crash while attempting to load the media.
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/track/media-element-move-to-new-document-assert-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/track/media-element-move-to-new-document-assert-expected.txt
new file mode 100644
index 0000000..55232518
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/track/media-element-move-to-new-document-assert-expected.txt
@@ -0,0 +1 @@
+Test for failing EventDispatchForbiddenScope assert when moving a video with text track between documents.
diff --git a/third_party/blink/web_tests/virtual/video-surface-layer/media/video-plays-past-end-of-test-expected.txt b/third_party/blink/web_tests/virtual/video-surface-layer/media/video-plays-past-end-of-test-expected.txt
new file mode 100644
index 0000000..c4d9535
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/video-surface-layer/media/video-plays-past-end-of-test-expected.txt
@@ -0,0 +1 @@
+This test intentionally lets the video keep playing past end of test to ensure that shutdown is clean, since DumpRenderTree used to crash in this case.
diff --git a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
index 25fb169..9224e00 100644
--- a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
@@ -256,6 +256,7 @@
     property ownerDocument
     property parentElement
     property parentNode
+    property part
     property prefix
     property prepend
     property previousElementSibling
@@ -1413,6 +1414,7 @@
     property ownerSVGElement
     property parentElement
     property parentNode
+    property part
     property prefix
     property prepend
     property previousElementSibling
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 2cd9b2c..779f20c 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -1922,6 +1922,7 @@
     getter onwebkitfullscreenchange
     getter onwebkitfullscreenerror
     getter outerHTML
+    getter part
     getter prefix
     getter previousElementSibling
     getter role
@@ -2041,6 +2042,7 @@
     setter onwebkitfullscreenchange
     setter onwebkitfullscreenerror
     setter outerHTML
+    setter part
     setter role
     setter scrollLeft
     setter scrollTop
diff --git a/third_party/robolectric/BUILD.gn b/third_party/robolectric/BUILD.gn
index cb1d72b..63a19e6 100644
--- a/third_party/robolectric/BUILD.gn
+++ b/third_party/robolectric/BUILD.gn
@@ -20,6 +20,11 @@
   ]
 }
 
+java_prebuilt("android-all-4.1.2_r1-robolectric-0_java") {
+  testonly = true
+  jar_path = "lib/android-all-4.1.2_r1-robolectric-0.jar"
+}
+
 java_prebuilt("android-all-4.3_r2-robolectric-0_java") {
   testonly = true
   jar_path = "lib/android-all-4.3_r2-robolectric-0.jar"
@@ -67,6 +72,7 @@
     "//third_party/xstream:xstream_java",
   ]
   data_deps = [
+    ":android-all-4.1.2_r1-robolectric-0_java",
     ":android-all-4.3_r2-robolectric-0_java",
     ":android-all-5.0.0_r2-robolectric-1_java",
     ":android-all-7.1.0_r7-robolectric-0_java",
diff --git a/third_party/robolectric/cipd.yaml b/third_party/robolectric/cipd.yaml
index 3a1510ab..6d95512 100644
--- a/third_party/robolectric/cipd.yaml
+++ b/third_party/robolectric/cipd.yaml
@@ -7,6 +7,7 @@
 package: chromium/third_party/robolectric
 description: robolectric modified Android SDKs
 data:
+  - file: lib/android-all-4.1.2_r1-robolectric-0.jar
   - file: lib/android-all-4.3_r2-robolectric-0.jar
   - file: lib/android-all-5.0.0_r2-robolectric-1.jar
   - file: lib/android-all-7.1.0_r7-robolectric-0.jar
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index e4325da..5051deb 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -10144,6 +10144,34 @@
   </description>
 </action>
 
+<action name="ManualFallback_CreditCard_SelectCardholderName">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on a cardholder name in the Credit Card Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_CreditCard_SelectCardNumber">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on a credit card number in the Credit Card Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_CreditCard_SelectExpirationMonth">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on an expiration month in the Credit Card Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_CreditCard_SelectExpirationYear">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on an expiration year in the Credit Card Fallback view.
+  </description>
+</action>
+
 <action name="ManualFallback_OpenCreditCard">
   <owner>javierrobles@chromium.org</owner>
   <description>The user opened Credit Card Manual Fallback view.</description>
@@ -10189,6 +10217,48 @@
   </description>
 </action>
 
+<action name="ManualFallback_Profiles_Address1">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on line 1 in the Address Manual Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_Profiles_Address2">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on line 2 in the Address Manual Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_Profiles_City">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on a city in the Address Manual Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_Profiles_Company">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on a company name in the Address Manual Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_Profiles_Country">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on a country in the Address Manual Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_Profiles_EmailAddress">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on an email address in the Address Manual Fallback view.
+  </description>
+</action>
+
 <action name="ManualFallback_Profiles_OpenManageProfiles">
   <owner>javierrobles@chromium.org</owner>
   <description>
@@ -10197,6 +10267,48 @@
   </description>
 </action>
 
+<action name="ManualFallback_Profiles_PhoneNumber">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on a phone number in the Address Manual Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_Profiles_SelectFirstName">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on a first name in the Address Manual Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_Profiles_SelectLastName">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on a last name in the Address Manual Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_Profiles_SelectMiddleName">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on a middle name in the Address Manual Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_Profiles_State">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on a state / province in the Address Manual Fallback view.
+  </description>
+</action>
+
+<action name="ManualFallback_Profiles_Zip">
+  <owner>javierrobles@chromium.org</owner>
+  <description>
+    The user tapped on a zip code in the Address Manual Fallback view.
+  </description>
+</action>
+
 <action name="MaxButton_Clk_ExitFS">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 64758a9..9d9623e 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -10536,6 +10536,7 @@
   <int value="6" label="Failed transparent"/>
   <int value="7" label="Failed non-root renderpass"/>
   <int value="8" label="Failed too many overlays"/>
+  <int value="9" label="Failed no hw overlay support"/>
 </enum>
 
 <enum name="DeclarativeAPIFunctionType">
@@ -29450,6 +29451,7 @@
   <int value="-1662646099" label="NTPOfflinePageSuggestions:enabled"/>
   <int value="-1662447331" label="wake-on-packets"/>
   <int value="-1660972490" label="gpu-rasterization-msaa-sample-count"/>
+  <int value="-1657110277" label="GestureNavigation:disabled"/>
   <int value="-1655535052" label="enable-pointer-events"/>
   <int value="-1654344175" label="disable-extension-info-dialog"/>
   <int value="-1653838003" label="PauseBackgroundTabs:enabled"/>
@@ -30244,6 +30246,7 @@
   <int value="-234966279" label="PointerEvent:disabled"/>
   <int value="-234687894"
       label="NonValidatingReloadOnRefreshContentV2:disabled"/>
+  <int value="-233770301" label="GestureNavigation:enabled"/>
   <int value="-231922000" label="enable-renderer-mojo-channel"/>
   <int value="-230824955" label="NTPMostLikelyFaviconsFromServer:enabled"/>
   <int value="-225505731" label="CCTModule:enabled"/>
@@ -46525,9 +46528,16 @@
   <int value="8" label="User turned off sync from DICE UI.">
     User turned off sync from the Desktop Identity Consistency internals UI.
   </int>
-  <int value="9" label="(Android) Account removed from device">
+  <int value="9" label="[Android] Account removed from device">
     Signout forced because account was removed from device.
   </int>
+  <int value="10" label="Account removed from device">
+    Signout forced when profile is loaded as browser sign-in is no longer
+    allowed.
+  </int>
+  <int value="11" label="[Tests] Force sign-out">
+    Signout is forced. Used only for tests.
+  </int>
 </enum>
 
 <enum name="SigninSource">
@@ -52924,6 +52934,7 @@
   <int value="3" label="GetWebApplicationInfoFailed"/>
   <int value="4" label="PreviouslyUninstalled"/>
   <int value="5" label="WebContentsDestroyed"/>
+  <int value="6" label="WriteDataFailed"/>
 </enum>
 
 <enum name="WebAppInstallSource">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 7c641fd5..6979d86 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -37195,6 +37195,9 @@
 </histogram>
 
 <histogram name="GPU.DirectComposition.DCLayerResult" enum="DCLayerResult">
+  <obsolete>
+    Deprecated 11/2018. Replaced by GPU.DirectComposition.DCLayerResult2.Clear.
+  </obsolete>
   <owner>jbauman@chromium.org</owner>
   <summary>
     Recorded for each quad (on overlay processing) the reason it was or wasn't
@@ -37202,6 +37205,18 @@
   </summary>
 </histogram>
 
+<histogram base="true" name="GPU.DirectComposition.DCLayerResult2"
+    enum="DCLayerResult" expires_after="2020-12-31">
+<!-- Name completed by histogram_suffixes name="GPU.DirectComposition.ProtectedVideoType" -->
+
+  <owner>magchen@chromium.org</owner>
+  <owner>zmo@chromium.org</owner>
+  <summary>
+    Recorded for each quad (on overlay processing) with protected video type the
+    reason it was or wasn't put in an overlay.
+  </summary>
+</histogram>
+
 <histogram name="GPU.DirectComposition.FramesSinceColorSpaceChange"
     units="frames">
   <owner>jbauman@chromium.org</owner>
@@ -39577,7 +39592,7 @@
 </histogram>
 
 <histogram name="Import.IncludesPasswords.Firefox" enum="BooleanChecked">
-  <owner>vabr@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <owner>hurims@gmail.com</owner>
   <summary>
     Whether or not the password checkbox is checked when importing a profile of
@@ -39586,7 +39601,7 @@
 </histogram>
 
 <histogram name="Import.NumberOfImportedPasswords.Firefox">
-  <owner>vabr@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <owner>hurims@gmail.com</owner>
   <summary>
     The number of passwords that are imported from Firefox. This is recorded
@@ -76382,8 +76397,8 @@
 
 <histogram name="PasswordGeneration.SubmissionAvailableEvent"
     enum="PasswordSubmissionEvent">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
+  <owner>kolos@chromium.org</owner>
   <summary>
     Measures the frequency of submission events for passwords that could have
     been generated, but the user didn't choose to use the feature. This is to
@@ -76393,8 +76408,8 @@
 
 <histogram name="PasswordGeneration.SubmissionEvent"
     enum="PasswordSubmissionEvent">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
+  <owner>kolos@chromium.org</owner>
   <summary>
     Measures the frequency of submission events for generated passwords. This is
     similar to PasswordManager.ActionsTakenWithPsl but only tracks events which
@@ -76477,7 +76492,8 @@
 
 <histogram name="PasswordManager.AccessPasswordInSettings"
     enum="AccessPasswordInSettingsEvent">
-  <owner>vabr@chromium.org</owner>
+  <owner>jdoerrie@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     Recorded whenever the user accesses the passwords in the settings page.
   </summary>
@@ -76530,8 +76546,8 @@
 </histogram>
 
 <histogram name="PasswordManager.AccountsPerSite">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     The number of accounts stored per site in the password manager (one event
     per site)
@@ -76539,8 +76555,9 @@
 </histogram>
 
 <histogram name="PasswordManager.AccountsReusingPassword" units="accounts">
+  <owner>dvadym@chromium.org</owner>
   <owner>engedy@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     Records, for each account, the number of other accounts (across all sites
     and usernames) that reuse the same password. Only non-blacklisted,
@@ -76565,7 +76582,6 @@
   <obsolete>
     Deprecated as of Chrome 32. See PasswordManagerActionsTakenWithPsl
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Stats documenting how we handle every form containing a password, bucketed
     by the actions taken.
@@ -76583,8 +76599,8 @@
 
 <histogram name="PasswordManager.ActionsTakenV3"
     enum="PasswordManagerActionsTakenV3">
-  <owner>vabr@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     Stats documenting how we handle every form containing a password, bucketed
     by the actions taken.
@@ -76596,7 +76612,6 @@
   <obsolete>
     Deprecated as of 3/18/2014. See PasswordManagerActionsTakenV3.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <owner>yfriedman@chromium.org</owner>
   <summary>
     Stats documenting how we handle every form containing a password, bucketed
@@ -76690,7 +76705,8 @@
 
 <histogram name="PasswordManager.Android.ExportPasswordsProgressBarUsage"
     enum="PasswordManagerAndroidExportPasswordsProgressBarUsage">
-  <owner>vabr@chromium.org</owner>
+  <owner>fhorschig@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     Records what happened to the progress bar during exporting passwords when
     its dismissal was requested.
@@ -76699,8 +76715,8 @@
 
 <histogram name="PasswordManager.Android.PasswordCredentialEntry"
     enum="PasswordManagerAndroidPasswordEntryActions">
+  <owner>fhorschig@chromium.org</owner>
   <owner>jdoerrie@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Records the action taken with a password credential entry on Android.
   </summary>
@@ -76708,8 +76724,8 @@
 
 <histogram name="PasswordManager.Android.PasswordCredentialEntry.Password"
     enum="PasswordManagerAndroidPasswordActions">
+  <owner>fhorschig@chromium.org</owner>
   <owner>jdoerrie@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Records the action taken with a password of a password credential entry on
     Android.
@@ -76718,8 +76734,8 @@
 
 <histogram name="PasswordManager.Android.PasswordCredentialEntry.Username"
     enum="PasswordManagerAndroidUsernameActions">
+  <owner>fhorschig@chromium.org</owner>
   <owner>jdoerrie@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Records the action taken with a username of a password credential entry on
     Android.
@@ -76728,8 +76744,8 @@
 
 <histogram name="PasswordManager.Android.PasswordCredentialEntry.Website"
     enum="PasswordManagerAndroidWebsiteActions">
+  <owner>fhorschig@chromium.org</owner>
   <owner>jdoerrie@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Records the action taken with a website of a password credential entry on
     Android.
@@ -76738,8 +76754,8 @@
 
 <histogram name="PasswordManager.Android.PasswordExceptionEntry"
     enum="PasswordManagerAndroidPasswordEntryActions">
+  <owner>fhorschig@chromium.org</owner>
   <owner>jdoerrie@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Records the action taken with a password exception entry on Android.
   </summary>
@@ -76747,8 +76763,8 @@
 
 <histogram name="PasswordManager.Android.PasswordExceptionEntry.Website"
     enum="PasswordManagerAndroidWebsiteActions">
+  <owner>fhorschig@chromium.org</owner>
   <owner>jdoerrie@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Records the action taken with a website of a password exception entry on
     Android.
@@ -76784,7 +76800,6 @@
 <histogram name="PasswordManager.BlacklistedDuplicates"
     units="duplicated forms" expires_after="M73">
   <owner>jdoerrie@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     The number of duplicates forms from the password store. Recorded once for
     the profile on startup.
@@ -76792,8 +76807,8 @@
 </histogram>
 
 <histogram name="PasswordManager.BlacklistedSites">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>jdoerrie@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     The total number of sites that the user has blacklisted. Recorded by
     iterating over stored passwords once per run of Chrome.
@@ -76837,7 +76852,7 @@
 <histogram name="PasswordManager.CertificateErrorsWhileSeeingForms"
     enum="PasswordCertificateError">
   <owner>battre@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
   <summary>
     When the password manager sees new forms on the page, it records in this
     histogram whether there were any SSL certificate errors. The presence of SSL
@@ -76882,8 +76897,8 @@
 </histogram>
 
 <histogram name="PasswordManager.DynamicFormChanges" expires_after="M75">
+  <owner>battre@chromium.org</owner>
   <owner>dvadym@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Records a bitmask of password form changes after the first time this form is
     seen by Password Manager. Recorded once per a form when the form is removed
@@ -76980,7 +76995,8 @@
 </histogram>
 
 <histogram name="PasswordManager.Enabled" enum="BooleanEnabled">
-  <owner>vabr@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     Indicates whether the password manager is enabled when a tab is opened. This
     includes prerendered tabs.
@@ -76990,7 +77006,7 @@
 <histogram name="PasswordManager.ExportedPasswordsPerUserInCSV">
   <owner>cfroussios@chromium.org</owner>
   <owner>ioanap@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>The number of passwords exported in CSV format per user.</summary>
 </histogram>
 
@@ -76998,7 +77014,7 @@
     enum="ExportPasswordsResult">
   <owner>cfroussios@chromium.org</owner>
   <owner>ioanap@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>The success or error type of exporting passwords into CSV.</summary>
 </histogram>
 
@@ -77034,8 +77050,8 @@
 
 <histogram name="PasswordManager.GeneratedFormHasNoFormManager"
     enum="BooleanFormManager">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
+  <owner>kolos@chromium.org</owner>
   <owner>deepak.m1@samsung.com</owner>
   <summary>
     When the generation state of a password was changed, records whether an
@@ -77145,7 +77161,6 @@
     Deprecated as of 07/2018. This metric was deleted at
     https://chromium-review.googlesource.com/c/chromium/src/+/1131495.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>
     The result of importing passwords stored in IE7 into Chrome's password
     store.
@@ -77154,14 +77169,14 @@
 
 <histogram name="PasswordManager.ImportedPasswordsPerUserInCSV">
   <owner>xunlu@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>The number of passwords imported in CSV format per user</summary>
 </histogram>
 
 <histogram name="PasswordManager.ImportPasswordFromCSVResult"
     enum="PasswordImportFromCSVResult">
   <owner>xunlu@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     The response code of successful or failed password import attempt from a CSV
     file.
@@ -77181,7 +77196,6 @@
     Deprecated as of 03/2016. This metric has been replaced by
     PasswordManager.UIDismissalReason.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>
     The distribution of responses to the &quot;Do you want Chrome to remember
     this password&quot;? info bar prompt.
@@ -77190,8 +77204,8 @@
 
 <histogram name="PasswordManager.InvalidtHttpsCredentialsNeedToBeCleared"
     enum="BooleanNeedsClearing" expires_after="M73">
-  <owner>vabr@chromium.org</owner>
   <owner>jdoerrie@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     Records once on startup whether forms with wrong signon_realm created by
     HTTP to HTTPS migration need to be removed. See https://crbug.com/881731 for
@@ -77304,8 +77318,8 @@
 </histogram>
 
 <histogram name="PasswordManager.LinuxBackendStatistics">
+  <owner>cfroussios@chromium.org</owner>
   <owner>dvadym@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Information about usage of password storage backends on Linux. It also
     includes whether a command line flag for a specific backend is given.
@@ -77379,7 +77393,7 @@
 </histogram>
 
 <histogram name="PasswordManager.NumPasswordsDeletedByBulkDelete">
-  <owner>vabr@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     Number of passwords deleted when the user chooses to clear passwords via the
     clear browsing data UI.
@@ -77397,7 +77411,6 @@
   <obsolete>
     Deprecated as of 08/2015.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>
     When the user chooses to never remember passwords for a form, we remove all
     previously saved credentials for that form. This is the count of those
@@ -77406,7 +77419,7 @@
 </histogram>
 
 <histogram name="PasswordManager.NumPasswordsNotShown">
-  <owner>vabr@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
   <summary>
     The password manager only shows those credentials that are considered the
     best match for a particular form. This stat keep track of the credentials
@@ -77416,7 +77429,7 @@
 
 <histogram name="PasswordManager.OsPasswordStatus"
     enum="PasswordManagerOsPasswordStatus">
-  <owner>vabr@chromium.org</owner>
+  <owner>battre@chromium.org</owner>
   <owner>wfh@chromium.org</owner>
   <summary>
     Indicates whether the user's OS password is blank or not at browser startup.
@@ -77425,7 +77438,7 @@
 
 <histogram name="PasswordManager.OtherPossibleUsernamesUsage"
     enum="OtherPossibleUsernamesUsage">
-  <owner>vabr@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
   <summary>
     Breakdown of how other possible usernames are displayed. Recorded every time
     we autofill a password form.
@@ -77588,7 +77601,7 @@
 
 <histogram name="PasswordManager.ProvisionalSaveFailure"
     enum="ProvisionalSaveFailure">
-  <owner>vabr@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
   <summary>
     Breakdown of cases where a password is submitted, but we don't even try and
     save it. Recorded for every password form submit.
@@ -77597,8 +77610,8 @@
 
 <histogram name="PasswordManager.PslDomainMatchTriggering"
     enum="PasswordManagerPslDomainMatchTriggering">
-  <owner>vabr@chromium.org</owner>
-  <owner>yfriedman@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     Breakdown on trigger rate of providing a password form autofill entry based
     on matching stored information using the public suffix list (PSL) for
@@ -77621,7 +77634,7 @@
 
 <histogram name="PasswordManager.ReauthToAccessPasswordInSettings"
     enum="ReauthToAccessPasswordInSettingsEvent">
-  <owner>vabr@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     Recorded whenever the user interacts with reauthentication in order to
     access the passwords in settings, or when such reauthentication is skipped
@@ -77706,7 +77719,6 @@
   <obsolete>
     Deprecated as of 03/2016.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Indicates whether the save password prompt disappeared in less than one
     second. This most likely indicates that the prompt was dismissed
@@ -77719,7 +77731,6 @@
   <obsolete>
     Deprecated as of 03/2016.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>Indicates whether the save password prompt was displayed.</summary>
 </histogram>
 
@@ -77728,7 +77739,6 @@
   <obsolete>
     Deprecated as of 03/2016.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Breakdown of which response the user selected from the save password prompt.
   </summary>
@@ -77804,7 +77814,6 @@
     moot. See https://crbug.com/871509#c3.
   </obsolete>
   <owner>dvadym@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Records results of the new and the old algorithm for detecting whether to
     show a password prompt to the user. Recorded on each password form
@@ -77893,7 +77902,6 @@
     Deprecated as of 14 September 2017, due to being no longer useful.
   </obsolete>
   <owner>xunlu@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     Whether password manager stored passwords imported from CSV file
     successfully.
@@ -77954,7 +77962,6 @@
   <obsolete>
     Deprecated since August 28, 2018, due to removing the corresponding feature.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>
     When the user logs in with their sync credential, PasswordManager checks if
     there are any outdated copies of it in the password store, in order to purge
@@ -77965,7 +77972,7 @@
 
 <histogram name="PasswordManager.SubmitNavigatesToDifferentDomain"
     enum="PostSubmitNavigation">
-  <owner>vabr@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
   <summary>
     Indicates whether submitting a password login form changes the registry
     controlled domain of the main frame.
@@ -77983,8 +77990,8 @@
 </histogram>
 
 <histogram name="PasswordManager.SubmittedFormType" enum="PasswordFormType">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
+  <owner>kolos@chromium.org</owner>
   <summary>
     The type (e.g. signup, login, change password) of all submitted password
     forms. This is logged on form submission, but doesn't require that the
@@ -78057,8 +78064,8 @@
 
 <histogram name="PasswordManager.SyncCredentialFiltered"
     enum="CredentialFilteredType">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>battre@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     This histogram is reported for those forms on accounts.google.com, on which
     Chrome is forced by Finch/flags during autofilling to remove sync
@@ -78070,8 +78077,8 @@
 
 <histogram name="PasswordManager.SyncingAccountState"
     enum="PasswordManagerSyncingAccountState">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>battre@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     Information about the user's current sync status crossed with whether their
     synced password is saved.
@@ -78090,8 +78097,8 @@
 
 <histogram name="PasswordManager.TimeBetweenStoreAndServer" units="ms"
     expires_after="2019-05-01">
+  <owner>battre@chromium.org</owner>
   <owner>dvadym@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     The time between receiving saved credentials from the password store and
     predictions from the Autofill server. Recorded each time when predictions
@@ -78100,9 +78107,9 @@
 </histogram>
 
 <histogram name="PasswordManager.TimeReadingExportedPasswords" units="ms">
+  <owner>battre@chromium.org</owner>
   <owner>cfroussios@chromium.org</owner>
   <owner>ioanap@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     The time it takes to fetch and serialise the passwords for export.
   </summary>
@@ -78113,8 +78120,6 @@
     Deprecated as of 11/11/14. New statistic is
     PasswordManager.TimesPasswordUsed.AutoGenerated.
   </obsolete>
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
   <summary>
     The number of times each generated password has been used to log in.
     Recorded by iterating over stored passwords once per run. This information
@@ -78123,8 +78128,8 @@
 </histogram>
 
 <histogram name="PasswordManager.TimesPasswordUsed">
-  <owner>gcasto@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>battre@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
   <summary>
     The number of times each saved password has been used to log in. Does not
     include generated passwords. Recorded by iterating over stored passwords
@@ -78133,7 +78138,7 @@
 </histogram>
 
 <histogram base="true" name="PasswordManager.TotalAccounts">
-  <owner>vabr@chromium.org</owner>
+  <owner>battre@chromium.org</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
     The number of accounts stored in the password manager (across all sites),
@@ -78145,7 +78150,7 @@
 <histogram base="true" name="PasswordManager.TotalAccountsHiRes.WithScheme"
     units="accounts">
   <owner>engedy@chromium.org</owner>
-  <owner>vabr@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
   <summary>
     The number of accounts stored in the password manager (across all sites) for
     origins with the scheme (e.g., HTTP, HTTPS, FTP) as given in the histogram
@@ -81520,7 +81525,6 @@
   <obsolete>
     Deprecated as of 2014-06.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>
     The PLT.Abandoned histogram for pages loaded after WebRequest API was used.
   </summary>
@@ -81645,7 +81649,6 @@
   <obsolete>
     No longer needed.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>
     The PLT.BeginToFinish histogram for pages loaded by following a link, after
     WebRequest API was used.
@@ -81707,7 +81710,6 @@
   <obsolete>
     No longer needed.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>
     The PLT.BeginToFinish histogram for pages reloaded by JavaScript or by
     following a link, after WebRequest API was used.
@@ -81769,7 +81771,6 @@
   <obsolete>
     No longer needed.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>
     The PLT.BeginToFinish histogram for pages loads initiated by back/forward
     buttons, or by a change of encoding, after WebRequest API was used.
@@ -81827,7 +81828,6 @@
   <obsolete>
     No longer needed.
   </obsolete>
-  <owner>vabr@chromium.org</owner>
   <summary>
     The PLT.BeginToFinish histogram for pages loaded by entering a URL or a
     search query into Omnibox, after WebRequest API was used.
@@ -123298,6 +123298,26 @@
   </summary>
 </histogram>
 
+<histogram name="WebRTC.Audio.EchoCanceller.MaxCaptureJitter"
+    units="frames (10 ms)" expires_after="2019-05-01">
+  <owner>peah@chromium.org</owner>
+  <owner>gustaf@chromium.org</owner>
+  <summary>
+    This histogram logs the observed maximum number of capture API calls in a
+    row in the unit of frames (10 ms). A new value is logged every 10 seconds.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.EchoCanceller.MaxRenderJitter"
+    units="frames (10 ms)" expires_after="2019-05-01">
+  <owner>peah@chromium.org</owner>
+  <owner>gustaf@chromium.org</owner>
+  <summary>
+    This histogram logs the observed maximum number of render API calls in a row
+    in the unit of frames (10 ms). A new value is logged every 10 seconds.
+  </summary>
+</histogram>
+
 <histogram name="WebRTC.Audio.EchoCanceller.MaxSkewShiftCount"
     units="events/minute">
   <owner>peah@chromium.org</owner>
@@ -123314,6 +123334,26 @@
   </summary>
 </histogram>
 
+<histogram name="WebRTC.Audio.EchoCanceller.MinCaptureJitter"
+    units="frames (10 ms)" expires_after="2019-05-01">
+  <owner>peah@chromium.org</owner>
+  <owner>gustaf@chromium.org</owner>
+  <summary>
+    This histogram logs the observed minimum number of capture API calls in a
+    row in the unit of frames (10 ms). A new value is logged every 10 seconds.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.EchoCanceller.MinRenderJitter"
+    units="frames (10 ms)" expires_after="2019-05-01">
+  <owner>peah@chromium.org</owner>
+  <owner>gustaf@chromium.org</owner>
+  <summary>
+    This histogram logs the observed minimum number of render API calls in a row
+    in the unit of frames (10 ms). A new value is logged every 10 seconds.
+  </summary>
+</histogram>
+
 <histogram name="WebRTC.Audio.EchoCanceller.ModelBasedAecFeasible"
     enum="Boolean">
   <owner>peah@chromium.org</owner>
@@ -130173,6 +130213,14 @@
   <affected-histogram name="GPU.DirectComposition.SwapChainCreationResult"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="GPU.DirectComposition.ProtectedVideoType"
+    separator=".">
+  <suffix name="Clear" label="Clear"/>
+  <suffix name="HardwareProtected" label="HardwareProtected"/>
+  <suffix name="SoftwareProtected" label="SoftwareProtected"/>
+  <affected-histogram name="GPU.DirectComposition.DCLayerResult2"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="GPU.MemorySamplingTime" separator=".">
   <suffix name="Periodic" label="Sampled periodically."/>
   <suffix name="Pressure" label="Sampled on CRITICAL memory pressure signal."/>
diff --git a/ui/accessibility/BUILD.gn b/ui/accessibility/BUILD.gn
index 3d33dd9..5639521 100644
--- a/ui/accessibility/BUILD.gn
+++ b/ui/accessibility/BUILD.gn
@@ -44,6 +44,7 @@
     "ax_export.h",
     "ax_host_delegate.cc",
     "ax_host_delegate.h",
+    "ax_language_info.h",
     "ax_mode.h",
     "ax_mode_observer.h",
     "ax_node.cc",
diff --git a/ui/accessibility/ax_language_info.h b/ui/accessibility/ax_language_info.h
new file mode 100644
index 0000000..01b016a
--- /dev/null
+++ b/ui/accessibility/ax_language_info.h
@@ -0,0 +1,49 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_ACCESSIBILITY_AX_LANGUAGE_INFO_H_
+#define UI_ACCESSIBILITY_AX_LANGUAGE_INFO_H_
+
+#include <set>
+#include <string>
+
+#include "base/macros.h"
+#include "ui/accessibility/ax_export.h"
+
+namespace ui {
+
+class AXNode;
+
+// An instance of LanguageInfo is used to record any specified language
+// attributes and will eventually be extended to include required information
+// for language detection.
+class AX_EXPORT AXLanguageInfo {
+ public:
+  AXLanguageInfo(const AXNode* node, std::string lang)
+      : node_(node), language_(lang) {}
+
+  AXLanguageInfo(const AXLanguageInfo& info, const AXNode* node)
+      : node_(node), language_(info.language_) {}
+
+  AXLanguageInfo(const AXLanguageInfo* info, const AXNode* node)
+      : node_(node), language_(info->language_) {}
+
+  ~AXLanguageInfo() {}
+
+  const AXNode* node() const { return node_; }
+
+  // Get language code in BCP 47.
+  const std::string& language() const { return language_; }
+
+ private:
+  const AXNode* const node_;
+  // Language code in BCP 47.
+  const std::string language_;
+
+  DISALLOW_IMPLICIT_CONSTRUCTORS(AXLanguageInfo);
+};
+
+}  // namespace ui
+
+#endif  // UI_ACCESSIBILITY_AX_LANGUAGE_INFO
diff --git a/ui/accessibility/ax_node.cc b/ui/accessibility/ax_node.cc
index bde1f01..36d16e2 100644
--- a/ui/accessibility/ax_node.cc
+++ b/ui/accessibility/ax_node.cc
@@ -9,6 +9,7 @@
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
 #include "ui/accessibility/ax_enums.mojom.h"
+#include "ui/accessibility/ax_language_info.h"
 #include "ui/accessibility/ax_role_properties.h"
 #include "ui/accessibility/ax_table_info.h"
 #include "ui/accessibility/ax_tree.h"
@@ -20,11 +21,17 @@
                AXNode* parent,
                int32_t id,
                int32_t index_in_parent)
-    : tree_(tree), index_in_parent_(index_in_parent), parent_(parent) {
+    : tree_(tree),
+      index_in_parent_(index_in_parent),
+      parent_(parent),
+      language_info_(nullptr) {
   data_.id = id;
 }
 
-AXNode::~AXNode() {}
+AXNode::~AXNode() {
+  if (language_info_)
+    delete language_info_;
+}
 
 int AXNode::GetUnignoredChildCount() const {
   int count = 0;
@@ -175,6 +182,41 @@
   return base::UTF8ToUTF16(GetInheritedStringAttribute(attribute));
 }
 
+const AXLanguageInfo* AXNode::GetLanguageInfo() {
+  if (language_info_)
+    return language_info_;
+
+  const auto& lang_attr =
+      GetStringAttribute(ax::mojom::StringAttribute::kLanguage);
+
+  // Promote language attribute to LanguageInfo.
+  if (!lang_attr.empty()) {
+    language_info_ = new AXLanguageInfo(this, lang_attr);
+    return language_info_;
+  }
+
+  // Try search for language through parent instead.
+  if (!parent())
+    return nullptr;
+
+  const AXLanguageInfo* parent_lang_info = GetLanguageInfo();
+  if (!parent_lang_info)
+    return nullptr;
+
+  // Cache the results on this node.
+  language_info_ = new AXLanguageInfo(parent_lang_info, this);
+  return language_info_;
+}
+
+std::string AXNode::GetLanguage() {
+  const AXLanguageInfo* lang_info = GetLanguageInfo();
+
+  if (lang_info)
+    return lang_info->language();
+
+  return "";
+}
+
 std::ostream& operator<<(std::ostream& stream, const AXNode& node) {
   return stream << node.data().ToString();
 }
diff --git a/ui/accessibility/ax_node.h b/ui/accessibility/ax_node.h
index b709233..8b9c5ca 100644
--- a/ui/accessibility/ax_node.h
+++ b/ui/accessibility/ax_node.h
@@ -16,6 +16,7 @@
 namespace ui {
 
 class AXTableInfo;
+class AXLanguageInfo;
 
 // One node in an AXTree.
 class AX_EXPORT AXNode final {
@@ -190,6 +191,15 @@
   base::string16 GetInheritedString16Attribute(
       ax::mojom::StringAttribute attribute) const;
 
+  // Return a pointer to a string for the language code.
+  // This will consider the language declared in the DOM, and may eventually
+  // attempt to automatically detect the language from the text.
+  //
+  // This language code will be BCP 47.
+  //
+  // Returns empty string if no appropriate language was found.
+  std::string GetLanguage();
+
   //
   // Helper functions for tables, table rows, and table cells.
   // Most of these functions construct and cache an AXTableInfo behind
@@ -272,6 +282,17 @@
   AXNode* parent_;
   std::vector<AXNode*> children_;
   AXNodeData data_;
+
+  AXLanguageInfo* language_info_;
+
+  // Return an object containing information about the languages used.
+  // Will walk up tree if needed to determine language.
+  //
+  // Clients should not retain this pointer, instead they should request it
+  // every time it is needed.
+  //
+  // Returns nullptr if the node has no detectable language.
+  const AXLanguageInfo* GetLanguageInfo();
 };
 
 AX_EXPORT std::ostream& operator<<(std::ostream& stream, const AXNode& node);
diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc
index c2a79b6..1b5932fb 100644
--- a/ui/accessibility/ax_tree.cc
+++ b/ui/accessibility/ax_tree.cc
@@ -8,8 +8,10 @@
 
 #include <set>
 
+#include "base/command_line.h"
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
+#include "ui/accessibility/accessibility_switches.h"
 #include "ui/accessibility/ax_node.h"
 #include "ui/accessibility/ax_table_info.h"
 #include "ui/gfx/transform.h"
diff --git a/ui/aura/mus/DEPS b/ui/aura/mus/DEPS
index 1b310c00..5971c42 100644
--- a/ui/aura/mus/DEPS
+++ b/ui/aura/mus/DEPS
@@ -9,6 +9,7 @@
   "+components/viz/common",
   "+components/viz/service/frame_sinks/frame_sink_manager_impl.h",
   "+gpu/command_buffer/client/gpu_memory_buffer_manager.h",
+  "+gpu/command_buffer/common",
   "+gpu/ipc/client/gpu_channel_host.h",
   "+mojo/public/cpp/system/buffer.h",
   "+mojo/public/cpp/system/platform_handle.h",
diff --git a/ui/aura/mus/mus_context_factory.cc b/ui/aura/mus/mus_context_factory.cc
index b697b59..eef0df5d 100644
--- a/ui/aura/mus/mus_context_factory.cc
+++ b/ui/aura/mus/mus_context_factory.cc
@@ -9,7 +9,10 @@
 #include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
 #include "components/viz/common/gpu/context_provider.h"
 #include "components/viz/host/renderer_settings_creation.h"
+#include "gpu/command_buffer/common/scheduling_priority.h"
+#include "services/ws/public/cpp/gpu/command_buffer_metrics.h"
 #include "services/ws/public/cpp/gpu/gpu.h"
+#include "services/ws/public/cpp/gpu/shared_worker_context_provider_factory.h"
 #include "ui/aura/mus/window_port_mus.h"
 #include "ui/aura/window_tree_host.h"
 #include "ui/compositor/compositor_switches.h"
@@ -24,6 +27,10 @@
 
 MusContextFactory::~MusContextFactory() {}
 
+void MusContextFactory::ResetSharedWorkerContextProvider() {
+  shared_worker_context_provider_factory_.reset();
+}
+
 void MusContextFactory::OnEstablishedGpuChannel(
     base::WeakPtr<ui::Compositor> compositor,
     scoped_refptr<gpu::GpuChannelHost> gpu_channel) {
@@ -35,16 +42,42 @@
   DCHECK(window_port);
 
   scoped_refptr<viz::ContextProvider> context_provider =
-      gpu_->CreateContextProvider(std::move(gpu_channel));
+      gpu_->CreateContextProvider(gpu_channel);
   // If the binding fails, then we need to return early since the compositor
   // expects a successfully initialized/bound provider.
   if (context_provider->BindToCurrentThread() != gpu::ContextResult::kSuccess) {
     // TODO(danakj): We should retry if the result was not kFatalFailure.
     return;
   }
+
+  if (!shared_worker_context_provider_factory_) {
+    // TODO(sky): unify these with values from ws::Gpu.
+    const int32_t stream_id = 0;
+    const gpu::SchedulingPriority stream_priority =
+        gpu::SchedulingPriority::kNormal;
+    const GURL identity_url("chrome://gpu/MusContextFactory");
+    shared_worker_context_provider_factory_ =
+        std::make_unique<ws::SharedWorkerContextProviderFactory>(
+            stream_id, stream_priority, identity_url,
+            ws::command_buffer_metrics::ContextType::MUS_CLIENT);
+  }
+  scoped_refptr<viz::RasterContextProvider> shared_worker_context_provider;
+
+  auto shared_worker_validate_result =
+      shared_worker_context_provider_factory_->Validate(
+          gpu_channel, GetGpuMemoryBufferManager());
+  if (shared_worker_validate_result == gpu::ContextResult::kSuccess) {
+    shared_worker_context_provider =
+        shared_worker_context_provider_factory_->provider();
+  } else {
+    shared_worker_context_provider_factory_.reset();
+  }
+
   std::unique_ptr<cc::LayerTreeFrameSink> layer_tree_frame_sink =
-      window_port->RequestLayerTreeFrameSink(std::move(context_provider),
-                                             gpu_->gpu_memory_buffer_manager());
+      window_port->RequestLayerTreeFrameSink(
+          std::move(context_provider),
+          std::move(shared_worker_context_provider),
+          gpu_->gpu_memory_buffer_manager());
   compositor->SetLayerTreeFrameSink(std::move(layer_tree_frame_sink));
 }
 
diff --git a/ui/aura/mus/mus_context_factory.h b/ui/aura/mus/mus_context_factory.h
index facdab3..84ecc52f 100644
--- a/ui/aura/mus/mus_context_factory.h
+++ b/ui/aura/mus/mus_context_factory.h
@@ -23,6 +23,7 @@
 
 namespace ws {
 class Gpu;
+class SharedWorkerContextProviderFactory;
 }
 
 namespace aura {
@@ -33,6 +34,10 @@
   explicit MusContextFactory(ws::Gpu* gpu);
   ~MusContextFactory() override;
 
+  // Drops the references to the RasterContextProvider. This may be called to
+  // ensure a particular shutdown ordering.
+  void ResetSharedWorkerContextProvider();
+
  private:
   // Callback function for Gpu::EstablishGpuChannel().
   void OnEstablishedGpuChannel(base::WeakPtr<ui::Compositor> compositor,
@@ -53,6 +58,8 @@
   ws::RasterThreadHelper raster_thread_helper_;
   ws::Gpu* gpu_;
   scoped_refptr<viz::ContextProvider> shared_main_thread_context_provider_;
+  std::unique_ptr<ws::SharedWorkerContextProviderFactory>
+      shared_worker_context_provider_factory_;
 
   base::WeakPtrFactory<MusContextFactory> weak_ptr_factory_;
 
diff --git a/ui/aura/mus/window_port_mus.cc b/ui/aura/mus/window_port_mus.cc
index d26cdabf..14eb841 100644
--- a/ui/aura/mus/window_port_mus.cc
+++ b/ui/aura/mus/window_port_mus.cc
@@ -175,6 +175,7 @@
 std::unique_ptr<cc::mojo_embedder::AsyncLayerTreeFrameSink>
 WindowPortMus::RequestLayerTreeFrameSink(
     scoped_refptr<viz::ContextProvider> context_provider,
+    scoped_refptr<viz::RasterContextProvider> raster_context_provider,
     gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager) {
   viz::mojom::CompositorFrameSinkPtrInfo sink_info;
   viz::mojom::CompositorFrameSinkRequest sink_request =
@@ -184,6 +185,9 @@
       mojo::MakeRequest(&client);
 
   cc::mojo_embedder::AsyncLayerTreeFrameSink::InitParams params;
+  ui::Compositor* compositor = window_->layer()->GetCompositor();
+  DCHECK(compositor);
+  params.compositor_task_runner = compositor->task_runner();
   params.gpu_memory_buffer_manager = gpu_memory_buffer_manager;
   params.pipes.compositor_frame_sink_info = std::move(sink_info);
   params.pipes.client_request = std::move(client_request);
@@ -202,7 +206,7 @@
 
   auto layer_tree_frame_sink =
       std::make_unique<cc::mojo_embedder::AsyncLayerTreeFrameSink>(
-          std::move(context_provider), nullptr /* worker_context_provider */,
+          std::move(context_provider), std::move(raster_context_provider),
           &params);
   window_tree_client_->AttachCompositorFrameSink(
       server_id(), std::move(sink_request), std::move(client));
@@ -687,8 +691,10 @@
   DCHECK_EQ(window_mus_type(), WindowMusType::LOCAL);
   DCHECK(!local_layer_tree_frame_sink_);
 
+  // TODO(sky): this needs to supply a RasterContextProvider.
   auto client_layer_tree_frame_sink = RequestLayerTreeFrameSink(
-      nullptr, window_->env()->context_factory()->GetGpuMemoryBufferManager());
+      nullptr, nullptr,
+      window_->env()->context_factory()->GetGpuMemoryBufferManager());
   local_layer_tree_frame_sink_ = client_layer_tree_frame_sink->GetWeakPtr();
   embed_frame_sink_id_ = GenerateFrameSinkIdFromServerId();
   window_->SetEmbedFrameSinkId(embed_frame_sink_id_);
diff --git a/ui/aura/mus/window_port_mus.h b/ui/aura/mus/window_port_mus.h
index 19a24cf..14f60e5 100644
--- a/ui/aura/mus/window_port_mus.h
+++ b/ui/aura/mus/window_port_mus.h
@@ -40,6 +40,7 @@
 
 namespace viz {
 class ContextProvider;
+class RasterContextProvider;
 }
 
 namespace aura {
@@ -101,6 +102,7 @@
   std::unique_ptr<cc::mojo_embedder::AsyncLayerTreeFrameSink>
   RequestLayerTreeFrameSink(
       scoped_refptr<viz::ContextProvider> context_provider,
+      scoped_refptr<viz::RasterContextProvider> raster_context_provider,
       gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager);
 
   viz::FrameSinkId GenerateFrameSinkIdFromServerId() const;
diff --git a/ui/aura/mus/window_tree_client.cc b/ui/aura/mus/window_tree_client.cc
index f2894704..a0dbdb0b 100644
--- a/ui/aura/mus/window_tree_client.cc
+++ b/ui/aura/mus/window_tree_client.cc
@@ -906,6 +906,11 @@
                     static_cast<int16_t>(location & 0xFFFF));
 }
 
+void WindowTreeClient::OnEarlyShutdown() {
+  if (compositor_context_factory_)
+    compositor_context_factory_->ResetSharedWorkerContextProvider();
+}
+
 void WindowTreeClient::OnEventObserverAdded(
     ui::EventObserver* observer,
     const std::set<ui::EventType>& types) {
diff --git a/ui/aura/mus/window_tree_client.h b/ui/aura/mus/window_tree_client.h
index 7f47dcea..186f8e5c 100644
--- a/ui/aura/mus/window_tree_client.h
+++ b/ui/aura/mus/window_tree_client.h
@@ -198,6 +198,9 @@
   // race the asynchronous initialization; but in that case we return (0, 0).
   gfx::Point GetCursorScreenPoint();
 
+  // May be called to do early shutdown.
+  void OnEarlyShutdown();
+
   // Called when the local aura::Env adds or removes EventObservers.
   void OnEventObserverAdded(ui::EventObserver* observer,
                             const std::set<ui::EventType>& types);
diff --git a/ui/aura/window_unittest.cc b/ui/aura/window_unittest.cc
index d5a5768..c5cfcd4 100644
--- a/ui/aura/window_unittest.cc
+++ b/ui/aura/window_unittest.cc
@@ -3259,6 +3259,8 @@
   window.Init(ui::LAYER_NOT_DRAWN);
   window.SetBounds(gfx::Rect(300, 300));
 
+  root_window()->AddChild(&window);
+
   std::unique_ptr<cc::LayerTreeFrameSink> frame_sink(
       window.CreateLayerTreeFrameSink());
   viz::LocalSurfaceId local_surface_id1 =
diff --git a/ui/file_manager/audio_player/manifest.json b/ui/file_manager/audio_player/manifest.json
index f45ad2b..a2f01eaa 100644
--- a/ui/file_manager/audio_player/manifest.json
+++ b/ui/file_manager/audio_player/manifest.json
@@ -59,6 +59,9 @@
         "js/background_scripts.js"
       ]
     },
-    "content_security_policy": "default-src 'none'; script-src 'self' blob: filesystem: chrome://resources chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj chrome-extension://enhhojjnijigcajfphajepfemndkmdlo; style-src 'self' blob: filesystem: chrome://resources 'unsafe-inline'; img-src 'self' blob: filesystem: chrome://theme chrome://resources data: https://www.googledrive.com; media-src 'self' blob: filesystem:; object-src 'self' blob: filesystem:; font-src chrome://resources;"
+    // enhhojjnijigcajfphajepfemndkmdlo is the Dev Media Router component extension ID.
+    // pkedcjkdefgpdelpbcmbmeomcjbeemfm is the Stable Media Router component extension ID.
+    "content_security_policy": "default-src 'none'; script-src 'self' blob: filesystem: chrome://resources chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj chrome-extension://enhhojjnijigcajfphajepfemndkmdlo chrome-extension://pkedcjkdefgpdelpbcmbmeomcjbeemfm; style-src 'self' blob: filesystem: chrome://resources 'unsafe-inline'; img-src 'self' blob: filesystem: chrome://theme chrome://resources data: https://www.googledrive.com; media-src 'self' blob: filesystem:; object-src 'self' blob: filesystem:; font-src chrome://resources;"
   }
 }
+
diff --git a/ui/file_manager/video_player/manifest.json b/ui/file_manager/video_player/manifest.json
index a5f5b10..7b858f2 100644
--- a/ui/file_manager/video_player/manifest.json
+++ b/ui/file_manager/video_player/manifest.json
@@ -67,8 +67,9 @@
         "js/background_scripts.js"
       ]
     },
-    // enhhojjnijigcajfphajepfemndkmdlo is the Media Router component extension ID.
+    // enhhojjnijigcajfphajepfemndkmdlo is the Dev Media Router component extension ID.
+    // pkedcjkdefgpdelpbcmbmeomcjbeemfm is the Stable Media Router component extension ID.
     // ljoplibgfehghmibaoaepfagnmbbfiga is the ui/file_manager/integration_tests component extension ID.
-    "content_security_policy": "default-src 'none'; script-src 'self' blob: filesystem: chrome://resources chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj chrome-extension://enhhojjnijigcajfphajepfemndkmdlo chrome-extension://ljoplibgfehghmibaoaepfagnmbbfiga; style-src 'self' blob: filesystem: chrome://resources 'unsafe-inline'; img-src 'self' blob: filesystem: chrome://theme chrome://resources data: https://www.googledrive.com; media-src 'self' blob: filesystem:; object-src 'self' blob: filesystem:; font-src chrome://resources;"
+    "content_security_policy": "default-src 'none'; script-src 'self' blob: filesystem: chrome://resources chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj chrome-extension://enhhojjnijigcajfphajepfemndkmdlo chrome-extension://pkedcjkdefgpdelpbcmbmeomcjbeemfm chrome-extension://ljoplibgfehghmibaoaepfagnmbbfiga; style-src 'self' blob: filesystem: chrome://resources 'unsafe-inline'; img-src 'self' blob: filesystem: chrome://theme chrome://resources data: https://www.googledrive.com; media-src 'self' blob: filesystem:; object-src 'self' blob: filesystem:; font-src chrome://resources;"
   }
 }
diff --git a/ui/ozone/platform/drm/host/drm_cursor.cc b/ui/ozone/platform/drm/host/drm_cursor.cc
index cc2ee622..8ffc06b4 100644
--- a/ui/ozone/platform/drm/host/drm_cursor.cc
+++ b/ui/ozone/platform/drm/host/drm_cursor.cc
@@ -49,7 +49,6 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   base::AutoLock lock(lock_);
   proxy_ = std::move(proxy);
-  SendCursorShowLocked();
 }
 
 void DrmCursor::ResetDrmCursorProxy() {
diff --git a/ui/ozone/platform/drm/host/drm_gpu_platform_support_host.cc b/ui/ozone/platform/drm/host/drm_gpu_platform_support_host.cc
index 7e6862e..8adf3feb 100644
--- a/ui/ozone/platform/drm/host/drm_gpu_platform_support_host.cc
+++ b/ui/ozone/platform/drm/host/drm_gpu_platform_support_host.cc
@@ -78,8 +78,9 @@
                            FROM_HERE, base::BindOnce(send_callback_, message)))
     return;
 
-  // Drop disconnected updates. The cursor will get set once we connect, via
-  // SetDrmCursorProxy().
+  // Drop disconnected updates. DrmWindowHost will call
+  // CommitBoundsChange() when we connect to initialize the cursor
+  // location.
   delete message;
 }