diff --git a/DEPS b/DEPS
index f5f0741..5249be58 100644
--- a/DEPS
+++ b/DEPS
@@ -45,11 +45,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'f3b4e16c36a6c789fc129aa3bd15c34b44ee8743',
+  'skia_revision': '0e4e410ac8042d880923f87c8a7c325539896344',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '45a0ce950715c19d967a91464589ca334d95164d',
+  'v8_revision': '306bf06e29993ae06c926d27f5683e2a23566d74',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -69,7 +69,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': 'f5777a117a7557507616eaf585de5eb266531e16',
+  'pdfium_revision': '92627618a93720c6153828b8a8d1c6ed17c6e91f',
   # 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.
@@ -97,7 +97,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
-  'freetype_revision': '1ad07c1c79841e54ff3d5c37e28bfb91f402ee84',
+  'freetype_revision': '6f2b6f8f72ffb5017ab00fca83185b21f1a9f56d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 623ac1a4..dd20532f2 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -2191,6 +2191,7 @@
     "threading/thread_id_name_manager_unittest.cc",
     "threading/thread_local_storage_unittest.cc",
     "threading/thread_local_unittest.cc",
+    "threading/thread_restrictions_unittest.cc",
     "threading/thread_task_runner_handle_unittest.cc",
     "threading/thread_unittest.cc",
     "threading/watchdog_unittest.cc",
@@ -2716,7 +2717,6 @@
       "test/android/javatests/src/org/chromium/base/test/util/RetryOnFailure.java",
       "test/android/javatests/src/org/chromium/base/test/util/ScalableTimeout.java",
       "test/android/javatests/src/org/chromium/base/test/util/SkipCheck.java",
-      "test/android/javatests/src/org/chromium/base/test/util/ScreenShooter.java",
       "test/android/javatests/src/org/chromium/base/test/util/TestFileUtil.java",
       "test/android/javatests/src/org/chromium/base/test/util/TestThread.java",
       "test/android/javatests/src/org/chromium/base/test/util/TimeoutScale.java",
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/ScreenShooter.java b/base/test/android/javatests/src/org/chromium/base/test/util/ScreenShooter.java
deleted file mode 100644
index 99c2bf1..0000000
--- a/base/test/android/javatests/src/org/chromium/base/test/util/ScreenShooter.java
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.base.test.util;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import android.app.Instrumentation;
-import android.content.res.Configuration;
-import android.graphics.Point;
-import android.os.Build;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.uiautomator.UiDevice;
-
-import org.junit.rules.TestWatcher;
-import org.junit.runner.Description;
-
-import java.io.File;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.util.Locale;
-
-/**
- * Rule for taking screen shots within tests. Screenshots are saved as
- * UiCapture/<test class directory>/<test directory>/<shot name>.png.
- *
- * <test class directory> and <test directory> can both the set by the @ScreenShooter.Directory
- * annotation. <test class directory> defaults to nothing (i.e. no directory created at this
- * level), and <test directory> defaults to the name of the individual test.
- *
- * A simple example:
- *
- * <pre>
- * {
- * @RunWith(ChromeJUnit4ClassRunner.class)
- * @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
- * @Restriction(RESTRICTION_TYPE_PHONE) // Tab switcher button only exists on phones.
- * @ScreenShooter.Directory("Example")
- * public class ExampleUiCaptureTest {
- *     @Rule
- *     public ChromeActivityTestRule<ChromeTabbedActivity> mActivityTestRule =
- *             new ChromeActivityTestRule<>(ChromeTabbedActivity.class);
- *
- *     @Rule
- *     public ScreenShooter mScreenShooter = new ScreenShooter();
- *
- *     @Before
- *     public void setUp() throws InterruptedException {
- *         mActivityTestRule.startMainActivityFromLauncher();
- *     }
- *
- *     // Capture the New Tab Page and the tab switcher.
- *     @Test
- *     @SmallTest
- *     @Feature({"UiCatalogue"})
- *     @ScreenShooter.Directory("TabSwitcher")
- *     public void testCaptureTabSwitcher() throws IOException, InterruptedException {
- *         mScreenShooter.shoot("NTP");
- *         Espresso.onView(ViewMatchers.withId(R.id.tab_switcher_button)).
- *                      perform(ViewActions.click());
- *         mScreenShooter.shoot("Tab switcher");
- *     }
- * }
- * }
- * </pre>
- */
-public class ScreenShooter extends TestWatcher {
-    private static final String SCREENSHOT_DIR =
-            "org.chromium.base.test.util.Screenshooter.ScreenshotDir";
-    private final Instrumentation mInstrumentation;
-    private final UiDevice mDevice;
-    private final String mBaseDir;
-    private final String mModel;
-    private File mDir;
-
-    @Retention(RetentionPolicy.RUNTIME)
-    @Target({ElementType.TYPE, ElementType.METHOD})
-    public @interface Directory {
-        String value();
-    }
-
-    public ScreenShooter() {
-        mInstrumentation = InstrumentationRegistry.getInstrumentation();
-        mDevice = UiDevice.getInstance(mInstrumentation);
-        mBaseDir = InstrumentationRegistry.getArguments().getString(SCREENSHOT_DIR);
-        mModel = getModelName();
-    }
-
-    @Override
-    protected void starting(Description d) {
-        mDir = new File(mBaseDir);
-        Class<?> testClass = d.getTestClass();
-        Directory classDirectoryAnnotation = testClass.getAnnotation(Directory.class);
-        String classDirName = classDirectoryAnnotation == null ? ""
-                : classDirectoryAnnotation.value();
-        if (!classDirName.isEmpty()) mDir = new File(mBaseDir, classDirName);
-        Directory methodDirectoryAnnotation = d.getAnnotation(Directory.class);
-        String testMethodDir = methodDirectoryAnnotation == null ? d.getMethodName()
-                : methodDirectoryAnnotation.value();
-        if (!testMethodDir.isEmpty()) mDir = new File(mDir, testMethodDir);
-        if (!mDir.exists()) assertTrue("Create screenshot directory", mDir.mkdirs());
-    }
-
-    /**
-     * Take a screen shot and save it to a file.
-     *
-     * @param shotName The name of this particular screenshot within this test. This will be used to
-     *            name the image file.
-     */
-    public void shoot(String shotName) {
-        assertNotNull("ScreenShooter rule initialized", mDir);
-        assertTrue("Screenshot " + shotName,
-                mDevice.takeScreenshot(new File(mDir, imageName(shotName))));
-    }
-
-    private String getModelName() {
-        String model = Build.MODEL.replace(' ', '_');
-        // Emulator model names are "SDK_built_for_x86" or similar, so use something more useful
-        if (model.toUpperCase(Locale.ROOT).contains("SDK")) {
-            Point displaySize = mDevice.getDisplaySizeDp();
-            // Make sure we have a consistent name whatever the orientation.
-            if (InstrumentationRegistry.getContext().getResources()
-                    .getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
-                model = "Emulator_" + displaySize.y + '_' + displaySize.x;
-            } else {
-                model = "Emulator_" + displaySize.x + '_' + displaySize.y;
-            }
-        }
-        return model;
-    }
-
-    private String imageName(String shotName) {
-        int orientation =
-                InstrumentationRegistry.getContext().getResources().getConfiguration().orientation;
-        String orientationName =
-                orientation == Configuration.ORIENTATION_LANDSCAPE ? "landscape" : "portrait";
-        return String.format("%s.%s.%s.png", shotName, mModel, orientationName);
-    }
-}
diff --git a/base/threading/thread_restrictions.cc b/base/threading/thread_restrictions.cc
index b6563d58..066453f 100644
--- a/base/threading/thread_restrictions.cc
+++ b/base/threading/thread_restrictions.cc
@@ -14,35 +14,120 @@
 
 namespace {
 
-LazyInstance<ThreadLocalBoolean>::Leaky
-    g_io_disallowed = LAZY_INSTANCE_INITIALIZER;
+LazyInstance<ThreadLocalBoolean>::Leaky g_blocking_disallowed =
+    LAZY_INSTANCE_INITIALIZER;
 
 LazyInstance<ThreadLocalBoolean>::Leaky
     g_singleton_disallowed = LAZY_INSTANCE_INITIALIZER;
 
-LazyInstance<ThreadLocalBoolean>::Leaky
-    g_wait_disallowed = LAZY_INSTANCE_INITIALIZER;
+LazyInstance<ThreadLocalBoolean>::Leaky g_base_sync_primitives_disallowed =
+    LAZY_INSTANCE_INITIALIZER;
 
 }  // namespace
 
+void AssertBlockingAllowed() {
+  DCHECK(!g_blocking_disallowed.Get().Get())
+      << "Function marked as blocking was called from a scope that disallows "
+         "blocking! If this task is running inside the TaskScheduler, it needs "
+         "to have MayBlock() in its TaskTraits. Otherwise, consider making "
+         "this blocking work asynchronous or, as a last resort, you may use "
+         "ScopedAllowBlocking in a narrow scope.";
+}
+
+void DisallowBlocking() {
+  g_blocking_disallowed.Get().Set(true);
+}
+
+ScopedDisallowBlocking::ScopedDisallowBlocking()
+    : was_disallowed_(g_blocking_disallowed.Get().Get()) {
+  g_blocking_disallowed.Get().Set(true);
+}
+
+ScopedDisallowBlocking::~ScopedDisallowBlocking() {
+  DCHECK(g_blocking_disallowed.Get().Get());
+  g_blocking_disallowed.Get().Set(was_disallowed_);
+}
+
+ScopedAllowBlocking::ScopedAllowBlocking()
+    : was_disallowed_(g_blocking_disallowed.Get().Get()) {
+  g_blocking_disallowed.Get().Set(false);
+}
+
+ScopedAllowBlocking::~ScopedAllowBlocking() {
+  DCHECK(!g_blocking_disallowed.Get().Get());
+  g_blocking_disallowed.Get().Set(was_disallowed_);
+}
+
+void DisallowBaseSyncPrimitives() {
+  g_base_sync_primitives_disallowed.Get().Set(true);
+}
+
+ScopedAllowBaseSyncPrimitives::ScopedAllowBaseSyncPrimitives()
+    : was_disallowed_(g_base_sync_primitives_disallowed.Get().Get()) {
+  DCHECK(!g_blocking_disallowed.Get().Get())
+      << "To allow //base sync primitives in a scope where blocking is "
+         "disallowed use ScopedAllowBaseSyncPrimitivesOutsideBlockingScope.";
+  g_base_sync_primitives_disallowed.Get().Set(false);
+}
+
+ScopedAllowBaseSyncPrimitives::~ScopedAllowBaseSyncPrimitives() {
+  DCHECK(!g_base_sync_primitives_disallowed.Get().Get());
+  g_base_sync_primitives_disallowed.Get().Set(was_disallowed_);
+}
+
+ScopedAllowBaseSyncPrimitivesOutsideBlockingScope::
+    ScopedAllowBaseSyncPrimitivesOutsideBlockingScope()
+    : was_disallowed_(g_base_sync_primitives_disallowed.Get().Get()) {
+  g_base_sync_primitives_disallowed.Get().Set(false);
+}
+
+ScopedAllowBaseSyncPrimitivesOutsideBlockingScope::
+    ~ScopedAllowBaseSyncPrimitivesOutsideBlockingScope() {
+  DCHECK(!g_base_sync_primitives_disallowed.Get().Get());
+  g_base_sync_primitives_disallowed.Get().Set(was_disallowed_);
+}
+
+ScopedAllowBaseSyncPrimitivesForTesting::
+    ScopedAllowBaseSyncPrimitivesForTesting()
+    : was_disallowed_(g_base_sync_primitives_disallowed.Get().Get()) {
+  g_base_sync_primitives_disallowed.Get().Set(false);
+}
+
+ScopedAllowBaseSyncPrimitivesForTesting::
+    ~ScopedAllowBaseSyncPrimitivesForTesting() {
+  DCHECK(!g_base_sync_primitives_disallowed.Get().Get());
+  g_base_sync_primitives_disallowed.Get().Set(was_disallowed_);
+}
+
+namespace internal {
+
+void AssertBaseSyncPrimitivesAllowed() {
+  DCHECK(!g_base_sync_primitives_disallowed.Get().Get())
+      << "Waiting on a //base sync primitive is not allowed on this thread to "
+         "prevent jank and deadlock. If waiting on a //base sync primitive is "
+         "unavoidable, do it within the scope of a "
+         "ScopedAllowBaseSyncPrimitives. If in a test, "
+         "use ScopedAllowBaseSyncPrimitivesForTesting.";
+}
+
+void ResetThreadRestrictionsForTesting() {
+  g_blocking_disallowed.Get().Set(false);
+  g_singleton_disallowed.Get().Set(false);
+  g_base_sync_primitives_disallowed.Get().Set(false);
+}
+
+}  // namespace internal
+
 // static
 bool ThreadRestrictions::SetIOAllowed(bool allowed) {
-  bool previous_disallowed = g_io_disallowed.Get().Get();
-  g_io_disallowed.Get().Set(!allowed);
+  bool previous_disallowed = g_blocking_disallowed.Get().Get();
+  g_blocking_disallowed.Get().Set(!allowed);
   return !previous_disallowed;
 }
 
 // static
 void ThreadRestrictions::AssertIOAllowed() {
-  if (g_io_disallowed.Get().Get()) {
-    NOTREACHED() << "Function marked as IO-only was called from a thread that "
-                    "disallows IO!  If this thread really should be allowed to "
-                    "make IO calls, adjust the call to "
-                    "base::ThreadRestrictions::SetIOAllowed() in this thread's "
-                    "startup.  If this task is running inside the "
-                    "TaskScheduler, the TaskRunner used to post it needs to "
-                    "have MayBlock() in its TaskTraits.";
-  }
+  AssertBlockingAllowed();
 }
 
 // static
@@ -68,22 +153,17 @@
 
 // static
 void ThreadRestrictions::DisallowWaiting() {
-  g_wait_disallowed.Get().Set(true);
+  DisallowBaseSyncPrimitives();
 }
 
 // static
 void ThreadRestrictions::AssertWaitAllowed() {
-  if (g_wait_disallowed.Get().Get()) {
-    NOTREACHED() << "Waiting is not allowed to be used on this thread to "
-                 << "prevent jank and deadlock.  If this task is running "
-                    "inside the TaskScheduler, the TaskRunner used to post it "
-                    "needs to have WithBaseSyncPrimitives() in its TaskTraits.";
-  }
+  internal::AssertBaseSyncPrimitivesAllowed();
 }
 
 bool ThreadRestrictions::SetWaitAllowed(bool allowed) {
-  bool previous_disallowed = g_wait_disallowed.Get().Get();
-  g_wait_disallowed.Get().Set(!allowed);
+  bool previous_disallowed = g_base_sync_primitives_disallowed.Get().Get();
+  g_base_sync_primitives_disallowed.Get().Set(!allowed);
   return !previous_disallowed;
 }
 
diff --git a/base/threading/thread_restrictions.h b/base/threading/thread_restrictions.h
index c669e181..dd916f2 100644
--- a/base/threading/thread_restrictions.h
+++ b/base/threading/thread_restrictions.h
@@ -6,6 +6,7 @@
 #define BASE_THREADING_THREAD_RESTRICTIONS_H_
 
 #include "base/base_export.h"
+#include "base/gtest_prod_util.h"
 #include "base/logging.h"
 #include "base/macros.h"
 
@@ -108,6 +109,168 @@
 class Thread;
 class ThreadTestHelper;
 
+#if DCHECK_IS_ON()
+#define INLINE_IF_DCHECK_IS_OFF BASE_EXPORT
+#define EMPTY_BODY_IF_DCHECK_IS_OFF
+#else
+#define INLINE_IF_DCHECK_IS_OFF inline
+#define EMPTY_BODY_IF_DCHECK_IS_OFF \
+  {}
+#endif
+
+// A "blocking call" refers to any call that causes the calling thread to wait
+// off-CPU. It includes but is not limited to calls that wait on synchronous
+// file I/O operations: read or write a file from disk, interact with a pipe or
+// a socket, rename or delete a file, enumerate files in a directory, etc.
+// Acquiring a low contention lock is not considered a blocking call.
+
+// Asserts that blocking calls are allowed in the current scope.
+INLINE_IF_DCHECK_IS_OFF void AssertBlockingAllowed()
+    EMPTY_BODY_IF_DCHECK_IS_OFF;
+
+// Disallows blocking on the current thread.
+INLINE_IF_DCHECK_IS_OFF void DisallowBlocking() EMPTY_BODY_IF_DCHECK_IS_OFF;
+
+// Disallows blocking calls within its scope.
+class BASE_EXPORT ScopedDisallowBlocking {
+ public:
+  ScopedDisallowBlocking() EMPTY_BODY_IF_DCHECK_IS_OFF;
+  ~ScopedDisallowBlocking() EMPTY_BODY_IF_DCHECK_IS_OFF;
+
+ private:
+#if DCHECK_IS_ON()
+  const bool was_disallowed_;
+#endif
+
+  DISALLOW_COPY_AND_ASSIGN(ScopedDisallowBlocking);
+};
+
+// ScopedAllowBlocking(ForTesting) allow blocking calls within a scope where
+// they are normally disallowed.
+//
+// Avoid using this. Prefer making blocking calls from tasks posted to
+// base::TaskScheduler with base::MayBlock().
+class BASE_EXPORT ScopedAllowBlocking {
+ private:
+  // This can only be instantiated by friends. Use ScopedAllowBlockingForTesting
+  // in unit tests to avoid the friend requirement.
+  FRIEND_TEST_ALL_PREFIXES(ThreadRestrictionsTest, ScopedAllowBlocking);
+  friend class ScopedAllowBlockingForTesting;
+
+  ScopedAllowBlocking() EMPTY_BODY_IF_DCHECK_IS_OFF;
+  ~ScopedAllowBlocking() EMPTY_BODY_IF_DCHECK_IS_OFF;
+
+#if DCHECK_IS_ON()
+  const bool was_disallowed_;
+#endif
+
+  DISALLOW_COPY_AND_ASSIGN(ScopedAllowBlocking);
+};
+
+class ScopedAllowBlockingForTesting {
+ public:
+  ScopedAllowBlockingForTesting() {}
+  ~ScopedAllowBlockingForTesting() {}
+
+ private:
+#if DCHECK_IS_ON()
+  ScopedAllowBlocking scoped_allow_blocking_;
+#endif
+
+  DISALLOW_COPY_AND_ASSIGN(ScopedAllowBlockingForTesting);
+};
+
+// "Waiting on a //base sync primitive" refers to calling
+// base::WaitableEvent::*Wait* or base::ConditionVariable::*Wait*.
+
+// Disallows waiting on a //base sync primitive on the current thread.
+INLINE_IF_DCHECK_IS_OFF void DisallowBaseSyncPrimitives()
+    EMPTY_BODY_IF_DCHECK_IS_OFF;
+
+// ScopedAllowBaseSyncPrimitives(ForTesting)(OutsideBlockingScope) allow waiting
+// on a //base sync primitive within a scope where this is normally disallowed.
+//
+// Avoid using this. Instead of waiting on a WaitableEvent or a
+// ConditionVariable, put the work that should happen after the wait in a
+// callback and post that callback from where the WaitableEvent or
+// ConditionVariable would have been signaled. If something needs to be
+// scheduled after many tasks have executed, use base::BarrierClosure.
+
+// This can only be used in a scope where blocking is allowed.
+class BASE_EXPORT ScopedAllowBaseSyncPrimitives {
+ private:
+  // This can only be instantiated by friends. Use
+  // ScopedAllowBaseSyncPrimitivesForTesting in unit tests to avoid the friend
+  // requirement.
+  FRIEND_TEST_ALL_PREFIXES(ThreadRestrictionsTest,
+                           ScopedAllowBaseSyncPrimitives);
+  FRIEND_TEST_ALL_PREFIXES(ThreadRestrictionsTest,
+                           ScopedAllowBaseSyncPrimitivesResetsState);
+  FRIEND_TEST_ALL_PREFIXES(ThreadRestrictionsTest,
+                           ScopedAllowBaseSyncPrimitivesWithBlockingDisallowed);
+
+  ScopedAllowBaseSyncPrimitives() EMPTY_BODY_IF_DCHECK_IS_OFF;
+  ~ScopedAllowBaseSyncPrimitives() EMPTY_BODY_IF_DCHECK_IS_OFF;
+
+#if DCHECK_IS_ON()
+  const bool was_disallowed_;
+#endif
+
+  DISALLOW_COPY_AND_ASSIGN(ScopedAllowBaseSyncPrimitives);
+};
+
+// This can be used in a scope where blocking is disallowed.
+class BASE_EXPORT ScopedAllowBaseSyncPrimitivesOutsideBlockingScope {
+ private:
+  // This can only be instantiated by friends. Use
+  // ScopedAllowBaseSyncPrimitivesForTesting in unit tests to avoid the friend
+  // requirement.
+  FRIEND_TEST_ALL_PREFIXES(ThreadRestrictionsTest,
+                           ScopedAllowBaseSyncPrimitivesOutsideBlockingScope);
+  FRIEND_TEST_ALL_PREFIXES(
+      ThreadRestrictionsTest,
+      ScopedAllowBaseSyncPrimitivesOutsideBlockingScopeResetsState);
+
+  ScopedAllowBaseSyncPrimitivesOutsideBlockingScope()
+      EMPTY_BODY_IF_DCHECK_IS_OFF;
+  ~ScopedAllowBaseSyncPrimitivesOutsideBlockingScope()
+      EMPTY_BODY_IF_DCHECK_IS_OFF;
+
+#if DCHECK_IS_ON()
+  const bool was_disallowed_;
+#endif
+
+  DISALLOW_COPY_AND_ASSIGN(ScopedAllowBaseSyncPrimitivesOutsideBlockingScope);
+};
+
+// This can be used in tests without being a friend of
+// ScopedAllowBaseSyncPrimitives(OutsideBlockingScope).
+class BASE_EXPORT ScopedAllowBaseSyncPrimitivesForTesting {
+ public:
+  ScopedAllowBaseSyncPrimitivesForTesting() EMPTY_BODY_IF_DCHECK_IS_OFF;
+  ~ScopedAllowBaseSyncPrimitivesForTesting() EMPTY_BODY_IF_DCHECK_IS_OFF;
+
+ private:
+#if DCHECK_IS_ON()
+  const bool was_disallowed_;
+#endif
+
+  DISALLOW_COPY_AND_ASSIGN(ScopedAllowBaseSyncPrimitivesForTesting);
+};
+
+namespace internal {
+
+// Asserts that waiting on a //base sync primitive is allowed in the current
+// scope.
+INLINE_IF_DCHECK_IS_OFF void AssertBaseSyncPrimitivesAllowed()
+    EMPTY_BODY_IF_DCHECK_IS_OFF;
+
+// Resets all thread restrictions on the current thread.
+INLINE_IF_DCHECK_IS_OFF void ResetThreadRestrictionsForTesting()
+    EMPTY_BODY_IF_DCHECK_IS_OFF;
+
+}  // namespace internal
+
 // Certain behavior is disallowed on certain threads.  ThreadRestrictions helps
 // enforce these rules.  Examples of such rules:
 //
@@ -138,6 +301,8 @@
  public:
   // Constructing a ScopedAllowIO temporarily allows IO for the current
   // thread.  Doing this is almost certainly always incorrect.
+  //
+  // DEPRECATED. Use ScopedAllowBlocking(ForTesting).
   class BASE_EXPORT ScopedAllowIO {
    public:
     ScopedAllowIO() { previous_value_ = SetIOAllowed(true); }
@@ -153,11 +318,15 @@
   // Set whether the current thread to make IO calls.
   // Threads start out in the *allowed* state.
   // Returns the previous value.
+  //
+  // DEPRECATED. Use ScopedAllowBlocking(ForTesting) or ScopedDisallowBlocking.
   static bool SetIOAllowed(bool allowed);
 
   // Check whether the current thread is allowed to make IO calls,
   // and DCHECK if not.  See the block comment above the class for
   // a discussion of where to add these checks.
+  //
+  // DEPRECATED. Use AssertBlockingAllowed.
   static void AssertIOAllowed();
 
   // Set whether the current thread can use singletons.  Returns the previous
@@ -170,9 +339,13 @@
 
   // Disable waiting on the current thread. Threads start out in the *allowed*
   // state. Returns the previous value.
+  //
+  // DEPRECATED. Use DisallowBaseSyncPrimitives.
   static void DisallowWaiting();
 
   // Check whether the current thread is allowed to wait, and DCHECK if not.
+  //
+  // DEPRECATED. Use AssertBaseSyncPrimitivesAllowed.
   static void AssertWaitAllowed();
 #else
   // Inline the empty definitions of these functions so that they can be
@@ -247,6 +420,7 @@
 // END USAGE THAT NEEDS TO BE FIXED.
 
 #if DCHECK_IS_ON()
+  // DEPRECATED. Use ScopedAllowBaseSyncPrimitives.
   static bool SetWaitAllowed(bool allowed);
 #else
   static bool SetWaitAllowed(bool allowed) { return true; }
@@ -256,6 +430,8 @@
   // thread.  Doing this is almost always incorrect, which is why we limit who
   // can use this through friend. If you find yourself needing to use this, find
   // another way. Talk to jam or brettw.
+  //
+  // DEPRECATED. Use ScopedAllowBaseSyncPrimitives.
   class BASE_EXPORT ScopedAllowWait {
    public:
     ScopedAllowWait() { previous_value_ = SetWaitAllowed(true); }
diff --git a/base/threading/thread_restrictions_unittest.cc b/base/threading/thread_restrictions_unittest.cc
new file mode 100644
index 0000000..a957a9a
--- /dev/null
+++ b/base/threading/thread_restrictions_unittest.cc
@@ -0,0 +1,137 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/threading/thread_restrictions.h"
+
+#include <utility>
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/macros.h"
+#include "base/test/gtest_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace base {
+
+namespace {
+
+class ThreadRestrictionsTest : public testing::Test {
+ public:
+  ThreadRestrictionsTest() = default;
+  ~ThreadRestrictionsTest() override {
+    internal::ResetThreadRestrictionsForTesting();
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ThreadRestrictionsTest);
+};
+
+}  // namespace
+
+TEST_F(ThreadRestrictionsTest, BlockingAllowedByDefault) {
+  AssertBlockingAllowed();
+}
+
+TEST_F(ThreadRestrictionsTest, ScopedDisallowBlocking) {
+  {
+    ScopedDisallowBlocking scoped_disallow_blocking;
+    EXPECT_DCHECK_DEATH({ AssertBlockingAllowed(); });
+  }
+  AssertBlockingAllowed();
+}
+
+TEST_F(ThreadRestrictionsTest, ScopedAllowBlocking) {
+  ScopedDisallowBlocking scoped_disallow_blocking;
+  {
+    ScopedAllowBlocking scoped_allow_blocking;
+    AssertBlockingAllowed();
+  }
+  EXPECT_DCHECK_DEATH({ AssertBlockingAllowed(); });
+}
+
+TEST_F(ThreadRestrictionsTest, ScopedAllowBlockingForTesting) {
+  ScopedDisallowBlocking scoped_disallow_blocking;
+  {
+    ScopedAllowBlockingForTesting scoped_allow_blocking_for_testing;
+    AssertBlockingAllowed();
+  }
+  EXPECT_DCHECK_DEATH({ AssertBlockingAllowed(); });
+}
+
+TEST_F(ThreadRestrictionsTest, BaseSyncPrimitivesAllowedByDefault) {}
+
+TEST_F(ThreadRestrictionsTest, DisallowBaseSyncPrimitives) {
+  DisallowBaseSyncPrimitives();
+  EXPECT_DCHECK_DEATH({ internal::AssertBaseSyncPrimitivesAllowed(); });
+}
+
+TEST_F(ThreadRestrictionsTest, ScopedAllowBaseSyncPrimitives) {
+  DisallowBaseSyncPrimitives();
+  ScopedAllowBaseSyncPrimitives scoped_allow_base_sync_primitives;
+  internal::AssertBaseSyncPrimitivesAllowed();
+}
+
+TEST_F(ThreadRestrictionsTest, ScopedAllowBaseSyncPrimitivesResetsState) {
+  DisallowBaseSyncPrimitives();
+  { ScopedAllowBaseSyncPrimitives scoped_allow_base_sync_primitives; }
+  EXPECT_DCHECK_DEATH({ internal::AssertBaseSyncPrimitivesAllowed(); });
+}
+
+TEST_F(ThreadRestrictionsTest,
+       ScopedAllowBaseSyncPrimitivesWithBlockingDisallowed) {
+  ScopedDisallowBlocking scoped_disallow_blocking;
+  DisallowBaseSyncPrimitives();
+
+  // This should DCHECK because blocking is not allowed in this scope
+  // and OutsideBlockingScope is not passed to the constructor.
+  EXPECT_DCHECK_DEATH(
+      { ScopedAllowBaseSyncPrimitives scoped_allow_base_sync_primitives; });
+}
+
+TEST_F(ThreadRestrictionsTest,
+       ScopedAllowBaseSyncPrimitivesOutsideBlockingScope) {
+  ScopedDisallowBlocking scoped_disallow_blocking;
+  DisallowBaseSyncPrimitives();
+  ScopedAllowBaseSyncPrimitivesOutsideBlockingScope
+      scoped_allow_base_sync_primitives;
+  internal::AssertBaseSyncPrimitivesAllowed();
+}
+
+TEST_F(ThreadRestrictionsTest,
+       ScopedAllowBaseSyncPrimitivesOutsideBlockingScopeResetsState) {
+  DisallowBaseSyncPrimitives();
+  {
+    ScopedAllowBaseSyncPrimitivesOutsideBlockingScope
+        scoped_allow_base_sync_primitives;
+  }
+  EXPECT_DCHECK_DEATH({ internal::AssertBaseSyncPrimitivesAllowed(); });
+}
+
+TEST_F(ThreadRestrictionsTest, ScopedAllowBaseSyncPrimitivesForTesting) {
+  DisallowBaseSyncPrimitives();
+  ScopedAllowBaseSyncPrimitivesForTesting
+      scoped_allow_base_sync_primitives_for_testing;
+  internal::AssertBaseSyncPrimitivesAllowed();
+}
+
+TEST_F(ThreadRestrictionsTest,
+       ScopedAllowBaseSyncPrimitivesForTestingResetsState) {
+  DisallowBaseSyncPrimitives();
+  {
+    ScopedAllowBaseSyncPrimitivesForTesting
+        scoped_allow_base_sync_primitives_for_testing;
+  }
+  EXPECT_DCHECK_DEATH({ internal::AssertBaseSyncPrimitivesAllowed(); });
+}
+
+TEST_F(ThreadRestrictionsTest,
+       ScopedAllowBaseSyncPrimitivesForTestingWithBlockingDisallowed) {
+  ScopedDisallowBlocking scoped_disallow_blocking;
+  DisallowBaseSyncPrimitives();
+  // This should not DCHECK.
+  ScopedAllowBaseSyncPrimitivesForTesting
+      scoped_allow_base_sync_primitives_for_testing;
+}
+
+}  // namespace base
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
index e2391d3..1d269d4 100644
--- a/chrome/android/java_sources.gni
+++ b/chrome/android/java_sources.gni
@@ -1714,6 +1714,7 @@
   "javatests/src/org/chromium/chrome/browser/test/ChromeBrowserTestRule.java",
   "javatests/src/org/chromium/chrome/browser/test/ClearAppDataTestRule.java",
   "javatests/src/org/chromium/chrome/browser/test/CommandLineInitRule.java",
+  "javatests/src/org/chromium/chrome/browser/test/ScreenShooter.java",
   "javatests/src/org/chromium/chrome/browser/toolbar/BrandColorTest.java",
   "javatests/src/org/chromium/chrome/browser/toolbar/ToolbarModelTest.java",
   "javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ExampleUiCaptureTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ExampleUiCaptureTest.java
index b35a064..25ab8c5 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/ExampleUiCaptureTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ExampleUiCaptureTest.java
@@ -17,8 +17,8 @@
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.Restriction;
-import org.chromium.base.test.util.ScreenShooter;
 import org.chromium.chrome.R;
+import org.chromium.chrome.browser.test.ScreenShooter;
 import org.chromium.chrome.test.ChromeActivityTestRule;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.ui.test.util.UiRestriction;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarAppearanceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarAppearanceTest.java
index ff1988c..ec0e713e 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarAppearanceTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarAppearanceTest.java
@@ -15,12 +15,12 @@
 import org.chromium.base.test.util.CallbackHelper;
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Feature;
-import org.chromium.base.test.util.ScreenShooter;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.ChromeSwitches;
 import org.chromium.chrome.browser.interventions.FramebustBlockMessageDelegate;
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.test.ScreenShooter;
 import org.chromium.chrome.test.ChromeActivityTestRule;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.util.InfoBarTestAnimationListener;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NewTabPageUiCaptureTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NewTabPageUiCaptureTest.java
index 1f3348b..3a1b0c1 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NewTabPageUiCaptureTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NewTabPageUiCaptureTest.java
@@ -19,11 +19,11 @@
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.RetryOnFailure;
-import org.chromium.base.test.util.ScreenShooter;
 import org.chromium.chrome.browser.ChromeSwitches;
 import org.chromium.chrome.browser.UrlConstants;
 import org.chromium.chrome.browser.ntp.cards.NewTabPageRecyclerView;
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.test.ScreenShooter;
 import org.chromium.chrome.test.ChromeActivityTestRule;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetTilesUiCaptureTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetTilesUiCaptureTest.java
index 22bd607..7400966 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetTilesUiCaptureTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetTilesUiCaptureTest.java
@@ -19,9 +19,9 @@
 
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.Restriction;
-import org.chromium.base.test.util.ScreenShooter;
 import org.chromium.chrome.browser.ntp.NtpUiCaptureTestData;
 import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
+import org.chromium.chrome.browser.test.ScreenShooter;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
 import org.chromium.chrome.test.BottomSheetTestRule;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetUiCaptureTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetUiCaptureTest.java
index 232ccfb..d0ef0bb 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetUiCaptureTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetUiCaptureTest.java
@@ -20,12 +20,12 @@
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.Restriction;
-import org.chromium.base.test.util.ScreenShooter;
 import org.chromium.base.test.util.parameter.CommandLineParameter;
 import org.chromium.chrome.browser.ChromeFeatureList;
 import org.chromium.chrome.browser.ntp.NtpUiCaptureTestData;
 import org.chromium.chrome.browser.ntp.cards.ItemViewType;
 import org.chromium.chrome.browser.ntp.cards.NewTabPageAdapter;
+import org.chromium.chrome.browser.test.ScreenShooter;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.util.browser.ChromeHome;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetUiCaptureTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetUiCaptureTest.java
index 44d88d20..c1e108c 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetUiCaptureTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetUiCaptureTest.java
@@ -20,11 +20,11 @@
 
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.Restriction;
-import org.chromium.base.test.util.ScreenShooter;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ntp.NtpUiCaptureTestData;
 import org.chromium.chrome.browser.ntp.cards.ItemViewType;
 import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
+import org.chromium.chrome.browser.test.ScreenShooter;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.util.browser.suggestions.FakeSuggestionsSource;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/test/ScreenShooter.java b/chrome/android/javatests/src/org/chromium/chrome/browser/test/ScreenShooter.java
new file mode 100644
index 0000000..38d02f4
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/test/ScreenShooter.java
@@ -0,0 +1,248 @@
+// 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.chrome.browser.test;
+
+import static org.hamcrest.Matchers.isIn;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import android.app.Instrumentation;
+import android.content.res.Configuration;
+import android.graphics.Point;
+import android.os.Build;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.uiautomator.UiDevice;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
+
+import org.chromium.chrome.browser.ChromeVersionInfo;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * Rule for taking screen shots within tests. Screenshots are saved as
+ * {@code screenshot_dir/test_class_directory/test_directory/shot_name random.png}.
+ * The associated JSON file describing the screenshot is saved as
+ * {@code screenshot_dir/test_class_directory/test_directory/shot_name random.json}.
+ * <p>
+ * {@code screenshot_dir} comes from the instrumentation test command line, which is set by the
+ * test runners. {@code test_class_directory} and {@code test_directory} can both the set by the
+ * {@link ScreenShooter.Directory} annotation. {@code test_class_directory} defaults to nothing
+ * (i.e. no directory created at this level), and {@code test_directory} defaults to the name of
+ * the individual test. {@code random} is a random value to make the filenames unique.
+ * <p>
+ * The JSON file contains tags and metadata describing the screenshot. The tags are fields such as
+ * the shot name or the test name that may be used to filter screenshot sets in the Clank UI
+ * Catalogue viewer. The metadata fields contain data (such as the exact time the shot was
+ * taken) that are less suitable for filtering screenshot sets, but nevertheless may be of
+ * interest to people viewing the screenshots.
+ * <p>
+ * A simple example:
+ * <p>
+ * <pre>
+ * {@code
+ * &#064;RunWith(ChromeJUnit4ClassRunner.class)
+ * &#064;CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
+ * &#064;Restriction(RESTRICTION_TYPE_PHONE) // Tab switcher button only exists on phones.
+ * &#064;ScreenShooter.Directory("Example")
+ * public class ExampleUiCaptureTest {
+ *     &#064;Rule
+ *     public ChromeActivityTestRule<ChromeTabbedActivity> mActivityTestRule =
+ *             new ChromeActivityTestRule<>(ChromeTabbedActivity.class);
+ *
+ *     &#064;Rule
+ *     public ScreenShooter mScreenShooter = new ScreenShooter();
+ *
+ *     &#064;Before
+ *     public void setUp() throws InterruptedException {
+ *         mActivityTestRule.startMainActivityFromLauncher();
+ *     }
+ *
+ *     // Capture the New Tab Page and the tab switcher.
+ *     &#064;Test
+ *     &#064;SmallTest
+ *     &#064;Feature({"UiCatalogue"})
+ *     &#064;ScreenShooter.Directory("TabSwitcher")
+ *     public void testCaptureTabSwitcher() throws IOException, InterruptedException {
+ *         mScreenShooter.shoot("NTP");
+ *         Espresso.onView(ViewMatchers.withId(R.id.tab_switcher_button)).
+ *                      perform(ViewActions.click());
+ *         mScreenShooter.shoot("Tab switcher");
+ *     }
+ * }
+ * </pre>
+ */
+public class ScreenShooter extends TestWatcher {
+    private static final String SCREENSHOT_DIR =
+            "org.chromium.base.test.util.Screenshooter.ScreenshotDir";
+    private static final String IMAGE_SUFFIX = ".png";
+    private static final String JSON_SUFFIX = ".json";
+
+    // Default tags
+    private static final String TEST_CLASS_TAG = "Test Class";
+    private static final String TEST_METHOD_TAG = "Test Method";
+    private static final String SCREENSHOT_NAME_TAG = "Screenshot Name";
+    private static final String DEVICE_MODEL_TAG = "Device Model";
+    private static final String DISPLAY_SIZE_TAG = "Display Size";
+    private static final String ORIENTATION_TAG = "Orientation";
+    private static final String ANDROID_VERSION_TAG = "Android Version";
+    private static final String CHROME_VERSION_TAG = "Chrome Version";
+    private static final String CHROME_CHANNEL_TAG = "Chrome Channel";
+    private static final String LOCALE_TAG = "Locale";
+    // UPLOAD_TIME_TAG is reserved for use by the Clank UI Catalogue uploader.
+    private static final String UPLOAD_TIME_TAG = "Upload Time";
+
+    private final UiDevice mDevice;
+    private final String mBaseDir;
+    private File mDir;
+    private String mTestClassName;
+    private String mTestMethodName;
+    private static final String[] DEFAULT_TAGS = {TEST_CLASS_TAG, TEST_METHOD_TAG,
+            SCREENSHOT_NAME_TAG, DEVICE_MODEL_TAG, DISPLAY_SIZE_TAG, ORIENTATION_TAG,
+            ANDROID_VERSION_TAG, CHROME_VERSION_TAG, CHROME_CHANNEL_TAG, LOCALE_TAG,
+            UPLOAD_TIME_TAG};
+
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target({ElementType.TYPE, ElementType.METHOD})
+    public @interface Directory {
+        String value();
+    }
+
+    public ScreenShooter() {
+        Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
+        mDevice = UiDevice.getInstance(instrumentation);
+        mBaseDir = InstrumentationRegistry.getArguments().getString(SCREENSHOT_DIR);
+    }
+
+    @Override
+    protected void starting(Description d) {
+        mDir = new File(mBaseDir);
+        mTestClassName = d.getClassName();
+        mTestMethodName = d.getMethodName();
+        Class<?> testClass = d.getTestClass();
+        Directory classDirectoryAnnotation = testClass.getAnnotation(Directory.class);
+        String classDirName =
+                classDirectoryAnnotation == null ? "" : classDirectoryAnnotation.value();
+        if (!classDirName.isEmpty()) mDir = new File(mBaseDir, classDirName);
+        Directory methodDirectoryAnnotation = d.getAnnotation(Directory.class);
+        String testMethodDir = methodDirectoryAnnotation == null
+                ? d.getMethodName()
+                : methodDirectoryAnnotation.value();
+        if (!testMethodDir.isEmpty()) mDir = new File(mDir, testMethodDir);
+        if (!mDir.exists()) assertTrue("Create screenshot directory", mDir.mkdirs());
+    }
+
+    /**
+     * Take a screenshot and save it to a file, with tags and metadata in a JSON file
+     *
+     * @param shotName The name of this particular screenshot within this test.
+     */
+    public void shoot(String shotName) {
+        assertNotNull("ScreenShooter rule initialized", mDir);
+
+        Map<String, String> tags = new HashMap<>();
+        shoot(shotName, tags);
+    }
+
+    private static void setDefaultTag(Map<String, String> tags, String name, String value) {
+        assertThat("\"" + name + "\" is a known default tag", name, isIn(DEFAULT_TAGS));
+        tags.put(name, value);
+    }
+
+    /**
+     * Take a screenshot and save it to a file, with tags and metadata in a JSON file
+     *
+     * @param shotName The name of this particular screenshot within this test.
+     * @param tags User defined tags, must not clash with default tags.
+     */
+    public void shoot(String shotName, Map<String, String> tags) {
+        for (String tag : tags.keySet()) {
+            assertThat("\"" + tag + "\" is not a default tag", tag, not(isIn(DEFAULT_TAGS)));
+        }
+        setDefaultTag(tags, TEST_CLASS_TAG, mTestClassName);
+        setDefaultTag(tags, TEST_METHOD_TAG, mTestMethodName);
+        setDefaultTag(tags, SCREENSHOT_NAME_TAG, shotName);
+        setDefaultTag(tags, DEVICE_MODEL_TAG, Build.MANUFACTURER + " " + Build.MODEL);
+        Point displaySize = mDevice.getDisplaySizeDp();
+        setDefaultTag(tags, DISPLAY_SIZE_TAG,
+                String.format(Locale.US, "%d X %d", Math.min(displaySize.x, displaySize.y),
+                        Math.max(displaySize.x, displaySize.y)));
+        int orientation =
+                InstrumentationRegistry.getContext().getResources().getConfiguration().orientation;
+        setDefaultTag(tags, ORIENTATION_TAG,
+                orientation == Configuration.ORIENTATION_LANDSCAPE ? "landscape" : "portrait");
+        setDefaultTag(tags, ANDROID_VERSION_TAG, Build.VERSION.RELEASE);
+        setDefaultTag(tags, CHROME_VERSION_TAG,
+                Integer.toString(ChromeVersionInfo.getProductMajorVersion()));
+        String channelName = "Unknown";
+        if (ChromeVersionInfo.isLocalBuild()) {
+            channelName = "Local Build";
+        } else if (ChromeVersionInfo.isCanaryBuild()) {
+            channelName = "Canary";
+        } else if (ChromeVersionInfo.isBetaBuild()) {
+            channelName = "Beta";
+        } else if (ChromeVersionInfo.isDevBuild()) {
+            channelName = "Dev";
+        } else if (ChromeVersionInfo.isStableBuild()) {
+            channelName = "Stable";
+        }
+        if (ChromeVersionInfo.isOfficialBuild()) {
+            channelName = channelName + " Official";
+        }
+        setDefaultTag(tags, CHROME_CHANNEL_TAG, channelName);
+        setDefaultTag(tags, LOCALE_TAG, Locale.getDefault().toString());
+
+        Map<String, String> metadata = new HashMap<>();
+        DateFormat formatter =
+                DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.US);
+        metadata.put("Capture time (UTC)", formatter.format(new Date()));
+        metadata.put("Chrome full product version", ChromeVersionInfo.getProductVersion());
+        metadata.put("Android build fingerprint", Build.FINGERPRINT);
+
+        try {
+            File shotFile = File.createTempFile(shotName, IMAGE_SUFFIX, mDir);
+            assertTrue("Screenshot " + shotName, mDevice.takeScreenshot(shotFile));
+            writeImageDescription(shotFile, tags, metadata);
+        } catch (IOException e) {
+            fail("Cannot create shot files " + e.toString());
+        }
+    }
+
+    private void writeImageDescription(File shotFile, Map<String, String> tags,
+            Map<String, String> metadata) throws IOException {
+        JSONObject imageDescription = new JSONObject();
+        String shotFileName = shotFile.getName();
+        try {
+            imageDescription.put("location", shotFileName);
+            imageDescription.put("tags", new JSONObject(tags));
+            imageDescription.put("metadata", new JSONObject(metadata));
+        } catch (JSONException e) {
+            fail("JSON error " + e.toString());
+        }
+        String jsonFileName =
+                shotFileName.substring(0, shotFileName.length() - IMAGE_SUFFIX.length())
+                + JSON_SUFFIX;
+        try (FileWriter fileWriter = new FileWriter(new File(mDir, jsonFileName));) {
+            fileWriter.write(imageDescription.toString());
+        }
+    }
+}
diff --git a/chrome/browser/android/vr_shell/vr_gl_thread.cc b/chrome/browser/android/vr_shell/vr_gl_thread.cc
index a0c8881..9fafd34c6 100644
--- a/chrome/browser/android/vr_shell/vr_gl_thread.cc
+++ b/chrome/browser/android/vr_shell/vr_gl_thread.cc
@@ -12,8 +12,7 @@
 #include "chrome/browser/android/vr_shell/vr_shell_gl.h"
 #include "chrome/browser/vr/browser_ui_interface.h"
 #include "chrome/browser/vr/toolbar_state.h"
-#include "chrome/browser/vr/ui_scene.h"
-#include "chrome/browser/vr/ui_scene_manager.h"
+#include "chrome/browser/vr/ui.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 
 namespace vr_shell {
@@ -46,28 +45,23 @@
 }
 
 void VrGLThread::Init() {
-  scene_ = base::MakeUnique<vr::UiScene>();
-  vr_shell_gl_ = base::MakeUnique<VrShellGl>(this, gvr_api_, initially_web_vr_,
-                                             reprojected_rendering_,
-                                             daydream_support_, scene_.get());
-  scene_manager_ = base::MakeUnique<vr::UiSceneManager>(
-      this, scene_.get(), vr_shell_gl_.get(), in_cct_, initially_web_vr_,
-      web_vr_autopresentation_expected_);
-  // TODO(cjgrant): Alleviate this circular initialization dependency by moving
-  // ownership of all UI components into a single UI object that can manage its
-  // own initialization.
-  vr_shell_gl_->set_ui(scene_manager_.get());
+  vr::UiInitialState ui_initial_state;
+  ui_initial_state.in_cct = in_cct_;
+  ui_initial_state.in_web_vr = initially_web_vr_;
+  ui_initial_state.web_vr_autopresentation_expected =
+      web_vr_autopresentation_expected_;
 
-  weak_vr_shell_gl_ = vr_shell_gl_->GetWeakPtr();
-  browser_ui_ = scene_manager_->GetWeakPtr();
+  vr_shell_gl_ =
+      base::MakeUnique<VrShellGl>(this, this, ui_initial_state, gvr_api_,
+                                  reprojected_rendering_, daydream_support_);
+
+  browser_ui_ = vr_shell_gl_->GetBrowserUiWeakPtr();
 
   vr_shell_gl_->Initialize();
 }
 
 void VrGLThread::CleanUp() {
-  scene_manager_.reset();
   vr_shell_gl_.reset();
-  scene_.reset();
 }
 
 void VrGLThread::ContentSurfaceChanged(jobject surface) {
diff --git a/chrome/browser/android/vr_shell/vr_gl_thread.h b/chrome/browser/android/vr_shell/vr_gl_thread.h
index f398c3b..912e6be 100644
--- a/chrome/browser/android/vr_shell/vr_gl_thread.h
+++ b/chrome/browser/android/vr_shell/vr_gl_thread.h
@@ -17,11 +17,6 @@
 #include "chrome/browser/vr/ui_interface.h"
 #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr_types.h"
 
-namespace vr {
-class UiScene;
-class UiSceneManager;
-}  // namespace vr
-
 namespace vr_shell {
 
 class VrShell;
@@ -92,13 +87,10 @@
   bool OnGlThread() const;
 
   // Created on GL thread.
-  std::unique_ptr<vr::UiScene> scene_;
-  std::unique_ptr<vr::UiSceneManager> scene_manager_;
   std::unique_ptr<VrShellGl> vr_shell_gl_;
 
   base::WeakPtr<VrShell> weak_vr_shell_;
-  base::WeakPtr<VrShellGl> weak_vr_shell_gl_;
-  base::WeakPtr<BrowserUiInterface> browser_ui_;
+  base::WeakPtr<vr::BrowserUiInterface> browser_ui_;
 
   // This state is used for initializing vr_shell_gl_.
   scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
diff --git a/chrome/browser/android/vr_shell/vr_shell_gl.cc b/chrome/browser/android/vr_shell/vr_shell_gl.cc
index f9abd4d0..f7279755a 100644
--- a/chrome/browser/android/vr_shell/vr_shell_gl.cc
+++ b/chrome/browser/android/vr_shell/vr_shell_gl.cc
@@ -24,6 +24,7 @@
 #include "chrome/browser/android/vr_shell/vr_usage_monitor.h"
 #include "chrome/browser/vr/elements/ui_element.h"
 #include "chrome/browser/vr/fps_meter.h"
+#include "chrome/browser/vr/ui.h"
 #include "chrome/browser/vr/ui_interface.h"
 #include "chrome/browser/vr/ui_scene.h"
 #include "chrome/browser/vr/vr_gl_util.h"
@@ -171,19 +172,19 @@
 
 }  // namespace
 
-VrShellGl::VrShellGl(GlBrowserInterface* browser,
+VrShellGl::VrShellGl(GlBrowserInterface* browser_interface,
+                     vr::UiBrowserInterface* ui_host_interface,
+                     const vr::UiInitialState& ui_initial_state,
                      gvr_context* gvr_api,
-                     bool initially_web_vr,
                      bool reprojected_rendering,
-                     bool daydream_support,
-                     vr::UiScene* scene)
-    : web_vr_mode_(initially_web_vr),
+                     bool daydream_support)
+    : ui_(base::MakeUnique<vr::Ui>(ui_host_interface, this, ui_initial_state)),
+      ui_scene_manager_(ui_->ui()),
       surfaceless_rendering_(reprojected_rendering),
       daydream_support_(daydream_support),
       task_runner_(base::ThreadTaskRunnerHandle::Get()),
       binding_(this),
-      browser_(browser),
-      scene_(scene),
+      browser_(browser_interface),
       fps_meter_(new vr::FPSMeter()),
       webvr_js_time_(new vr::SlidingAverage(kWebVRSlidingAverageSize)),
       webvr_render_time_(new vr::SlidingAverage(kWebVRSlidingAverageSize)),
@@ -192,7 +193,7 @@
 }
 
 VrShellGl::~VrShellGl() {
-  closePresentationBindings();
+  ClosePresentationBindings();
 }
 
 void VrShellGl::Initialize() {
@@ -239,9 +240,9 @@
 
   unsigned int textures[2];
   glGenTextures(2, textures);
-  content_texture_id_ = textures[0];
+  unsigned int content_texture_id = textures[0];
   webvr_texture_id_ = textures[1];
-  content_surface_texture_ = gl::SurfaceTexture::Create(content_texture_id_);
+  content_surface_texture_ = gl::SurfaceTexture::Create(content_texture_id);
   webvr_surface_texture_ = gl::SurfaceTexture::Create(webvr_texture_id_);
   CreateContentSurface();
   content_surface_texture_->SetFrameAvailableCallback(base::Bind(
@@ -253,7 +254,7 @@
 
   InitializeRenderer();
 
-  ui_->OnGlInitialized(content_texture_id_);
+  ui_->OnGlInitialized(content_texture_id);
 
   webvr_vsync_align_ = base::FeatureList::IsEnabled(features::kWebVrVsyncAlign);
 
@@ -264,10 +265,6 @@
                    task_runner_));
   }
 
-  input_manager_ = base::MakeUnique<vr::UiInputManager>(scene_);
-  ui_renderer_ =
-      base::MakeUnique<vr::UiRenderer>(scene_, vr_shell_renderer_.get());
-
   ready_to_draw_ = true;
   if (!paused_)
     OnVSync(base::TimeTicks::Now());
@@ -355,7 +352,7 @@
     device::mojom::VRSubmitFrameClientPtrInfo submit_client_info,
     device::mojom::VRPresentationProviderRequest request,
     device::mojom::VRDisplayInfoPtr display_info) {
-  closePresentationBindings();
+  ClosePresentationBindings();
   submit_client_.Bind(std::move(submit_client_info));
   binding_.Bind(std::move(request));
   gfx::Size webvr_size(
@@ -388,7 +385,7 @@
   TRACE_EVENT1("gpu", "VrShellGl::OnWebVRFrameAvailable", "frame", frame_index);
   pending_frames_.pop();
 
-  ui_->OnWebVrFrameAvailable();
+  ui_scene_manager_->OnWebVrFrameAvailable();
 
   DrawFrame(frame_index);
   if (web_vr_mode_) {
@@ -415,7 +412,7 @@
 }
 
 void VrShellGl::OnWebVrFrameTimedOut() {
-  ui_->OnWebVrTimedOut();
+  ui_scene_manager_->OnWebVrTimedOut();
 }
 
 void VrShellGl::GvrInit(gvr_context* gvr_api) {
@@ -459,8 +456,6 @@
   swap_chain_ =
       base::MakeUnique<gvr::SwapChain>(gvr_api_->CreateSwapChain(specs));
 
-  vr_shell_renderer_ = base::MakeUnique<vr::VrShellRenderer>();
-
   // Allocate a buffer viewport for use in UI drawing. This isn't
   // initialized at this point, it'll be set from other viewport list
   // entries as needed.
@@ -570,7 +565,7 @@
           ? vr::UiInputManager::ButtonState::DOWN
           : vr::UiInputManager::ButtonState::UP;
   controller_info_.opacity = controller_->GetOpacity();
-  input_manager_->HandleInput(
+  ui_->input_manager()->HandleInput(
       controller_direction, controller_info_.laser_origin,
       controller_info_.touchpad_button_state, &gesture_list,
       &controller_info_.target_point, &controller_info_.reticle_render_target);
@@ -721,14 +716,15 @@
         // Post a task, rather than calling the UI directly, so as not to modify
         // UI state in the midst of frame rendering.
         base::ThreadTaskRunnerHandle::Get()->PostTask(
-            FROM_HERE, base::Bind(&vr::UiInterface::OnAppButtonGesturePerformed,
-                                  base::Unretained(ui_), direction));
+            FROM_HERE,
+            base::Bind(&vr::UiInterface::OnAppButtonGesturePerformed,
+                       base::Unretained(ui_scene_manager_), direction));
       }
     }
     if (direction == vr::UiInterface::NONE)
       base::ThreadTaskRunnerHandle::Get()->PostTask(
           FROM_HERE, base::Bind(&vr::UiInterface::OnAppButtonClicked,
-                                base::Unretained(ui_)));
+                                base::Unretained(ui_scene_manager_)));
   }
 }
 
@@ -747,14 +743,6 @@
   // DrawVrShell if needed.
   buffer_viewport_list_->SetToRecommendedBufferViewports();
 
-  // Update recommended fov and uv per frame.
-  buffer_viewport_list_->GetBufferViewport(GVR_LEFT_EYE,
-                                           buffer_viewport_.get());
-  const gvr::Rectf& fov_recommended_left = buffer_viewport_->GetSourceFov();
-  buffer_viewport_list_->GetBufferViewport(GVR_RIGHT_EYE,
-                                           buffer_viewport_.get());
-  const gvr::Rectf& fov_recommended_right = buffer_viewport_->GetSourceFov();
-
   // If needed, resize the primary buffer for use with WebVR. Resizing
   // needs to happen before acquiring a frame.
   if (ShouldDrawWebVr()) {
@@ -847,8 +835,8 @@
   }
 
   // Update the render position of all UI elements (including desktop).
-  scene_->OnBeginFrame(current_time,
-                       GetForwardVector(render_info_primary_.head_pose));
+  ui_scene_manager_->scene()->OnBeginFrame(
+      current_time, GetForwardVector(render_info_primary_.head_pose));
 
   // WebVR handles controller input in OnVsync.
   if (!ShouldDrawWebVr())
@@ -857,24 +845,26 @@
   // Ensure that all elements are ready before drawing. Eg., elements may have
   // been dirtied due to animation on input processing and need to regenerate
   // textures.
-  scene_->PrepareToDraw();
+  ui_scene_manager_->scene()->PrepareToDraw();
 
   UpdateEyeInfos(render_info_primary_.head_pose, kViewportListPrimaryOffset,
                  render_info_primary_.surface_texture_size,
                  &render_info_primary_);
 
   // Measure projected content size and bubble up if delta exceeds threshold.
-  ui_->OnProjMatrixChanged(render_info_primary_.left_eye_info.proj_matrix);
+  ui_scene_manager_->OnProjMatrixChanged(
+      render_info_primary_.left_eye_info.proj_matrix);
 
   // At this point, we draw non-WebVR content that could, potentially, fill the
   // viewport.  NB: this is not just 2d browsing stuff, we may have a splash
   // screen showing in WebVR mode that must also fill the screen.
-  ui_renderer_->Draw(render_info_primary_, controller_info_);
+  ui_->ui_renderer()->Draw(render_info_primary_, controller_info_);
   frame.Unbind();
 
   std::vector<const vr::UiElement*> overlay_elements;
   if (ShouldDrawWebVr()) {
-    overlay_elements = scene_->GetVisibleWebVrOverlayForegroundElements();
+    overlay_elements =
+        ui_scene_manager_->scene()->GetVisibleWebVrOverlayForegroundElements();
   }
 
   if (!overlay_elements.empty() && ShouldDrawWebVr()) {
@@ -882,9 +872,18 @@
     // on a different buffer to make sure that our UI has enough resolution.
     frame.BindBuffer(kFrameWebVrBrowserUiBuffer);
 
+    // Update recommended fov and uv per frame.
+    buffer_viewport_list_->GetBufferViewport(GVR_LEFT_EYE,
+                                             buffer_viewport_.get());
+    const gvr::Rectf& fov_recommended_left = buffer_viewport_->GetSourceFov();
+    buffer_viewport_list_->GetBufferViewport(GVR_RIGHT_EYE,
+                                             buffer_viewport_.get());
+    const gvr::Rectf& fov_recommended_right = buffer_viewport_->GetSourceFov();
+
     // Set render info to recommended setting. It will be used as our base for
     // optimization.
-    render_info_webvr_browser_ui_.head_pose = render_info_primary_.head_pose;
+    vr::RenderInfo render_info_webvr_browser_ui;
+    render_info_webvr_browser_ui.head_pose = render_info_primary_.head_pose;
     webvr_browser_ui_left_viewport_->SetSourceFov(fov_recommended_left);
     webvr_browser_ui_right_viewport_->SetSourceFov(fov_recommended_right);
     buffer_viewport_list_->SetBufferViewport(
@@ -893,15 +892,15 @@
     buffer_viewport_list_->SetBufferViewport(
         kViewportListWebVrBrowserUiOffset + GVR_RIGHT_EYE,
         *webvr_browser_ui_right_viewport_);
-    UpdateEyeInfos(render_info_webvr_browser_ui_.head_pose,
+    UpdateEyeInfos(render_info_webvr_browser_ui.head_pose,
                    kViewportListWebVrBrowserUiOffset, render_size_webvr_ui_,
-                   &render_info_webvr_browser_ui_);
+                   &render_info_webvr_browser_ui);
     gvr::Rectf minimal_fov;
-    GetMinimalFov(render_info_webvr_browser_ui_.left_eye_info.view_matrix,
+    GetMinimalFov(render_info_webvr_browser_ui.left_eye_info.view_matrix,
                   overlay_elements, fov_recommended_left, kZNear, &minimal_fov);
     webvr_browser_ui_left_viewport_->SetSourceFov(minimal_fov);
 
-    GetMinimalFov(render_info_webvr_browser_ui_.right_eye_info.view_matrix,
+    GetMinimalFov(render_info_webvr_browser_ui.right_eye_info.view_matrix,
                   overlay_elements, fov_recommended_right, kZNear,
                   &minimal_fov);
     webvr_browser_ui_right_viewport_->SetSourceFov(minimal_fov);
@@ -912,12 +911,12 @@
     buffer_viewport_list_->SetBufferViewport(
         kViewportListWebVrBrowserUiOffset + GVR_RIGHT_EYE,
         *webvr_browser_ui_right_viewport_);
-    UpdateEyeInfos(render_info_webvr_browser_ui_.head_pose,
+    UpdateEyeInfos(render_info_webvr_browser_ui.head_pose,
                    kViewportListWebVrBrowserUiOffset, render_size_webvr_ui_,
-                   &render_info_webvr_browser_ui_);
+                   &render_info_webvr_browser_ui);
 
-    ui_renderer_->DrawWebVrOverlayForeground(render_info_webvr_browser_ui_,
-                                             controller_info_);
+    ui_->ui_renderer()->DrawWebVrOverlayForeground(render_info_webvr_browser_ui,
+                                                   controller_info_);
 
     frame.Unbind();
   }
@@ -1025,7 +1024,7 @@
 }
 
 bool VrShellGl::ShouldDrawWebVr() {
-  return web_vr_mode_ && scene_->web_vr_rendering_enabled();
+  return web_vr_mode_ && ui_scene_manager_->ShouldRenderWebVr();
 }
 
 void VrShellGl::DrawWebVr() {
@@ -1047,7 +1046,7 @@
   glClear(GL_COLOR_BUFFER_BIT);
 
   glViewport(0, 0, webvr_surface_size_.width(), webvr_surface_size_.height());
-  vr_shell_renderer_->GetWebVrRenderer()->Draw(webvr_texture_id_);
+  ui_->vr_shell_renderer()->GetWebVrRenderer()->Draw(webvr_texture_id_);
 }
 
 void VrShellGl::OnPause() {
@@ -1086,7 +1085,7 @@
   }
 
   if (!web_vr_mode_) {
-    closePresentationBindings();
+    ClosePresentationBindings();
   }
 }
 
@@ -1107,9 +1106,13 @@
   return weak_ptr_factory_.GetWeakPtr();
 }
 
+base::WeakPtr<vr::BrowserUiInterface> VrShellGl::GetBrowserUiWeakPtr() {
+  return ui_->GetBrowserUiWeakPtr();
+}
+
 void VrShellGl::SetControllerModel(
     std::unique_ptr<vr::VrControllerModel> model) {
-  vr_shell_renderer_->GetControllerRenderer()->SetUp(std::move(model));
+  ui_->vr_shell_renderer()->GetControllerRenderer()->SetUp(std::move(model));
 }
 
 void VrShellGl::OnVSync(base::TimeTicks frame_time) {
@@ -1148,7 +1151,7 @@
     if (!callback_.is_null()) {
       mojo::ReportBadMessage(
           "Requested VSync before waiting for response to previous request.");
-      closePresentationBindings();
+      ClosePresentationBindings();
       return;
     }
     callback_ = std::move(callback);
@@ -1246,7 +1249,7 @@
       device::mojom::VRPresentationProvider::VSyncStatus::SUCCESS);
 }
 
-void VrShellGl::closePresentationBindings() {
+void VrShellGl::ClosePresentationBindings() {
   webvr_frame_timeout_.Cancel();
   submit_client_.reset();
   if (!callback_.is_null()) {
diff --git a/chrome/browser/android/vr_shell/vr_shell_gl.h b/chrome/browser/android/vr_shell/vr_shell_gl.h
index 378917f..e2fe2bc 100644
--- a/chrome/browser/android/vr_shell/vr_shell_gl.h
+++ b/chrome/browser/android/vr_shell/vr_shell_gl.h
@@ -48,11 +48,13 @@
 }  // namespace gpu
 
 namespace vr {
+class BrowserUiInterface;
 class FPSMeter;
 class SlidingAverage;
+class Ui;
+class UiBrowserInterface;
 class UiInterface;
-class UiScene;
-class VrShellRenderer;
+struct UiInitialState;
 }  // namespace vr
 
 namespace vr_shell {
@@ -77,23 +79,23 @@
 class VrShellGl : public device::mojom::VRPresentationProvider,
                   public vr::ContentInputDelegate {
  public:
-  VrShellGl(GlBrowserInterface* browser,
+  VrShellGl(GlBrowserInterface* browser_interface,
+            vr::UiBrowserInterface* ui_host_interface,
+            const vr::UiInitialState& ui_initial_state,
             gvr_context* gvr_api,
-            bool initially_web_vr,
             bool reprojected_rendering,
-            bool daydream_support,
-            vr::UiScene* scene);
+            bool daydream_support);
   ~VrShellGl() override;
 
   void Initialize();
   void InitializeGl(gfx::AcceleratedWidget window);
 
-  void set_ui(vr::UiInterface* ui) { ui_ = ui; }
-
   void OnTriggerEvent();
   void OnPause();
   void OnResume();
 
+  base::WeakPtr<vr::BrowserUiInterface> GetBrowserUiWeakPtr();
+
   scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() {
     return task_runner_;
   }
@@ -186,10 +188,8 @@
 
   void SendVSync(base::TimeTicks time, GetVSyncCallback callback);
 
-  void closePresentationBindings();
+  void ClosePresentationBindings();
 
-  // samplerExternalOES texture data for main content image.
-  int content_texture_id_ = 0;
   // samplerExternalOES texture data for WebVR content image.
   int webvr_texture_id_ = 0;
 
@@ -220,8 +220,6 @@
   gfx::Size render_size_default_;
   gfx::Size render_size_webvr_ui_;
 
-  std::unique_ptr<vr::VrShellRenderer> vr_shell_renderer_;
-
   bool cardboard_ = false;
   gfx::Quaternion controller_quat_;
 
@@ -235,6 +233,9 @@
   std::vector<bool> webvr_frame_oustanding_;
   std::vector<gfx::Transform> webvr_head_pose_;
 
+  std::unique_ptr<vr::Ui> ui_;
+  vr::UiInterface* ui_scene_manager_;
+
   bool web_vr_mode_;
   bool ready_to_draw_ = false;
   bool paused_ = true;
@@ -252,11 +253,8 @@
   mojo::Binding<device::mojom::VRPresentationProvider> binding_;
   device::mojom::VRSubmitFrameClientPtr submit_client_;
 
-  vr::UiInterface* ui_;
   GlBrowserInterface* browser_;
 
-  vr::UiScene* scene_ = nullptr;
-
   uint8_t frame_index_ = 0;
   // Larger than frame_index_ so it can be initialized out-of-band.
   uint16_t last_frame_index_ = -1;
@@ -273,12 +271,8 @@
 
   gfx::Point3F pointer_start_;
 
-  std::unique_ptr<vr::UiInputManager> input_manager_;
-  std::unique_ptr<vr::UiRenderer> ui_renderer_;
-
   vr::ControllerInfo controller_info_;
   vr::RenderInfo render_info_primary_;
-  vr::RenderInfo render_info_webvr_browser_ui_;
 
   AndroidVSyncHelper vsync_helper_;
 
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
index a7359655..d777b98 100644
--- a/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
+++ b/chrome/browser/extensions/api/browsing_data/browsing_data_test.cc
@@ -9,14 +9,15 @@
 #include "base/memory/ref_counted.h"
 #include "base/strings/pattern.h"
 #include "base/strings/string_util.h"
+#include "base/test/scoped_feature_list.h"
 #include "base/values.h"
 #include "chrome/browser/browsing_data/browsing_data_helper.h"
-
 #include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h"
 #include "chrome/browser/extensions/api/browsing_data/browsing_data_api.h"
 #include "chrome/browser/extensions/extension_function_test_utils.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "components/browsing_data/core/browsing_data_utils.h"
@@ -60,6 +61,11 @@
   }
 
  protected:
+  void SetUp() override {
+    feature_list_.InitAndEnableFeature(features::kTabsInCbd);
+    InProcessBrowserTest::SetUp();
+  }
+
   void SetUpOnMainThread() override {
     remover_ =
         content::BrowserContext::GetBrowsingDataRemover(browser()->profile());
@@ -154,6 +160,9 @@
                                  int expected_origin_type_mask,
                                  int expected_removal_mask) {
     PrefService* prefs = browser()->profile()->GetPrefs();
+    prefs->SetInteger(
+        browsing_data::prefs::kLastClearBrowsingDataTab,
+        static_cast<int>(browsing_data::ClearBrowsingDataTab::ADVANCED));
     prefs->SetBoolean(
         browsing_data::prefs::kDeleteCache,
         !!(data_type_flags & content::BrowsingDataRemover::DATA_TYPE_CACHE));
@@ -183,6 +192,35 @@
         !!(data_type_flags &
            ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA));
 
+    VerifyRemovalMask(expected_origin_type_mask, expected_removal_mask);
+  }
+
+  void SetBasicPrefsAndVerifySettings(int data_type_flags,
+                                      int expected_origin_type_mask,
+                                      int expected_removal_mask) {
+    PrefService* prefs = browser()->profile()->GetPrefs();
+    prefs->SetInteger(
+        browsing_data::prefs::kLastClearBrowsingDataTab,
+        static_cast<int>(browsing_data::ClearBrowsingDataTab::BASIC));
+    prefs->SetBoolean(
+        browsing_data::prefs::kDeleteCacheBasic,
+        !!(data_type_flags & content::BrowsingDataRemover::DATA_TYPE_CACHE));
+    prefs->SetBoolean(
+        browsing_data::prefs::kDeleteCookiesBasic,
+        !!(data_type_flags & content::BrowsingDataRemover::DATA_TYPE_COOKIES));
+    prefs->SetBoolean(browsing_data::prefs::kDeleteBrowsingHistoryBasic,
+                      !!(data_type_flags &
+                         ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY));
+    prefs->SetBoolean(
+        prefs::kClearPluginLSODataEnabled,
+        !!(data_type_flags &
+           ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA));
+
+    VerifyRemovalMask(expected_origin_type_mask, expected_removal_mask);
+  }
+
+  void VerifyRemovalMask(int expected_origin_type_mask,
+                         int expected_removal_mask) {
     scoped_refptr<BrowsingDataSettingsFunction> function =
         new BrowsingDataSettingsFunction();
     SCOPED_TRACE("settings");
@@ -259,6 +297,7 @@
   }
 
  private:
+  base::test::ScopedFeatureList feature_list_;
   // Cached pointer to BrowsingDataRemover for access to testing methods.
   content::BrowsingDataRemover* remover_;
 };
@@ -397,6 +436,9 @@
 IN_PROC_BROWSER_TEST_F(ExtensionBrowsingDataTest,
                        BrowsingDataRemovalInputFromSettings) {
   PrefService* prefs = browser()->profile()->GetPrefs();
+  prefs->SetInteger(
+      browsing_data::prefs::kLastClearBrowsingDataTab,
+      static_cast<int>(browsing_data::ClearBrowsingDataTab::ADVANCED));
   prefs->SetBoolean(browsing_data::prefs::kDeleteCache, true);
   prefs->SetBoolean(browsing_data::prefs::kDeleteBrowsingHistory, true);
   prefs->SetBoolean(browsing_data::prefs::kDeleteDownloadHistory, true);
@@ -496,6 +538,12 @@
   SetPrefsAndVerifySettings(
       ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS, 0,
       ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS);
+  SetBasicPrefsAndVerifySettings(content::BrowsingDataRemover::DATA_TYPE_CACHE,
+                                 0,
+                                 content::BrowsingDataRemover::DATA_TYPE_CACHE);
+  SetBasicPrefsAndVerifySettings(
+      ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY, 0,
+      ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY);
 }
 
 // Test cookie and app data settings.
@@ -524,6 +572,9 @@
       content::BrowsingDataRemover::DATA_TYPE_COOKIES |
           ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA,
       UNPROTECTED_WEB, supported_site_data);
+  SetBasicPrefsAndVerifySettings(
+      content::BrowsingDataRemover::DATA_TYPE_COOKIES, UNPROTECTED_WEB,
+      supported_site_data_except_plugins);
 }
 
 // Test an arbitrary assortment of settings.
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 bc6553aa..29fbdaa8 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
@@ -5,7 +5,6 @@
 <link rel="import" href="chrome://resources/polymer/v1_0/neon-animation/neon-animation-runner-behavior.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-progress/paper-progress.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/paper-toolbar/paper-toolbar.html">
 <link rel="import" href="chrome://resources/cr_elements/icons.html">
 <link rel="import" href="../icons.html">
 <link rel="import" href="../viewer-bookmarks-content/viewer-bookmarks-content.html">
@@ -22,8 +21,8 @@
       /* We introduce a wrapper aligner element to help with laying out the main
        * toolbar content without changing the bottom-aligned progress bar. */
       #aligner {
-        @apply(--layout-horizontal);
-        @apply(--layout-center);
+        align-items: center;
+        display: flex;
         padding: 0 8px;
         width: 100%;
       }
@@ -68,11 +67,12 @@
         width: 100%;
       }
 
-      paper-toolbar {
-        --paper-toolbar-background: rgb(50, 54, 57);
-        --paper-toolbar-height: 48px;
+      #toolbar {
         @apply(--shadow-elevation-2dp);
+        background-color: rgb(50, 54, 57);
         color: rgb(241, 241, 241);
+        display: flex;
+        height: 48px;
       }
 
       .invisible {
@@ -103,7 +103,7 @@
         }
       }
     </style>
-    <paper-toolbar>
+    <div id="toolbar">
       <div id="aligner" class="middle">
         <span id="title" title="{{docTitle}}">
           <span>{{docTitle}}</span>
@@ -148,7 +148,7 @@
       <div class="bottom fit">
         <paper-progress id="progress" value="{{loadProgress}}"></paper-progress>
       </div>
-    </paper-toolbar>
+    </div>
   </template>
   <script src="viewer-pdf-toolbar.js"></script>
 </dom-module>
diff --git a/chrome/browser/search_engines/ui_thread_search_terms_data.cc b/chrome/browser/search_engines/ui_thread_search_terms_data.cc
index 95f42aa0..e74689f 100644
--- a/chrome/browser/search_engines/ui_thread_search_terms_data.cc
+++ b/chrome/browser/search_engines/ui_thread_search_terms_data.cc
@@ -128,15 +128,6 @@
   return "chrome-ext-ansg";
 }
 
-std::string UIThreadSearchTermsData::InstantExtendedEnabledParam() const {
-  return search::InstantExtendedEnabledParam();
-}
-
-std::string UIThreadSearchTermsData::ForceInstantResultsParam(
-    bool for_prerender) const {
-  return search::ForceInstantResultsParam(for_prerender);
-}
-
 // It's acutally OK to call this method on any thread, but it's currently placed
 // in UIThreadSearchTermsData since SearchTermsData cannot depend on src/chrome
 // as it is shared with iOS.
diff --git a/chrome/browser/search_engines/ui_thread_search_terms_data.h b/chrome/browser/search_engines/ui_thread_search_terms_data.h
index 551f6a0e..7e72c6cd 100644
--- a/chrome/browser/search_engines/ui_thread_search_terms_data.h
+++ b/chrome/browser/search_engines/ui_thread_search_terms_data.h
@@ -27,8 +27,6 @@
   std::string GetSearchClient() const override;
   std::string GetSuggestClient() const override;
   std::string GetSuggestRequestIdentifier() const override;
-  std::string InstantExtendedEnabledParam() const override;
-  std::string ForceInstantResultsParam(bool for_prerender) const override;
   std::string GoogleImageSearchSource() const override;
 
 #if defined(OS_ANDROID)
diff --git a/chrome/browser/vr/BUILD.gn b/chrome/browser/vr/BUILD.gn
index 747ff075..c03ae87 100644
--- a/chrome/browser/vr/BUILD.gn
+++ b/chrome/browser/vr/BUILD.gn
@@ -108,6 +108,8 @@
     "toolbar_state.h",
     "transition.cc",
     "transition.h",
+    "ui.cc",
+    "ui.h",
     "ui_browser_interface.h",
     "ui_element_renderer.h",
     "ui_input_manager.cc",
diff --git a/chrome/browser/vr/test/ui_scene_manager_test.cc b/chrome/browser/vr/test/ui_scene_manager_test.cc
index 9a19c9ee..c30e34a6 100644
--- a/chrome/browser/vr/test/ui_scene_manager_test.cc
+++ b/chrome/browser/vr/test/ui_scene_manager_test.cc
@@ -8,6 +8,7 @@
 #include "chrome/browser/vr/elements/rect.h"
 #include "chrome/browser/vr/test/constants.h"
 #include "chrome/browser/vr/test/fake_ui_element_renderer.h"
+#include "chrome/browser/vr/ui.h"
 #include "chrome/browser/vr/ui_scene.h"
 #include "chrome/browser/vr/ui_scene_manager.h"
 #include "ui/gfx/geometry/vector3d_f.h"
@@ -38,16 +39,24 @@
 
 void UiSceneManagerTest::MakeManager(InCct in_cct, InWebVr in_web_vr) {
   scene_ = base::MakeUnique<UiScene>();
-  manager_ = base::MakeUnique<UiSceneManager>(browser_.get(), scene_.get(),
-                                              &content_input_delegate_, in_cct,
-                                              in_web_vr, kNotAutopresented);
+
+  UiInitialState ui_initial_state;
+  ui_initial_state.in_cct = in_cct;
+  ui_initial_state.in_web_vr = in_web_vr;
+  ui_initial_state.web_vr_autopresentation_expected = false;
+  manager_ = base::MakeUnique<UiSceneManager>(
+      browser_.get(), scene_.get(), &content_input_delegate_, ui_initial_state);
 }
 
 void UiSceneManagerTest::MakeAutoPresentedManager() {
   scene_ = base::MakeUnique<UiScene>();
+
+  UiInitialState ui_initial_state;
+  ui_initial_state.in_cct = false;
+  ui_initial_state.in_web_vr = false;
+  ui_initial_state.web_vr_autopresentation_expected = true;
   manager_ = base::MakeUnique<UiSceneManager>(
-      browser_.get(), scene_.get(), &content_input_delegate_, kNotInCct,
-      kNotInWebVr, kAutopresented);
+      browser_.get(), scene_.get(), &content_input_delegate_, ui_initial_state);
 }
 
 bool UiSceneManagerTest::IsVisible(UiElementName name) const {
@@ -68,7 +77,9 @@
     SCOPED_TRACE(name);
     auto* element = scene_->GetUiElementByName(name);
     EXPECT_NE(nullptr, element);
-    EXPECT_TRUE(element->IsVisible() && IsElementFacingCamera(element));
+    if (element) {
+      EXPECT_TRUE(element->IsVisible() && IsElementFacingCamera(element));
+    }
   }
 }
 
diff --git a/chrome/browser/vr/ui.cc b/chrome/browser/vr/ui.cc
new file mode 100644
index 0000000..32b2f838
--- /dev/null
+++ b/chrome/browser/vr/ui.cc
@@ -0,0 +1,46 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/vr/ui.h"
+
+#include "base/memory/ptr_util.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "chrome/browser/vr/ui_input_manager.h"
+#include "chrome/browser/vr/ui_interface.h"
+#include "chrome/browser/vr/ui_renderer.h"
+#include "chrome/browser/vr/ui_scene.h"
+#include "chrome/browser/vr/ui_scene_manager.h"
+#include "chrome/browser/vr/vr_shell_renderer.h"
+
+namespace vr {
+
+Ui::Ui(UiBrowserInterface* browser,
+       ContentInputDelegate* content_input_delegate,
+       const vr::UiInitialState& ui_initial_state)
+    : scene_(base::MakeUnique<vr::UiScene>()),
+      scene_manager_(
+          base::MakeUnique<vr::UiSceneManager>(browser,
+                                               scene_.get(),
+                                               content_input_delegate,
+                                               ui_initial_state)) {}
+
+Ui::~Ui() = default;
+
+UiInterface* Ui::ui() {
+  return scene_manager_.get();
+}
+
+base::WeakPtr<vr::BrowserUiInterface> Ui::GetBrowserUiWeakPtr() {
+  return scene_manager_->GetWeakPtr();
+}
+
+void Ui::OnGlInitialized(unsigned int content_texture_id) {
+  ui()->OnGlInitialized(content_texture_id);
+  input_manager_ = base::MakeUnique<vr::UiInputManager>(scene_.get());
+  vr_shell_renderer_ = base::MakeUnique<vr::VrShellRenderer>();
+  ui_renderer_ =
+      base::MakeUnique<vr::UiRenderer>(scene_.get(), vr_shell_renderer_.get());
+}
+
+}  // namespace vr
diff --git a/chrome/browser/vr/ui.h b/chrome/browser/vr/ui.h
new file mode 100644
index 0000000..ec0a3d7
--- /dev/null
+++ b/chrome/browser/vr/ui.h
@@ -0,0 +1,67 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_VR_UI_H_
+#define CHROME_BROWSER_VR_UI_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "chrome/browser/vr/ui_interface.h"
+
+namespace vr {
+class BrowserUiInterface;
+class ContentInputDelegate;
+class UiBrowserInterface;
+class UiInputManager;
+class UiRenderer;
+class UiScene;
+class UiSceneManager;
+class VrShellRenderer;
+}  // namespace vr
+
+namespace vr {
+
+struct UiInitialState {
+  bool in_cct = false;
+  bool in_web_vr = false;
+  bool web_vr_autopresentation_expected = false;
+};
+
+// This class manages all GLThread owned objects and GL rendering for VrShell.
+// It is not threadsafe and must only be used on the GL thread.
+class Ui {
+ public:
+  Ui(UiBrowserInterface* browser,
+     ContentInputDelegate* content_input_delegate,
+     const vr::UiInitialState& ui_initial_state);
+  virtual ~Ui();
+
+  base::WeakPtr<vr::BrowserUiInterface> GetBrowserUiWeakPtr();
+
+  void OnGlInitialized(unsigned int content_texture_id);
+
+  UiInterface* ui();
+
+  // TODO(crbug.com/767957): Refactor to hide these behind the UI interface.
+  UiScene* scene() { return scene_.get(); }
+  VrShellRenderer* vr_shell_renderer() { return vr_shell_renderer_.get(); }
+  UiRenderer* ui_renderer() { return ui_renderer_.get(); }
+  UiInputManager* input_manager() { return input_manager_.get(); }
+
+ private:
+  // This state may be further abstracted into a SkiaUi object.
+  std::unique_ptr<vr::UiScene> scene_;
+  std::unique_ptr<vr::UiSceneManager> scene_manager_;
+  std::unique_ptr<vr::VrShellRenderer> vr_shell_renderer_;
+  std::unique_ptr<vr::UiInputManager> input_manager_;
+  std::unique_ptr<vr::UiRenderer> ui_renderer_;
+
+  DISALLOW_COPY_AND_ASSIGN(Ui);
+};
+
+}  // namespace vr
+
+#endif  // CHROME_BROWSER_VR_UI_H_
diff --git a/chrome/browser/vr/ui_interface.h b/chrome/browser/vr/ui_interface.h
index 89cb90e..158a4f4 100644
--- a/chrome/browser/vr/ui_interface.h
+++ b/chrome/browser/vr/ui_interface.h
@@ -11,6 +11,8 @@
 
 namespace vr {
 
+class UiScene;
+
 // This is the platform-specific interface to the VR UI.
 class UiInterface {
  public:
@@ -24,6 +26,10 @@
 
   virtual ~UiInterface() {}
 
+  virtual UiScene* scene() = 0;
+
+  virtual bool ShouldRenderWebVr() = 0;
+
   virtual void OnGlInitialized(unsigned int content_texture_id) = 0;
   virtual void OnAppButtonClicked() = 0;
   virtual void OnAppButtonGesturePerformed(
diff --git a/chrome/browser/vr/ui_scene_manager.cc b/chrome/browser/vr/ui_scene_manager.cc
index 2367751..a393ec7 100644
--- a/chrome/browser/vr/ui_scene_manager.cc
+++ b/chrome/browser/vr/ui_scene_manager.cc
@@ -30,6 +30,7 @@
 #include "chrome/browser/vr/elements/viewport_aware_root.h"
 #include "chrome/browser/vr/elements/webvr_url_toast.h"
 #include "chrome/browser/vr/target_property.h"
+#include "chrome/browser/vr/ui.h"
 #include "chrome/browser/vr/ui_browser_interface.h"
 #include "chrome/browser/vr/ui_scene.h"
 #include "chrome/browser/vr/vr_gl_util.h"
@@ -169,15 +170,15 @@
 UiSceneManager::UiSceneManager(UiBrowserInterface* browser,
                                UiScene* scene,
                                ContentInputDelegate* content_input_delegate,
-                               bool in_cct,
-                               bool in_web_vr,
-                               bool web_vr_autopresentation_expected)
+                               const UiInitialState& ui_initial_state)
     : browser_(browser),
       scene_(scene),
-      in_cct_(in_cct),
-      web_vr_mode_(in_web_vr),
-      started_for_autopresentation_(web_vr_autopresentation_expected),
-      showing_web_vr_splash_screen_(web_vr_autopresentation_expected),
+      in_cct_(ui_initial_state.in_cct),
+      web_vr_mode_(ui_initial_state.in_web_vr),
+      started_for_autopresentation_(
+          ui_initial_state.web_vr_autopresentation_expected),
+      showing_web_vr_splash_screen_(
+          ui_initial_state.web_vr_autopresentation_expected),
       weak_ptr_factory_(this) {
   Create2dBrowsingSubtreeRoots();
   CreateWebVrRoot();
@@ -868,6 +869,14 @@
   ConfigureScene();
 }
 
+UiScene* UiSceneManager::scene() {
+  return scene_;
+}
+
+bool UiSceneManager::ShouldRenderWebVr() {
+  return scene_->web_vr_rendering_enabled();
+}
+
 void UiSceneManager::OnGlInitialized(unsigned int content_texture_id) {
   main_content_->set_texture_id(content_texture_id);
   scene_->OnGlInitialized();
diff --git a/chrome/browser/vr/ui_scene_manager.h b/chrome/browser/vr/ui_scene_manager.h
index 791bcf5..5a8f0b0 100644
--- a/chrome/browser/vr/ui_scene_manager.h
+++ b/chrome/browser/vr/ui_scene_manager.h
@@ -30,6 +30,7 @@
 class UiScene;
 class UrlBar;
 class ExitPrompt;
+struct UiInitialState;
 
 // The scene manager creates and maintains a UiElement hierarchy.
 //
@@ -83,20 +84,17 @@
   UiSceneManager(UiBrowserInterface* browser,
                  UiScene* scene,
                  ContentInputDelegate* content_input_delegate,
-                 bool in_cct,
-                 bool in_web_vr,
-                 bool web_vr_autopresentation_expected);
-
+                 const UiInitialState& ui_initial_state);
   ~UiSceneManager() override;
 
   base::WeakPtr<UiSceneManager> GetWeakPtr();
 
   // UiBrowserInterface.
+  void SetWebVrMode(bool web_vr, bool show_toast) override;
   void SetFullscreen(bool fullscreen) override;
   void SetIncognito(bool incognito) override;
   void SetToolbarState(const ToolbarState& state) override;
   void SetWebVrSecureOrigin(bool secure) override;
-  void SetWebVrMode(bool web_vr, bool show_toast) override;
   void SetLoading(bool loading) override;
   void SetLoadProgress(float progress) override;
   void SetIsExiting() override;
@@ -108,6 +106,8 @@
   void SetHistoryButtonsEnabled(bool can_go_back, bool can_go_forward) override;
 
   // UiInterface.
+  UiScene* scene() override;
+  bool ShouldRenderWebVr() override;
   void OnGlInitialized(unsigned int content_texture_id) override;
   void OnAppButtonClicked() override;
   void OnAppButtonGesturePerformed(UiInterface::Direction direction) override;
diff --git a/chromeos/dbus/arc_oemcrypto_client.cc b/chromeos/dbus/arc_oemcrypto_client.cc
index dab62c4..2230b5b 100644
--- a/chromeos/dbus/arc_oemcrypto_client.cc
+++ b/chromeos/dbus/arc_oemcrypto_client.cc
@@ -48,8 +48,8 @@
         arc_oemcrypto::kArcOemCryptoServiceName,
         dbus::ObjectPath(arc_oemcrypto::kArcOemCryptoServicePath));
     proxy_->WaitForServiceToBeAvailable(
-        base::Bind(&ArcOemCryptoClientImpl::OnServiceAvailable,
-                   weak_ptr_factory_.GetWeakPtr()));
+        base::BindOnce(&ArcOemCryptoClientImpl::OnServiceAvailable,
+                       weak_ptr_factory_.GetWeakPtr()));
   }
 
  private:
diff --git a/chromeos/dbus/cras_audio_client.cc b/chromeos/dbus/cras_audio_client.cc
index ec08396a..49e9305f 100644
--- a/chromeos/dbus/cras_audio_client.cc
+++ b/chromeos/dbus/cras_audio_client.cc
@@ -207,8 +207,8 @@
   }
 
   void WaitForServiceToBeAvailable(
-      const WaitForServiceToBeAvailableCallback& callback) override {
-    cras_proxy_->WaitForServiceToBeAvailable(callback);
+      WaitForServiceToBeAvailableCallback callback) override {
+    cras_proxy_->WaitForServiceToBeAvailable(std::move(callback));
   }
 
  protected:
diff --git a/chromeos/dbus/cras_audio_client.h b/chromeos/dbus/cras_audio_client.h
index 478bdc0..ea35b37 100644
--- a/chromeos/dbus/cras_audio_client.h
+++ b/chromeos/dbus/cras_audio_client.h
@@ -13,6 +13,7 @@
 #include "chromeos/chromeos_export.h"
 #include "chromeos/dbus/audio_node.h"
 #include "chromeos/dbus/dbus_client.h"
+#include "chromeos/dbus/dbus_method_call_status.h"
 #include "chromeos/dbus/volume_state.h"
 
 namespace chromeos {
@@ -82,9 +83,6 @@
   // contains the detailed dbus error message.
   typedef base::Callback<void(const std::string&,
                               const std::string&)> ErrorCallback;
-  // A callback for cras dbus method WaitForServiceToBeAvailable.
-  typedef base::Callback<void(bool service_is_ready)>
-      WaitForServiceToBeAvailableCallback;
 
   // Gets the volume state, asynchronously.
   virtual void GetVolumeState(const GetVolumeStateCallback& callback) = 0;
@@ -149,7 +147,7 @@
 
   // Runs the callback as soon as the service becomes available.
   virtual void WaitForServiceToBeAvailable(
-      const WaitForServiceToBeAvailableCallback& callback) = 0;
+      WaitForServiceToBeAvailableCallback callback) = 0;
 
   // Creates the instance.
   static CrasAudioClient* Create();
diff --git a/chromeos/dbus/cryptohome_client.cc b/chromeos/dbus/cryptohome_client.cc
index 90de8694..fabae14 100644
--- a/chromeos/dbus/cryptohome_client.cc
+++ b/chromeos/dbus/cryptohome_client.cc
@@ -80,8 +80,8 @@
 
   // CryptohomeClient override.
   void WaitForServiceToBeAvailable(
-      const WaitForServiceToBeAvailableCallback& callback) override {
-    proxy_->WaitForServiceToBeAvailable(callback);
+      WaitForServiceToBeAvailableCallback callback) override {
+    proxy_->WaitForServiceToBeAvailable(std::move(callback));
   }
 
   // CryptohomeClient override.
diff --git a/chromeos/dbus/cryptohome_client.h b/chromeos/dbus/cryptohome_client.h
index dfa40bf..652ac9b 100644
--- a/chromeos/dbus/cryptohome_client.h
+++ b/chromeos/dbus/cryptohome_client.h
@@ -68,9 +68,6 @@
       GetSystemSaltCallback;
   // A callback to handle LowDiskSpace signals.
   typedef base::Callback<void(uint64_t disk_free_bytes)> LowDiskSpaceHandler;
-  // A callback for WaitForServiceToBeAvailable().
-  typedef base::Callback<void(bool service_is_ready)>
-      WaitForServiceToBeAvailableCallback;
   // A callback to handle responses of Pkcs11GetTpmTokenInfo method.  The result
   // of the D-Bus call is in |call_status|.  On success, |label| holds the
   // PKCS #11 token label.  This is not useful in practice to identify a token
@@ -145,7 +142,7 @@
 
   // Runs the callback as soon as the service becomes available.
   virtual void WaitForServiceToBeAvailable(
-      const WaitForServiceToBeAvailableCallback& callback) = 0;
+      WaitForServiceToBeAvailableCallback callback) = 0;
 
   // Calls IsMounted method and returns true when the call succeeds.
   virtual void IsMounted(DBusMethodCallback<bool> callback) = 0;
diff --git a/chromeos/dbus/dbus_method_call_status.h b/chromeos/dbus/dbus_method_call_status.h
index 0ad76a4..d0fb0f4 100644
--- a/chromeos/dbus/dbus_method_call_status.h
+++ b/chromeos/dbus/dbus_method_call_status.h
@@ -5,6 +5,9 @@
 #ifndef CHROMEOS_DBUS_DBUS_METHOD_CALL_STATUS_H_
 #define CHROMEOS_DBUS_DBUS_METHOD_CALL_STATUS_H_
 
+// TODO(hidehiko): Rename this file to dbus_callback.h, when we fully
+// get rid of DBusMethodCallStatus enum defined below.
+
 #include <string>
 
 #include "base/callback.h"
@@ -41,6 +44,10 @@
 // doesn't get call status.
 typedef base::Callback<void(const dbus::ObjectPath& result)> ObjectPathCallback;
 
+// Called when service becomes available.
+using WaitForServiceToBeAvailableCallback =
+    base::OnceCallback<void(bool service_is_available)>;
+
 // Returns an empty callback that does nothing.
 CHROMEOS_EXPORT VoidDBusMethodCallback EmptyVoidDBusMethodCallback();
 
diff --git a/chromeos/dbus/debug_daemon_client.cc b/chromeos/dbus/debug_daemon_client.cc
index 1b0dd257..d49cbc7 100644
--- a/chromeos/dbus/debug_daemon_client.cc
+++ b/chromeos/dbus/debug_daemon_client.cc
@@ -419,8 +419,8 @@
   }
 
   void WaitForServiceToBeAvailable(
-      const WaitForServiceToBeAvailableCallback& callback) override {
-    debugdaemon_proxy_->WaitForServiceToBeAvailable(callback);
+      WaitForServiceToBeAvailableCallback callback) override {
+    debugdaemon_proxy_->WaitForServiceToBeAvailable(std::move(callback));
   }
 
   void SetOomScoreAdj(const std::map<pid_t, int32_t>& pid_to_oom_score_adj,
diff --git a/chromeos/dbus/debug_daemon_client.h b/chromeos/dbus/debug_daemon_client.h
index 46d1c83..e9abf79 100644
--- a/chromeos/dbus/debug_daemon_client.h
+++ b/chromeos/dbus/debug_daemon_client.h
@@ -20,6 +20,7 @@
 #include "base/trace_event/tracing_agent.h"
 #include "chromeos/chromeos_export.h"
 #include "chromeos/dbus/dbus_client.h"
+#include "chromeos/dbus/dbus_method_call_status.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
 
 namespace chromeos {
@@ -196,13 +197,9 @@
   // Trigger uploading of crashes.
   virtual void UploadCrashes() = 0;
 
-  // A callback for WaitForServiceToBeAvailable().
-  typedef base::Callback<void(bool service_is_ready)>
-      WaitForServiceToBeAvailableCallback;
-
   // Runs the callback as soon as the service becomes available.
   virtual void WaitForServiceToBeAvailable(
-      const WaitForServiceToBeAvailableCallback& callback) = 0;
+      WaitForServiceToBeAvailableCallback callback) = 0;
 
   // A callback for SetOomScoreAdj().
   typedef base::Callback<void(bool success, const std::string& output)>
diff --git a/chromeos/dbus/fake_cras_audio_client.cc b/chromeos/dbus/fake_cras_audio_client.cc
index 3ebc6a8..5351eb4 100644
--- a/chromeos/dbus/fake_cras_audio_client.cc
+++ b/chromeos/dbus/fake_cras_audio_client.cc
@@ -188,8 +188,8 @@
 }
 
 void FakeCrasAudioClient::WaitForServiceToBeAvailable(
-    const WaitForServiceToBeAvailableCallback& callback) {
-  callback.Run(true);
+    WaitForServiceToBeAvailableCallback callback) {
+  std::move(callback).Run(true);
 }
 
 void FakeCrasAudioClient::RemoveActiveOutputNode(uint64_t node_id) {
diff --git a/chromeos/dbus/fake_cras_audio_client.h b/chromeos/dbus/fake_cras_audio_client.h
index 636113f..14fd126 100644
--- a/chromeos/dbus/fake_cras_audio_client.h
+++ b/chromeos/dbus/fake_cras_audio_client.h
@@ -43,7 +43,7 @@
   void SetGlobalOutputChannelRemix(int32_t channels,
                                    const std::vector<double>& mixer) override;
   void WaitForServiceToBeAvailable(
-      const WaitForServiceToBeAvailableCallback& callback) override;
+      WaitForServiceToBeAvailableCallback callback) override;
 
   // Modifies an AudioNode from |node_list_| based on |audio_node.id|.
   // if the |audio_node.id| cannot be found in list, Add an
diff --git a/chromeos/dbus/fake_cryptohome_client.cc b/chromeos/dbus/fake_cryptohome_client.cc
index 5484e35..266f22b 100644
--- a/chromeos/dbus/fake_cryptohome_client.cc
+++ b/chromeos/dbus/fake_cryptohome_client.cc
@@ -79,12 +79,13 @@
 }
 
 void FakeCryptohomeClient::WaitForServiceToBeAvailable(
-    const WaitForServiceToBeAvailableCallback& callback) {
+    WaitForServiceToBeAvailableCallback callback) {
   if (service_is_available_) {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
-                                                  base::Bind(callback, true));
+    base::ThreadTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(std::move(callback), true));
   } else {
-    pending_wait_for_service_to_be_available_callbacks_.push_back(callback);
+    pending_wait_for_service_to_be_available_callbacks_.push_back(
+        std::move(callback));
   }
 }
 
@@ -702,12 +703,13 @@
 
 void FakeCryptohomeClient::SetServiceIsAvailable(bool is_available) {
   service_is_available_ = is_available;
-  if (is_available) {
-    std::vector<WaitForServiceToBeAvailableCallback> callbacks;
-    callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
-    for (size_t i = 0; i < callbacks.size(); ++i)
-      callbacks[i].Run(is_available);
-  }
+  if (!is_available)
+    return;
+
+  std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+  callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
+  for (auto& callback : callbacks)
+    std::move(callback).Run(true);
 }
 
 void FakeCryptohomeClient::SetTpmAttestationUserCertificate(
diff --git a/chromeos/dbus/fake_cryptohome_client.h b/chromeos/dbus/fake_cryptohome_client.h
index 35d5cd4..d66ad81c8 100644
--- a/chromeos/dbus/fake_cryptohome_client.h
+++ b/chromeos/dbus/fake_cryptohome_client.h
@@ -34,7 +34,7 @@
   void ResetAsyncCallStatusHandlers() override;
   void SetLowDiskSpaceHandler(const LowDiskSpaceHandler& handler) override;
   void WaitForServiceToBeAvailable(
-      const WaitForServiceToBeAvailableCallback& callback) override;
+      WaitForServiceToBeAvailableCallback callback) override;
   void IsMounted(DBusMethodCallback<bool> callback) override;
   void Unmount(DBusMethodCallback<bool> callback) override;
   void AsyncCheckKey(const cryptohome::Identification& cryptohome_id,
diff --git a/chromeos/dbus/fake_debug_daemon_client.cc b/chromeos/dbus/fake_debug_daemon_client.cc
index 7423fa4..1273f7d5 100644
--- a/chromeos/dbus/fake_debug_daemon_client.cc
+++ b/chromeos/dbus/fake_debug_daemon_client.cc
@@ -194,12 +194,13 @@
 }
 
 void FakeDebugDaemonClient::WaitForServiceToBeAvailable(
-    const WaitForServiceToBeAvailableCallback& callback) {
+    WaitForServiceToBeAvailableCallback callback) {
   if (service_is_available_) {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
-                                                  base::Bind(callback, true));
+    base::ThreadTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(std::move(callback), true));
   } else {
-    pending_wait_for_service_to_be_available_callbacks_.push_back(callback);
+    pending_wait_for_service_to_be_available_callbacks_.push_back(
+        std::move(callback));
   }
 }
 
@@ -221,8 +222,8 @@
 
   std::vector<WaitForServiceToBeAvailableCallback> callbacks;
   callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
-  for (size_t i = 0; i < callbacks.size(); ++i)
-    callbacks[i].Run(is_available);
+  for (auto& callback : callbacks)
+    std::move(callback).Run(true);
 }
 
 void FakeDebugDaemonClient::CupsAddManuallyConfiguredPrinter(
diff --git a/chromeos/dbus/fake_debug_daemon_client.h b/chromeos/dbus/fake_debug_daemon_client.h
index a8744222..b340621 100644
--- a/chromeos/dbus/fake_debug_daemon_client.h
+++ b/chromeos/dbus/fake_debug_daemon_client.h
@@ -71,7 +71,7 @@
   void RemoveRootfsVerification(
       const EnableDebuggingCallback& callback) override;
   void WaitForServiceToBeAvailable(
-      const WaitForServiceToBeAvailableCallback& callback) override;
+      WaitForServiceToBeAvailableCallback callback) override;
   void SetOomScoreAdj(const std::map<pid_t, int32_t>& pid_to_oom_score_adj,
                       const SetOomScoreAdjCallback& callback) override;
   void CupsAddManuallyConfiguredPrinter(
diff --git a/chromeos/dbus/system_clock_client.cc b/chromeos/dbus/system_clock_client.cc
index fb14341..3d645e08 100644
--- a/chromeos/dbus/system_clock_client.cc
+++ b/chromeos/dbus/system_clock_client.cc
@@ -66,8 +66,8 @@
         base::Bind(&SystemClockClientImpl::TimeUpdatedConnected,
                    weak_ptr_factory_.GetWeakPtr()));
     system_clock_proxy_->WaitForServiceToBeAvailable(
-        base::Bind(&SystemClockClientImpl::ServiceInitiallyAvailable,
-                   weak_ptr_factory_.GetWeakPtr()));
+        base::BindOnce(&SystemClockClientImpl::ServiceInitiallyAvailable,
+                       weak_ptr_factory_.GetWeakPtr()));
   }
 
  private:
diff --git a/components/autofill/core/browser/autofill_experiments.cc b/components/autofill/core/browser/autofill_experiments.cc
index c5b0c44..b5cdabc 100644
--- a/components/autofill/core/browser/autofill_experiments.cc
+++ b/components/autofill/core/browser/autofill_experiments.cc
@@ -39,6 +39,8 @@
     "AutofillCreditCardPopupLayout", base::FEATURE_DISABLED_BY_DEFAULT};
 const base::Feature kAutofillCreditCardLastUsedDateDisplay{
     "AutofillCreditCardLastUsedDateDisplay", base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kAutofillDeleteDisusedCreditCards{
+    "AutofillDeleteDisusedCreditCards", base::FEATURE_DISABLED_BY_DEFAULT};
 const base::Feature kAutofillOfferLocalSaveIfServerCardManuallyEntered{
     "AutofillOfferLocalSaveIfServerCardManuallyEntered",
     base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/components/autofill/core/browser/autofill_experiments.h b/components/autofill/core/browser/autofill_experiments.h
index eac477f..ecbbc64 100644
--- a/components/autofill/core/browser/autofill_experiments.h
+++ b/components/autofill/core/browser/autofill_experiments.h
@@ -33,6 +33,7 @@
 extern const base::Feature kAutofillCreditCardBankNameDisplay;
 extern const base::Feature kAutofillCreditCardPopupLayout;
 extern const base::Feature kAutofillCreditCardLastUsedDateDisplay;
+extern const base::Feature kAutofillDeleteDisusedCreditCards;
 extern const base::Feature kAutofillOfferLocalSaveIfServerCardManuallyEntered;
 extern const base::Feature kAutofillRationalizeFieldTypePredictions;
 extern const base::Feature kAutofillSuppressDisusedAddresses;
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
index b463598..84341f1c 100644
--- a/components/autofill/core/browser/autofill_manager.cc
+++ b/components/autofill/core/browser/autofill_manager.cc
@@ -275,8 +275,7 @@
   registry->RegisterIntegerPref(
       prefs::kAutofillCreditCardSigninPromoImpressionCount, 0);
   registry->RegisterBooleanPref(
-      prefs::kAutofillEnabled,
-      true,
+      prefs::kAutofillEnabled, true,
       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
   registry->RegisterBooleanPref(
       prefs::kAutofillProfileUseDatesFixed, false,
@@ -291,6 +290,8 @@
   registry->RegisterIntegerPref(
       prefs::kAutofillAcceptSaveCreditCardPromptState,
       prefs::PREVIOUS_SAVE_CREDIT_CARD_PROMPT_USER_DECISION_NONE);
+  registry->RegisterIntegerPref(
+      prefs::kAutofillLastVersionDisusedCreditCardsDeleted, 0);
 }
 
 void AutofillManager::SetExternalDelegate(AutofillExternalDelegate* delegate) {
@@ -1002,8 +1003,7 @@
 
 void AutofillManager::OnSetDataList(const std::vector<base::string16>& values,
                                     const std::vector<base::string16>& labels) {
-  if (!IsValidString16Vector(values) ||
-      !IsValidString16Vector(labels) ||
+  if (!IsValidString16Vector(values) || !IsValidString16Vector(labels) ||
       values.size() != labels.size())
     return;
 
@@ -1219,8 +1219,8 @@
 #ifdef ENABLE_FORM_DEBUG_DUMP
   // Debug code for research on what autofill Chrome extracts from the last few
   // forms when submitting credit card data. See DumpAutofillData().
-  bool dump_data = base::CommandLine::ForCurrentProcess()->HasSwitch(
-      "dump-autofill-data");
+  bool dump_data =
+      base::CommandLine::ForCurrentProcess()->HasSwitch("dump-autofill-data");
 
   // Save the form data for future dumping.
   if (dump_data) {
@@ -1648,8 +1648,7 @@
     return false;
 
   // No autofill data to return if the profiles are empty.
-  const std::vector<AutofillProfile*>& profiles =
-      personal_data_->GetProfiles();
+  const std::vector<AutofillProfile*>& profiles = personal_data_->GetProfiles();
   const std::vector<CreditCard*>& credit_cards =
       personal_data_->GetCreditCards();
 
@@ -1750,8 +1749,8 @@
   base::string16 profile_full_name;
   std::string profile_language_code;
   if (!is_credit_card) {
-    profile_full_name = data_model.GetInfo(
-        AutofillType(NAME_FULL), app_locale_);
+    profile_full_name =
+        data_model.GetInfo(AutofillType(NAME_FULL), app_locale_);
     profile_language_code =
         static_cast<const AutofillProfile*>(&data_model)->language_code();
   }
@@ -1763,10 +1762,8 @@
       if (iter.SameFieldAs(field)) {
         base::string16 value =
             data_model.GetInfo(autofill_field->Type(), app_locale_);
-        if (AutofillField::FillFormField(*autofill_field,
-                                         value,
-                                         profile_language_code,
-                                         app_locale_,
+        if (AutofillField::FillFormField(*autofill_field, value,
+                                         profile_language_code, app_locale_,
                                          &iter)) {
           // Mark the cached field as autofilled, so that we can detect when a
           // user edits an autofilled field (for metrics).
@@ -1808,12 +1805,12 @@
 
     base::string16 value =
         data_model.GetInfo(cached_field->Type(), app_locale_);
-    if (is_credit_card &&
-        cached_field->Type().GetStorableType() ==
-            CREDIT_CARD_VERIFICATION_CODE) {
+    if (is_credit_card && cached_field->Type().GetStorableType() ==
+                              CREDIT_CARD_VERIFICATION_CODE) {
       value = cvc;
-    } else if (is_credit_card && IsCreditCardExpirationType(
-                                     cached_field->Type().GetStorableType()) &&
+    } else if (is_credit_card &&
+               IsCreditCardExpirationType(
+                   cached_field->Type().GetStorableType()) &&
                static_cast<const CreditCard*>(&data_model)
                    ->IsExpired(AutofillClock::Now())) {
       // Don't fill expired cards expiration date.
@@ -1824,16 +1821,12 @@
     // Only notify autofilling of empty fields and the field that initiated
     // the filling (note that "select-one" controls may not be empty but will
     // still be autofilled).
-    bool should_notify =
-        !is_credit_card &&
-        !value.empty() &&
-        (result.fields[i].SameFieldAs(field) ||
-         result.fields[i].form_control_type == "select-one" ||
-         result.fields[i].value.empty());
-    if (AutofillField::FillFormField(*cached_field,
-                                     value,
-                                     profile_language_code,
-                                     app_locale_,
+    bool should_notify = !is_credit_card && !value.empty() &&
+                         (result.fields[i].SameFieldAs(field) ||
+                          result.fields[i].form_control_type == "select-one" ||
+                          result.fields[i].value.empty());
+    if (AutofillField::FillFormField(*cached_field, value,
+                                     profile_language_code, app_locale_,
                                      &result.fields[i])) {
       // Mark the cached field as autofilled, so that we can detect when a
       // user edits an autofilled field (for metrics).
@@ -1965,8 +1958,7 @@
                                        const FormStructure* cached_form,
                                        FormStructure** updated_form) {
   bool needs_update =
-      (!cached_form ||
-       live_form.fields.size() != cached_form->field_count());
+      (!cached_form || live_form.fields.size() != cached_form->field_count());
   for (size_t i = 0; !needs_update && i < cached_form->field_count(); ++i)
     needs_update = !cached_form->field(i)->SameFieldAs(live_form.fields[i]);
 
@@ -2183,7 +2175,7 @@
                                       std::string* cc_backend_id,
                                       std::string* profile_backend_id) const {
   int cc_int_id = (frontend_id >> std::numeric_limits<uint16_t>::digits) &
-      std::numeric_limits<uint16_t>::max();
+                  std::numeric_limits<uint16_t>::max();
   int profile_int_id = frontend_id & std::numeric_limits<uint16_t>::max();
 
   *cc_backend_id = IntToBackendID(cc_int_id);
@@ -2389,8 +2381,8 @@
     fputs("Got a new credit card on CC form:\n", file);
   else
     fputs("Submitted form:\n", file);
-  for (int i = static_cast<int>(recently_autofilled_forms_.size()) - 1;
-       i >= 0; i--) {
+  for (int i = static_cast<int>(recently_autofilled_forms_.size()) - 1; i >= 0;
+       i--) {
     for (const auto& pair : recently_autofilled_forms_[i]) {
       fputs("  ", file);
       fputs(pair.first.c_str(), file);
diff --git a/components/autofill/core/browser/autofill_metrics.cc b/components/autofill/core/browser/autofill_metrics.cc
index 2b3c091..1a6c0bf 100644
--- a/components/autofill/core/browser/autofill_metrics.cc
+++ b/components/autofill/core/browser/autofill_metrics.cc
@@ -908,6 +908,11 @@
 }
 
 // static
+void AutofillMetrics::LogNumberOfCreditCardsDeletedForDisuse(size_t num_cards) {
+  UMA_HISTOGRAM_COUNTS_1000("Autofill.CreditCardsDeletedForDisuse", num_cards);
+}
+
+// static
 void AutofillMetrics::LogNumberOfProfilesAtAutofillableFormSubmission(
     size_t num_profiles) {
   UMA_HISTOGRAM_COUNTS(
diff --git a/components/autofill/core/browser/autofill_metrics.h b/components/autofill/core/browser/autofill_metrics.h
index 4363186..b464de6 100644
--- a/components/autofill/core/browser/autofill_metrics.h
+++ b/components/autofill/core/browser/autofill_metrics.h
@@ -766,6 +766,10 @@
   // used.
   static void LogNumberOfCreditCardsSuppressedForDisuse(size_t num_cards);
 
+  // Log the number of autofill credit card deleted during major version upgrade
+  // because they have not been used for a long time and are expired.
+  static void LogNumberOfCreditCardsDeletedForDisuse(size_t num_cards);
+
   // Log the number of profiles available when an autofillable form is
   // submitted.
   static void LogNumberOfProfilesAtAutofillableFormSubmission(
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc
index cf01f559..13128ac 100644
--- a/components/autofill/core/browser/personal_data_manager.cc
+++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -65,6 +65,20 @@
     base::TimeDelta::FromDays(180);
 constexpr base::TimeDelta kDisusedCreditCardTimeDelta =
     base::TimeDelta::FromDays(180);
+constexpr base::TimeDelta kDisusedCreditCardDeletionTimeDelta =
+    base::TimeDelta::FromDays(395);
+
+// Time delta to create test data.
+base::TimeDelta DeletableUseDateDelta() {
+  static base::TimeDelta delta =
+      kDisusedCreditCardDeletionTimeDelta + base::TimeDelta::FromDays(5);
+  return delta;
+}
+base::TimeDelta DeletableExpiryDateDelta() {
+  static base::TimeDelta delta =
+      kDisusedCreditCardDeletionTimeDelta + base::TimeDelta::FromDays(45);
+  return delta;
+}
 
 template <typename T>
 class FormGroupMatchesByGUIDFunctor {
@@ -339,6 +353,23 @@
   return credit_card;
 }
 
+CreditCard CreateDisusedDeletableTestCreditCard(const std::string& locale) {
+  const base::Time now = AutofillClock::Now();
+  const base::Time use_date = now - DeletableUseDateDelta();
+  base::Time::Exploded expiry_date;
+  (now - DeletableExpiryDateDelta()).LocalExplode(&expiry_date);
+
+  CreditCard credit_card;
+  credit_card.SetInfo(CREDIT_CARD_NAME_FULL,
+                      base::UTF8ToUTF16("Charlie Deletable"), locale);
+  credit_card.SetInfo(CREDIT_CARD_NUMBER, base::UTF8ToUTF16("378282246310005"),
+                      locale);
+  credit_card.SetExpirationMonth(expiry_date.month);
+  credit_card.SetExpirationYear(expiry_date.year);
+  credit_card.set_use_date(use_date);
+  return credit_card;
+}
+
 }  // namespace
 
 const char kFrecencyFieldTrialName[] = "AutofillProfileOrderByFrecency";
@@ -418,7 +449,8 @@
   // then run credit card address cleanup/startup code here. Otherwise, defer
   // until after sync has started.
   if (!IsSyncEnabledFor(sync_service, syncer::AUTOFILL_WALLET_DATA)) {
-    CreateTestCreditCards();  // Once per user profile startup.
+    DeleteDisusedCreditCards();  // Once per major version, otherwise NOP.
+    CreateTestCreditCards();     // Once per user profile startup.
   }
 }
 
@@ -498,7 +530,8 @@
   // Run deferred credit card startup code.
   // See: OnSyncServiceInitialized
   if (model_type == syncer::AUTOFILL_WALLET_DATA) {
-    CreateTestCreditCards();  // Once per user profile startup.
+    DeleteDisusedCreditCards();  // Once per major version, otherwise NOP.
+    CreateTestCreditCards();     // Once per user profile startup.
   }
 }
 
@@ -2257,6 +2290,62 @@
 
   AddCreditCard(CreateBasicTestCreditCard(app_locale_));
   AddCreditCard(CreateDisusedTestCreditCard(app_locale_));
+  AddCreditCard(CreateDisusedDeletableTestCreditCard(app_locale_));
+}
+
+bool PersonalDataManager::DeleteDisusedCreditCards() {
+  if (!base::FeatureList::IsEnabled(kAutofillDeleteDisusedCreditCards)) {
+    return false;
+  }
+
+  // Check if credit cards deletion has already been performed this major
+  // version.
+  int current_major_version = atoi(version_info::GetVersionNumber().c_str());
+  if (pref_service_->GetInteger(
+          prefs::kAutofillLastVersionDisusedCreditCardsDeleted) >=
+      current_major_version) {
+    DVLOG(1)
+        << "Autofill credit cards deletion already performed for this version";
+    return false;
+  }
+
+  // Set the pref to the current major version.
+  pref_service_->SetInteger(
+      prefs::kAutofillLastVersionDisusedCreditCardsDeleted,
+      current_major_version);
+
+  // Only delete local cards, as server cards are managed by Payments.
+  auto cards = GetLocalCreditCards();
+
+  // Early exit when there is no local cards.
+  if (cards.empty()) {
+    return true;
+  }
+
+  const base::Time deletion_threshold =
+      AutofillClock::Now() - kDisusedCreditCardDeletionTimeDelta;
+
+  std::vector<std::string> guid_to_delete;
+  for (CreditCard* card : cards) {
+    if (card->use_date() < deletion_threshold &&
+        card->IsExpired(deletion_threshold)) {
+      guid_to_delete.push_back(card->guid());
+    }
+  }
+
+  size_t num_deleted_cards = guid_to_delete.size();
+
+  for (auto const guid : guid_to_delete) {
+    database_->RemoveCreditCard(guid);
+  }
+
+  if (num_deleted_cards > 0) {
+    Refresh();
+  }
+
+  AutofillMetrics::LogNumberOfCreditCardsDeletedForDisuse(num_deleted_cards);
+
+  return true;
 }
 
 }  // namespace autofill
diff --git a/components/autofill/core/browser/personal_data_manager.h b/components/autofill/core/browser/personal_data_manager.h
index ed8f118a..d18b04c 100644
--- a/components/autofill/core/browser/personal_data_manager.h
+++ b/components/autofill/core/browser/personal_data_manager.h
@@ -250,6 +250,10 @@
       const AutofillType& type,
       const base::string16& field_contents);
 
+  // Tries to delete disused credit cards once per major version if the
+  // feature is enabled.
+  bool DeleteDisusedCreditCards();
+
   // Re-loads profiles and credit cards from the WebDatabase asynchronously.
   // In the general case, this is a no-op and will re-create the same
   // in-memory model as existed prior to the call.  If any change occurred to
@@ -357,6 +361,14 @@
   FRIEND_TEST_ALL_PREFIXES(
       PersonalDataManagerTest,
       ConvertWalletAddressesAndUpdateWalletCards_MultipleSimilarWalletAddresses);  // NOLINT
+  FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest,
+                           DeleteDisusedCreditCards_OncePerVersion);
+  FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest,
+                           DeleteDisusedCreditCards_DoNothingWhenDisabled);
+  FRIEND_TEST_ALL_PREFIXES(
+      PersonalDataManagerTest,
+      DeleteDisusedCreditCards_OnlyDeleteExpiredDisusedLocalCards);
+
   friend class autofill::AutofillInteractiveTest;
   friend class autofill::AutofillTest;
   friend class autofill::PersonalDataManagerFactory;
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc
index 30ccafa..1066f0f 100644
--- a/components/autofill/core/browser/personal_data_manager_unittest.cc
+++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -242,6 +242,23 @@
     ASSERT_EQ(3U, personal_data_->GetCreditCards().size());
   }
 
+  // Helper method to create a local card that was expired 400 days ago,
+  // and has not been used in last 400 days. This card is supposed to be
+  // deleted during a major version upgrade.
+  void CreateDeletableExpiredAndDisusedCreditCard() {
+    CreditCard credit_card1(base::GenerateGUID(), "https://www.example.com");
+    test::SetCreditCardInfo(&credit_card1, "Clyde Barrow",
+                            "378282246310005" /* American Express */, "04",
+                            "1999", "1");
+    credit_card1.set_use_date(AutofillClock::Now() -
+                              base::TimeDelta::FromDays(400));
+
+    personal_data_->AddCreditCard(credit_card1);
+
+    WaitForOnPersonalDataChanged();
+    EXPECT_EQ(1U, personal_data_->GetCreditCards().size());
+  }
+
   // Helper methods that simply forward the call to the private member (to avoid
   // having to friend every test that needs to access the private
   // PersonalDataManager::ImportAddressProfile or ImportCreditCard).
@@ -6266,6 +6283,142 @@
   EXPECT_EQ(2U, personal_data_->GetProfiles().size());
 }
 
+// Tests that DeleteDisusedCreditCards is not run if the feature is disabled.
+TEST_F(PersonalDataManagerTest,
+       DeleteDisusedCreditCards_DoNothingWhenDisabled) {
+  // Make sure feature is disabled by default.
+  EXPECT_FALSE(base::FeatureList::IsEnabled(kAutofillDeleteDisusedCreditCards));
+
+  CreateDeletableExpiredAndDisusedCreditCard();
+
+  // DeleteDisusedCreditCards should return false to indicate it was not run.
+  EXPECT_FALSE(personal_data_->DeleteDisusedCreditCards());
+
+  personal_data_->Refresh();
+
+  EXPECT_EQ(1U, personal_data_->GetCreditCards().size());
+}
+
+// Tests that DeleteDisusedCreditCards is not run a second time on the same
+// major version.
+TEST_F(PersonalDataManagerTest, DeleteDisusedCreditCards_OncePerVersion) {
+  // Enable the feature.
+  base::test::ScopedFeatureList scoped_features;
+  scoped_features.InitAndEnableFeature(kAutofillDeleteDisusedCreditCards);
+
+  CreateDeletableExpiredAndDisusedCreditCard();
+
+  // The deletion should be run a first time.
+  EXPECT_TRUE(personal_data_->DeleteDisusedCreditCards());
+  WaitForOnPersonalDataChanged();
+
+  // The profiles should have been deleted.
+  EXPECT_EQ(0U, personal_data_->GetCreditCards().size());
+
+  // Add the card back.
+  CreateDeletableExpiredAndDisusedCreditCard();
+
+  // The cleanup should not be run.
+  EXPECT_FALSE(personal_data_->DeleteDisusedCreditCards());
+
+  // The card should still be present.
+  EXPECT_EQ(1U, personal_data_->GetCreditCards().size());
+}
+
+// Tests that DeleteDisusedCreditCards deletes desired credit cards only.
+TEST_F(PersonalDataManagerTest,
+       DeleteDisusedCreditCards_OnlyDeleteExpiredDisusedLocalCards) {
+  // Enable the feature.
+  base::test::ScopedFeatureList scoped_features;
+  scoped_features.InitAndEnableFeature(kAutofillDeleteDisusedCreditCards);
+
+  const char kHistogramName[] = "Autofill.CreditCardsDeletedForDisuse";
+  auto now = AutofillClock::Now();
+
+  // Create a recently used local card, it is expected to remain.
+  CreditCard credit_card1(base::GenerateGUID(), "https://www.example.com");
+  test::SetCreditCardInfo(&credit_card1, "Alice",
+                          "378282246310005" /* American Express */, "04",
+                          "2999", "1");
+  credit_card1.set_use_date(now - base::TimeDelta::FromDays(4));
+
+  // Create a local card that was expired 400 days ago, but recently used.
+  // It is expected to remain.
+  CreditCard credit_card2(base::GenerateGUID(), "https://www.example.com");
+  test::SetCreditCardInfo(&credit_card2, "Bob",
+                          "378282246310006" /* American Express */, "04",
+                          "1999", "1");
+  credit_card2.set_use_date(now - base::TimeDelta::FromDays(4));
+
+  // Create a local card expired recently, and last used 400 days ago.
+  // It is expected to remain.
+  CreditCard credit_card3(base::GenerateGUID(), "https://www.example.com");
+  test::SetCreditCardInfo(&credit_card3, "Clyde", "4111111111111111" /* Visa */,
+                          "04", "2017", "1");
+  credit_card3.set_use_date(now - base::TimeDelta::FromDays(400));
+
+  // Create a local card expired 400 days ago, and last used 400 days ago.
+  // It is expected to be deleted.
+  CreditCard credit_card4(base::GenerateGUID(), "https://www.example.com");
+  test::SetCreditCardInfo(&credit_card4, "David",
+                          "5105105105105100" /* Mastercard */, "04", "1999",
+                          "1");
+  credit_card4.set_use_date(now - base::TimeDelta::FromDays(400));
+  personal_data_->AddCreditCard(credit_card1);
+  personal_data_->AddCreditCard(credit_card2);
+  personal_data_->AddCreditCard(credit_card3);
+  personal_data_->AddCreditCard(credit_card4);
+
+  // Create a unmasked server card expired 400 days ago, and last used 400
+  // days ago.
+  // It is expected to remain because we do not delete server cards.
+  CreditCard credit_card5(CreditCard::FULL_SERVER_CARD, "c789");
+  test::SetCreditCardInfo(&credit_card5, "Emma", "4234567890123456" /* Visa */,
+                          "04", "1999", "1");
+  credit_card5.set_use_date(now - base::TimeDelta::FromDays(400));
+
+  // Create masked server card expired 400 days ago, and last used 400 days ago.
+  // It is expected to remain because we do not delete server cards.
+  CreditCard credit_card6(CreditCard::MASKED_SERVER_CARD, "c987");
+  test::SetCreditCardInfo(&credit_card6, "Frank", "6543", "01", "1998", "1");
+  credit_card6.set_use_date(now - base::TimeDelta::FromDays(400));
+  credit_card6.SetNetworkForMaskedCard(kVisaCard);
+
+  // Save the server cards and set used_date to desired dates.
+  std::vector<CreditCard> server_cards;
+  server_cards.push_back(credit_card5);
+  server_cards.push_back(credit_card6);
+  test::SetServerCreditCards(autofill_table_, server_cards);
+  personal_data_->UpdateServerCardMetadata(credit_card5);
+  personal_data_->UpdateServerCardMetadata(credit_card6);
+
+  WaitForOnPersonalDataChanged();
+  EXPECT_EQ(6U, personal_data_->GetCreditCards().size());
+
+  // Setup histograms capturing.
+  base::HistogramTester histogram_tester;
+
+  // DeleteDisusedCreditCards should return true to indicate it was run.
+  EXPECT_TRUE(personal_data_->DeleteDisusedCreditCards());
+
+  // Wait for the data to be refreshed.
+  WaitForOnPersonalDataChanged();
+
+  EXPECT_EQ(5U, personal_data_->GetCreditCards().size());
+  std::unordered_set<base::string16> expectedToRemain = {
+      base::UTF8ToUTF16("Alice"), base::UTF8ToUTF16("Bob"),
+      base::UTF8ToUTF16("Clyde"), base::UTF8ToUTF16("Emma"),
+      base::UTF8ToUTF16("Frank")};
+  for (auto* card : personal_data_->GetCreditCards()) {
+    EXPECT_NE(expectedToRemain.end(),
+              expectedToRemain.find(card->GetRawInfo(CREDIT_CARD_NAME_FULL)));
+  }
+
+  // Verify histograms are logged.
+  histogram_tester.ExpectTotalCount(kHistogramName, 1);
+  histogram_tester.ExpectBucketCount(kHistogramName, 1, 1);
+}
+
 // Tests that a new local profile is created if no existing one is a duplicate
 // of the server address. Also tests that the billing address relationship was
 // transferred to the converted address.
@@ -7279,10 +7432,13 @@
   const std::vector<CreditCard*> credit_cards =
       personal_data_->GetCreditCards();
   ASSERT_EQ(2U, addresses.size());
-  ASSERT_EQ(2U, credit_cards.size());
+  ASSERT_EQ(3U, credit_cards.size());
 
   const base::Time disused_threshold =
       AutofillClock::Now() - base::TimeDelta::FromDays(180);
+  const base::Time deletion_threshold =
+      AutofillClock::Now() - base::TimeDelta::FromDays(395);
+
   // Verify that there was a valid address created.
   {
     auto it = std::find_if(
@@ -7328,6 +7484,19 @@
     ASSERT_TRUE(it != credit_cards.end());
     EXPECT_LT((*it)->use_date(), disused_threshold);
   }
+
+  // Verify that there was a disused deletable credit card created.
+  {
+    auto it = std::find_if(
+        credit_cards.begin(), credit_cards.end(), [this](const CreditCard* cc) {
+          return cc->GetInfo(CREDIT_CARD_NAME_FULL,
+                             this->personal_data_->app_locale()) ==
+                 base::UTF8ToUTF16("Charlie Deletable");
+        });
+    ASSERT_TRUE(it != credit_cards.end());
+    EXPECT_LT((*it)->use_date(), deletion_threshold);
+    EXPECT_TRUE((*it)->IsExpired(deletion_threshold));
+  }
 }
 
 }  // namespace autofill
diff --git a/components/autofill/core/common/autofill_pref_names.cc b/components/autofill/core/common/autofill_pref_names.cc
index 4f3b11dc..2361815 100644
--- a/components/autofill/core/common/autofill_pref_names.cc
+++ b/components/autofill/core/common/autofill_pref_names.cc
@@ -26,6 +26,11 @@
 // was run. This routine will be run once per version.
 const char kAutofillLastVersionDeduped[] = "autofill.last_version_deduped";
 
+// Integer that is set to the last version where disused credit cards were
+// deleted. This deletion will be run once per version.
+const char kAutofillLastVersionDisusedCreditCardsDeleted[] =
+    "autofill.last_version_disused_credit_cards_deleted";
+
 // Boolean that is set to the last choice user made when prompted for saving an
 // unmasked server card locally.
 const char kAutofillWalletImportStorageCheckboxState[] =
diff --git a/components/autofill/core/common/autofill_pref_names.h b/components/autofill/core/common/autofill_pref_names.h
index e18a77a..658dab4 100644
--- a/components/autofill/core/common/autofill_pref_names.h
+++ b/components/autofill/core/common/autofill_pref_names.h
@@ -16,6 +16,7 @@
 extern const char kAutofillEnabled[];
 extern const char kAutofillProfileUseDatesFixed[];
 extern const char kAutofillLastVersionDeduped[];
+extern const char kAutofillLastVersionDisusedCreditCardsDeleted[];
 extern const char kAutofillWalletImportEnabled[];
 extern const char kAutofillWalletImportStorageCheckboxState[];
 
diff --git a/components/domain_reliability/google_configs.cc b/components/domain_reliability/google_configs.cc
index e5959d9..87d8a3e5 100644
--- a/components/domain_reliability/google_configs.cc
+++ b/components/domain_reliability/google_configs.cc
@@ -509,6 +509,7 @@
     // Origins without subdomains and with same-origin collectors.
     {"accounts.google.com", false, true, false},
     {"apis.google.com", false, true, false},
+    {"app.google.stackdriver.com", false, true, false},
     {"b.mail.google.com", false, true, false},
     {"chatenabled.mail.google.com", false, true, false},
     {"ddm.google.com", false, true, false},
diff --git a/components/omnibox/browser/history_url_provider.cc b/components/omnibox/browser/history_url_provider.cc
index ece3c01..7bbc259 100644
--- a/components/omnibox/browser/history_url_provider.cc
+++ b/components/omnibox/browser/history_url_provider.cc
@@ -279,8 +279,6 @@
   std::string GetApplicationLocale() const override;
   base::string16 GetRlzParameterValue(bool from_app_list) const override;
   std::string GetSearchClient() const override;
-  std::string InstantExtendedEnabledParam() const override;
-  std::string ForceInstantResultsParam(bool for_prerender) const override;
   std::string GoogleImageSearchSource() const override;
 
  private:
@@ -288,9 +286,6 @@
   std::string application_locale_;
   base::string16 rlz_parameter_value_;
   std::string search_client_;
-  std::string instant_extended_enabled_param_;
-  std::string force_instant_results_param_;
-  std::string force_instant_results_param_for_prerender_;
   std::string google_image_search_source_;
 
   DISALLOW_COPY_AND_ASSIGN(SearchTermsDataSnapshot);
@@ -302,12 +297,6 @@
       application_locale_(search_terms_data.GetApplicationLocale()),
       rlz_parameter_value_(search_terms_data.GetRlzParameterValue(false)),
       search_client_(search_terms_data.GetSearchClient()),
-      instant_extended_enabled_param_(
-          search_terms_data.InstantExtendedEnabledParam()),
-      force_instant_results_param_(
-          search_terms_data.ForceInstantResultsParam(false)),
-      force_instant_results_param_for_prerender_(
-          search_terms_data.ForceInstantResultsParam(true)),
       google_image_search_source_(search_terms_data.GoogleImageSearchSource()) {
 }
 
@@ -331,16 +320,6 @@
   return search_client_;
 }
 
-std::string SearchTermsDataSnapshot::InstantExtendedEnabledParam() const {
-  return instant_extended_enabled_param_;
-}
-
-std::string SearchTermsDataSnapshot::ForceInstantResultsParam(
-    bool for_prerender) const {
-  return for_prerender ? force_instant_results_param_ :
-      force_instant_results_param_for_prerender_;
-}
-
 std::string SearchTermsDataSnapshot::GoogleImageSearchSource() const {
   return google_image_search_source_;
 }
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc
index 44d20f2..adffaf9e 100644
--- a/components/password_manager/core/common/password_manager_features.cc
+++ b/components/password_manager/core/common/password_manager_features.cc
@@ -53,7 +53,7 @@
 
 // Enable the user to trigger password generation manually.
 extern const base::Feature kEnableManualPasswordGeneration = {
-    "enable-manual-password-generation", base::FEATURE_DISABLED_BY_DEFAULT};
+    "enable-manual-password-generation", base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Enables username correction while saving username and password details.
 extern const base::Feature kEnableUsernameCorrection{
diff --git a/components/safe_browsing/triggers/ad_sampler_trigger.cc b/components/safe_browsing/triggers/ad_sampler_trigger.cc
index 2b4dc15..a8abe44 100644
--- a/components/safe_browsing/triggers/ad_sampler_trigger.cc
+++ b/components/safe_browsing/triggers/ad_sampler_trigger.cc
@@ -53,7 +53,8 @@
              : kSamplerFrequencyDisabled;
 }
 
-bool DetectGoogleAd(content::NavigationHandle* navigation_handle) {
+bool DetectGoogleAd(content::RenderFrameHost* render_frame_host,
+                    const GURL& frame_url) {
   // TODO(crbug.com/742397): This function is temporarily copied from
   // c/b/page_load_metrics/observers/ads_page_load_metrics_observer.cc
   // This code should be updated to use shared infrastructure when available.
@@ -65,11 +66,8 @@
   // We use the unsafe method of FindFrameByFrameTreeNodeId because we're not
   // concerned with which process the frame lives on (we only want to know if an
   // ad could be present on the page right now).
-  content::RenderFrameHost* current_frame_host =
-      navigation_handle->GetWebContents()->UnsafeFindFrameByFrameTreeNodeId(
-          navigation_handle->GetFrameTreeNodeId());
-  if (current_frame_host) {
-    const std::string& frame_name = current_frame_host->GetFrameName();
+  if (render_frame_host) {
+    const std::string& frame_name = render_frame_host->GetFrameName();
     if (base::StartsWith(frame_name, "google_ads_iframe",
                          base::CompareCase::SENSITIVE) ||
         base::StartsWith(frame_name, "google_ads_frame",
@@ -78,9 +76,8 @@
     }
   }
 
-  const GURL& url = navigation_handle->GetURL();
-  return url.host_piece() == "tpc.googlesyndication.com" &&
-         base::StartsWith(url.path_piece(), "/safeframe",
+  return frame_url.host_piece() == "tpc.googlesyndication.com" &&
+         base::StartsWith(frame_url.path_piece(), "/safeframe",
                           base::CompareCase::SENSITIVE);
 }
 
@@ -123,15 +120,14 @@
   }
 }
 
-// TODO(lpz): In some cases, this event may be too early for ads to finish
-// loading on the page. Investigate later events or possible timer delays.
-void AdSamplerTrigger::DidFinishNavigation(
-    content::NavigationHandle* navigation_handle) {
+void AdSamplerTrigger::DidFinishLoad(
+    content::RenderFrameHost* render_frame_host,
+    const GURL& validated_url) {
   UMA_HISTOGRAM_ENUMERATION(kAdSamplerTriggerActionMetricName, TRIGGER_CHECK,
                             MAX_ACTIONS);
   // We are using light-weight ad detection logic here so it's safe to do the
   // check on each navigation for the sake of metrics.
-  if (!DetectGoogleAd(navigation_handle)) {
+  if (!DetectGoogleAd(render_frame_host, validated_url)) {
     UMA_HISTOGRAM_ENUMERATION(kAdSamplerTriggerActionMetricName,
                               NO_SAMPLE_NO_AD, MAX_ACTIONS);
     return;
diff --git a/components/safe_browsing/triggers/ad_sampler_trigger.h b/components/safe_browsing/triggers/ad_sampler_trigger.h
index 526e1af..21ca643d 100644
--- a/components/safe_browsing/triggers/ad_sampler_trigger.h
+++ b/components/safe_browsing/triggers/ad_sampler_trigger.h
@@ -11,10 +11,6 @@
 
 class PrefService;
 
-namespace content {
-class NavigationHandle;
-}
-
 namespace history {
 class HistoryService;
 }
@@ -69,8 +65,8 @@
       history::HistoryService* history_service);
 
   // content::WebContentsObserver implementation.
-  void DidFinishNavigation(
-      content::NavigationHandle* navigation_handle) override;
+  void DidFinishLoad(content::RenderFrameHost* render_frame_host,
+                     const GURL& validated_url) override;
 
  private:
   friend class AdSamplerTriggerTest;
diff --git a/components/safe_browsing/triggers/ad_sampler_trigger_unittest.cc b/components/safe_browsing/triggers/ad_sampler_trigger_unittest.cc
index 5e83351..02bc9e5 100644
--- a/components/safe_browsing/triggers/ad_sampler_trigger_unittest.cc
+++ b/components/safe_browsing/triggers/ad_sampler_trigger_unittest.cc
@@ -83,26 +83,31 @@
   // Returns the final RenderFrameHost after navigation commits.
   RenderFrameHost* NavigateFrame(const std::string& url,
                                  RenderFrameHost* frame) {
+    GURL gurl(url);
     auto navigation_simulator =
-        NavigationSimulator::CreateRendererInitiated(GURL(url), frame);
+        NavigationSimulator::CreateRendererInitiated(gurl, frame);
     navigation_simulator->Commit();
-    return navigation_simulator->GetFinalRenderFrameHost();
+    RenderFrameHost* final_frame_host =
+        navigation_simulator->GetFinalRenderFrameHost();
+    // Call the trigger's FinishLoad event handler directly since it doesn't
+    // happen as part of the navigation.
+    safe_browsing::AdSamplerTrigger::FromWebContents(web_contents())
+        ->DidFinishLoad(final_frame_host, gurl);
+    return final_frame_host;
   }
 
   // Returns the final RenderFrameHost after navigation commits.
   RenderFrameHost* NavigateMainFrame(const std::string& url) {
     return NavigateFrame(url, web_contents()->GetMainFrame());
   }
+
   // Returns the final RenderFrameHost after navigation commits.
   RenderFrameHost* CreateAndNavigateSubFrame(const std::string& url,
                                              const std::string& frame_name,
                                              RenderFrameHost* parent) {
     RenderFrameHost* subframe =
         RenderFrameHostTester::For(parent)->AppendChild(frame_name);
-    auto navigation_simulator =
-        NavigationSimulator::CreateRendererInitiated(GURL(url), subframe);
-    navigation_simulator->Commit();
-    return navigation_simulator->GetFinalRenderFrameHost();
+    return NavigateFrame(url, subframe);
   }
 
   MockTriggerManager* get_trigger_manager() { return &trigger_manager_; }
diff --git a/components/search/search.cc b/components/search/search.cc
index 69ea1c1..4a0ae2f5 100644
--- a/components/search/search.cc
+++ b/components/search/search.cc
@@ -4,9 +4,7 @@
 
 #include "components/search/search.h"
 
-#include "base/strings/string_number_conversions.h"
 #include "build/build_config.h"
-#include "components/google/core/browser/google_util.h"
 
 namespace search {
 
@@ -18,22 +16,4 @@
 #endif
 }
 
-uint64_t EmbeddedSearchPageVersion() {
-#if defined(OS_IOS) || defined(OS_ANDROID)
-  return 1;
-#else
-  return 2;
-#endif
-}
-
-std::string InstantExtendedEnabledParam() {
-  return std::string(google_util::kInstantExtendedAPIParam) + "=" +
-         base::Uint64ToString(EmbeddedSearchPageVersion()) + "&";
-}
-
-std::string ForceInstantResultsParam(bool for_prerender) {
-  return (for_prerender || !IsInstantExtendedAPIEnabled()) ? "ion=1&"
-                                                           : std::string();
-}
-
 }  // namespace search
diff --git a/components/search/search.h b/components/search/search.h
index fd3d1f24..f2d04111 100644
--- a/components/search/search.h
+++ b/components/search/search.h
@@ -5,28 +5,12 @@
 #ifndef COMPONENTS_SEARCH_SEARCH_H_
 #define COMPONENTS_SEARCH_SEARCH_H_
 
-#include <string>
-
 namespace search {
 
 // Returns whether the Instant Extended API is enabled. This is always true on
 // desktop and false on mobile.
 bool IsInstantExtendedAPIEnabled();
 
-// Returns a string indicating whether InstantExtended is enabled, suitable
-// for adding as a query string param to the homepage or search requests.
-std::string InstantExtendedEnabledParam();
-
-// Returns a string that will cause the search results page to update
-// incrementally. Currently, Instant Extended passes a different param to
-// search results pages that also has this effect, so by default this function
-// returns the empty string when Instant Extended is enabled. However, when
-// doing instant search result prerendering, we still need to pass this param,
-// as Instant Extended does not cause incremental updates by default for the
-// prerender page. Callers should set |for_prerender| in this case to force
-// the returned string to be non-empty.
-std::string ForceInstantResultsParam(bool for_prerender);
-
 }  // namespace search
 
 #endif  // COMPONENTS_SEARCH_SEARCH_H_
diff --git a/components/search/search_unittest.cc b/components/search/search_unittest.cc
index 6c86c76d..6d5cf8f 100644
--- a/components/search/search_unittest.cc
+++ b/components/search/search_unittest.cc
@@ -15,15 +15,6 @@
   EXPECT_TRUE(IsInstantExtendedAPIEnabled());
 }
 
-TEST(SearchTest, ForceInstantResultsParam) {
-  EXPECT_EQ("ion=1&", ForceInstantResultsParam(true));
-  EXPECT_EQ(std::string(), ForceInstantResultsParam(false));
-}
-
-TEST(SearchTest, InstantExtendedEnabledParam) {
-  EXPECT_EQ("espv=2&", InstantExtendedEnabledParam());
-}
-
 #endif  // !defined(OS_IOS) && !defined(OS_ANDROID)
 
 }  // namespace search
diff --git a/components/search_engines/search_terms_data.cc b/components/search_engines/search_terms_data.cc
index a976227..8226775 100644
--- a/components/search_engines/search_terms_data.cc
+++ b/components/search_engines/search_terms_data.cc
@@ -54,15 +54,6 @@
   return std::string();
 }
 
-std::string SearchTermsData::InstantExtendedEnabledParam() const {
-  return std::string();
-}
-
-std::string SearchTermsData::ForceInstantResultsParam(
-    bool for_prerender) const {
-  return std::string();
-}
-
 std::string SearchTermsData::GoogleImageSearchSource() const {
   return std::string();
 }
diff --git a/components/search_engines/search_terms_data.h b/components/search_engines/search_terms_data.h
index 302c906..c8a67af 100644
--- a/components/search_engines/search_terms_data.h
+++ b/components/search_engines/search_terms_data.h
@@ -49,14 +49,6 @@
   // This implementation returns the empty string.
   virtual std::string GetSuggestRequestIdentifier() const;
 
-  // Returns a string indicating whether InstantExtended is enabled, suitable
-  // for adding as a query string param to the homepage or search requests.
-  virtual std::string InstantExtendedEnabledParam() const;
-
-  // Returns a string that will cause the search results page to update
-  // incrementally.
-  virtual std::string ForceInstantResultsParam(bool for_prerender) const;
-
   // Returns the value to use for replacements of type
   // GOOGLE_IMAGE_SEARCH_SOURCE.
   virtual std::string GoogleImageSearchSource() const;
diff --git a/content/browser/media/media_color_browsertest.cc b/content/browser/media/media_color_browsertest.cc
index 82fbe3d..6bc9300c 100644
--- a/content/browser/media/media_color_browsertest.cc
+++ b/content/browser/media/media_color_browsertest.cc
@@ -22,13 +22,7 @@
 
 // Android doesn't support Theora.
 #if !defined(OS_ANDROID)
-// This fails on Linux: http://crbug.com/767926.
-#if defined(OS_LINUX)
-#define MAYBE_Yuv420pTheora DISABLED_Yuv420pTheora
-#else
-#define MAYBE_Yuv420pTheora Yuv420pTheora
-#endif
-IN_PROC_BROWSER_TEST_F(MediaColorTest, MAYBE_Yuv420pTheora) {
+IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv420pTheora) {
   RunColorTest("yuv420p.ogv");
 }
 
@@ -41,13 +35,7 @@
 }
 #endif  // !defined(OS_ANDROID)
 
-// This fails on Linux: http://crbug.com/767926.
-#if defined(OS_LINUX)
-#define MAYBE_Yuv420pVp8 DISABLED_Yuv420pVp8
-#else
-#define MAYBE_Yuv420pVp8 Yuv420pVp8
-#endif
-IN_PROC_BROWSER_TEST_F(MediaColorTest, MAYBE_Yuv420pVp8) {
+IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv420pVp8) {
   RunColorTest("yuv420p.webm");
 }
 
@@ -58,8 +46,8 @@
 #if BUILDFLAG(USE_PROPRIETARY_CODECS)
 
 // This fails on some Android devices: http://crbug.com/649199,
-// and Linux: http://crbug.com/767926.
-#if defined(OS_LINUX) || defined(OS_ANDROID)
+// http://crbug.com/649185.
+#if defined(OS_ANDROID)
 #define MAYBE_Yuv420pH264 DISABLED_Yuv420pH264
 #else
 #define MAYBE_Yuv420pH264 Yuv420pH264
@@ -68,9 +56,9 @@
   RunColorTest("yuv420p.mp4");
 }
 
-// This test fails on Android: http://crbug.com/647818, OSX:
-// http://crbug.com/647838 and Linux: http://crbug.com/767926.
-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_ANDROID)
+// This test fails on Android: http://crbug.com/647818, and OSX:
+// http://crbug.com/647838.
+#if defined(OS_MACOSX) || defined(OS_ANDROID)
 #define MAYBE_Yuvj420pH264 DISABLED_Yuvj420pH264
 #else
 #define MAYBE_Yuvj420pH264 Yuvj420pH264
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
index 7ed8796..1d5db39 100644
--- a/content/browser/service_worker/service_worker_version.cc
+++ b/content/browser/service_worker/service_worker_version.cc
@@ -1489,7 +1489,11 @@
   }
 
   // Keep the live registration while starting the worker.
-  start_callbacks_.push_back(std::move(callback));
+  start_callbacks_.push_back(base::BindOnce(
+      [](StatusCallback callback,
+         scoped_refptr<ServiceWorkerRegistration> protect,
+         ServiceWorkerStatusCode status) { std::move(callback).Run(status); },
+      std::move(callback), protect));
 
   if (running_status() == EmbeddedWorkerStatus::STOPPED)
     StartWorkerInternal();
diff --git a/content/renderer/manifest/manifest_manager.cc b/content/renderer/manifest/manifest_manager.cc
index 938ecb6..55d0aa82 100644
--- a/content/renderer/manifest/manifest_manager.cc
+++ b/content/renderer/manifest/manifest_manager.cc
@@ -89,8 +89,10 @@
   // During document load, coalescing is disabled to maintain relative ordering
   // of this notification and the favicon URL reporting.
   if (!render_frame()->GetWebFrame()->IsLoading()) {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::BindOnce(&ManifestManager::ReportManifestChange,
+    render_frame()
+        ->GetTaskRunner(blink::TaskType::kUnspecedLoading)
+        ->PostTask(FROM_HERE,
+                   base::BindOnce(&ManifestManager::ReportManifestChange,
                                   weak_factory_.GetWeakPtr()));
     return;
   }
diff --git a/ios/chrome/browser/search_engines/ui_thread_search_terms_data.cc b/ios/chrome/browser/search_engines/ui_thread_search_terms_data.cc
index 03eaaba..d68b7f6 100644
--- a/ios/chrome/browser/search_engines/ui_thread_search_terms_data.cc
+++ b/ios/chrome/browser/search_engines/ui_thread_search_terms_data.cc
@@ -92,17 +92,6 @@
   return "chrome-ext-ansg";
 }
 
-std::string UIThreadSearchTermsData::InstantExtendedEnabledParam() const {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  return search::InstantExtendedEnabledParam();
-}
-
-std::string UIThreadSearchTermsData::ForceInstantResultsParam(
-    bool for_prerender) const {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  return search::ForceInstantResultsParam(for_prerender);
-}
-
 std::string UIThreadSearchTermsData::GoogleImageSearchSource() const {
   DCHECK(thread_checker_.CalledOnValidThread());
   std::string version(version_info::GetProductName() + " " +
diff --git a/ios/chrome/browser/search_engines/ui_thread_search_terms_data.h b/ios/chrome/browser/search_engines/ui_thread_search_terms_data.h
index 32d493a5f..71001cf 100644
--- a/ios/chrome/browser/search_engines/ui_thread_search_terms_data.h
+++ b/ios/chrome/browser/search_engines/ui_thread_search_terms_data.h
@@ -26,8 +26,6 @@
   std::string GetSearchClient() const override;
   std::string GetSuggestClient() const override;
   std::string GetSuggestRequestIdentifier() const override;
-  std::string InstantExtendedEnabledParam() const override;
-  std::string ForceInstantResultsParam(bool for_prerender) const override;
   std::string GoogleImageSearchSource() const override;
 
  private:
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
index 9dcae0d9..7580b85 100644
--- a/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
+++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
@@ -90,6 +90,11 @@
         performAction:grey_typeText(@"chrome://newtab/#most_visited\n")];
   }
 
+  // Clear the pasteboard in case there is a URL copied, triggering an omnibox
+  // suggestion.
+  UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
+  [pasteboard setValue:@"" forPasteboardType:UIPasteboardNameGeneral];
+
   [self closeAllTabs];
   ios::ChromeBrowserState* browserState =
       chrome_test_util::GetOriginalBrowserState();
diff --git a/ios/chrome/browser/ui/main/main_view_controller.mm b/ios/chrome/browser/ui/main/main_view_controller.mm
index c48009b..10f8247 100644
--- a/ios/chrome/browser/ui/main/main_view_controller.mm
+++ b/ios/chrome/browser/ui/main/main_view_controller.mm
@@ -52,6 +52,9 @@
 - (void)presentViewController:(UIViewController*)viewControllerToPresent
                      animated:(BOOL)flag
                    completion:(void (^)())completion {
+  // If there is no activeViewController then this call will get inadvertently
+  // dropped.
+  DCHECK(self.activeViewController);
   [self.activeViewController presentViewController:viewControllerToPresent
                                           animated:flag
                                         completion:completion];
@@ -59,6 +62,9 @@
 
 - (void)dismissViewControllerAnimated:(BOOL)flag
                            completion:(void (^)())completion {
+  // If there is no activeViewController then this call will get inadvertently
+  // dropped.
+  DCHECK(self.activeViewController);
   [self.activeViewController dismissViewControllerAnimated:flag
                                                 completion:completion];
 }
diff --git a/ios/chrome/browser/ui/toolbar/web_toolbar_controller.mm b/ios/chrome/browser/ui/toolbar/web_toolbar_controller.mm
index 2418551..97d713b4 100644
--- a/ios/chrome/browser/ui/toolbar/web_toolbar_controller.mm
+++ b/ios/chrome/browser/ui/toolbar/web_toolbar_controller.mm
@@ -316,6 +316,13 @@
 - (void)handleLongPress:(UILongPressGestureRecognizer*)gesture;
 - (void)setImagesForNavButton:(UIButton*)button
         withTabHistoryVisible:(BOOL)tabHistoryVisible;
+// Returns a map where the keys are names of text-to-speech notifications and
+// the values are the selectors to use for these notifications.
++ (const std::map<__strong NSString*, SEL>&)selectorsForTTSNotificationNames;
+// Starts or stops observing the NSNotifications from
+// |-selectorsForTTSNotificationNames|.
+- (void)startObservingTTSNotifications;
+- (void)stopObservingTTSNotifications;
 // Received when a TTS player has received audio data.
 - (void)audioReadyForPlayback:(NSNotification*)notification;
 // Updates the TTS button depending on whether or not TTS is currently playing.
@@ -649,26 +656,8 @@
     [_voiceSearchButton setEnabled:NO];
   }
 
-  // Register for text-to-speech (TTS) events on tablet.
-  if (idiom == IPAD_IDIOM) {
-    NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter];
-    [defaultCenter addObserver:self
-                      selector:@selector(audioReadyForPlayback:)
-                          name:kTTSAudioReadyForPlaybackNotification
-                        object:nil];
-    [defaultCenter addObserver:self
-                      selector:@selector(updateIsTTSPlaying:)
-                          name:kTTSWillStartPlayingNotification
-                        object:nil];
-    [defaultCenter addObserver:self
-                      selector:@selector(updateIsTTSPlaying:)
-                          name:kTTSDidStopPlayingNotification
-                        object:nil];
-    [defaultCenter addObserver:self
-                      selector:@selector(moveVoiceOverToVoiceSearchButton)
-                          name:kVoiceSearchWillHideNotification
-                        object:nil];
-  }
+  [self startObservingTTSNotifications];
+
   [self.view setDelegate:self];
 
   if (idiom == IPHONE_IDIOM) {
@@ -702,6 +691,21 @@
 }
 
 #pragma mark -
+#pragma mark Acessors
+
+- (void)setDelegate:(id<WebToolbarDelegate>)delegate {
+  if (_delegate == delegate)
+    return;
+
+  // TTS notifications cannot be handled without a delegate.
+  if (_delegate)
+    [self stopObservingTTSNotifications];
+  _delegate = delegate;
+  if (_delegate)
+    [self startObservingTTSNotifications];
+}
+
+#pragma mark -
 #pragma mark Public methods.
 
 - (void)updateToolbarState {
@@ -1731,6 +1735,48 @@
     _forwardButtonMode = newMode;
 }
 
++ (const std::map<__strong NSString*, SEL>&)selectorsForTTSNotificationNames {
+  static std::map<__strong NSString*, SEL> selectorsForNotifications;
+  static dispatch_once_t onceToken;
+  dispatch_once(&onceToken, ^{
+    selectorsForNotifications[kTTSAudioReadyForPlaybackNotification] =
+        @selector(audioReadyForPlayback:);
+    selectorsForNotifications[kTTSWillStartPlayingNotification] =
+        @selector(updateIsTTSPlaying:);
+    selectorsForNotifications[kTTSDidStopPlayingNotification] =
+        @selector(updateIsTTSPlaying:);
+    selectorsForNotifications[kVoiceSearchWillHideNotification] =
+        @selector(moveVoiceOverToVoiceSearchButton);
+  });
+  return selectorsForNotifications;
+}
+
+- (void)startObservingTTSNotifications {
+  // The toolbar is only used to play text-to-speech search results on iPads.
+  if (IsIPadIdiom()) {
+    NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter];
+    const auto& selectorsForTTSNotifications =
+        [[self class] selectorsForTTSNotificationNames];
+    for (const auto& selectorForNotification : selectorsForTTSNotifications) {
+      [defaultCenter addObserver:self
+                        selector:selectorForNotification.second
+                            name:selectorForNotification.first
+                          object:nil];
+    }
+  }
+}
+
+- (void)stopObservingTTSNotifications {
+  NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter];
+  const auto& selectorsForTTSNotifications =
+      [[self class] selectorsForTTSNotificationNames];
+  for (const auto& selectorForNotification : selectorsForTTSNotifications) {
+    [defaultCenter removeObserver:self
+                             name:selectorForNotification.first
+                           object:nil];
+  }
+}
+
 - (void)audioReadyForPlayback:(NSNotification*)notification {
   if (![_voiceSearchButton isHidden]) {
     // Only trigger TTS playback when the voice search button is visible.
diff --git a/net/disk_cache/entry_unittest.cc b/net/disk_cache/entry_unittest.cc
index 1f552f42..f81c6e5 100644
--- a/net/disk_cache/entry_unittest.cc
+++ b/net/disk_cache/entry_unittest.cc
@@ -4328,6 +4328,74 @@
   entry->Close();
 }
 
+TEST_F(DiskCacheEntryTest, SimpleCacheSparseErrorHandling) {
+  // If there is corruption in sparse file, we should delete all the files
+  // before returning the failure. Further additional sparse operations in
+  // failure state should fail gracefully.
+  SetSimpleCacheMode();
+  InitCache();
+
+  std::string key("a key");
+
+  uint64_t hash = disk_cache::simple_util::GetEntryHashKey(key);
+  base::FilePath path_0 = cache_path_.AppendASCII(
+      disk_cache::simple_util::GetFilenameFromEntryHashAndFileIndex(hash, 0));
+  base::FilePath path_s = cache_path_.AppendASCII(
+      disk_cache::simple_util::GetSparseFilenameFromEntryHash(hash));
+
+  disk_cache::Entry* entry = nullptr;
+  ASSERT_THAT(CreateEntry(key, &entry), IsOk());
+
+  const int kSize = 1024;
+  scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize));
+  CacheTestFillBuffer(buffer->data(), kSize, false);
+
+  EXPECT_EQ(kSize, WriteSparseData(entry, 0, buffer.get(), kSize));
+  entry->Close();
+
+  disk_cache::SimpleBackendImpl::FlushWorkerPoolForTesting();
+  EXPECT_TRUE(base::PathExists(path_0));
+  EXPECT_TRUE(base::PathExists(path_s));
+
+  // Now corrupt the _s file in a way that makes it look OK on open, but not on
+  // read.
+  base::File file_s(path_s, base::File::FLAG_OPEN | base::File::FLAG_READ |
+                                base::File::FLAG_WRITE);
+  ASSERT_TRUE(file_s.IsValid());
+  file_s.SetLength(sizeof(disk_cache::SimpleFileHeader) +
+                   sizeof(disk_cache::SimpleFileSparseRangeHeader) +
+                   key.size());
+  file_s.Close();
+
+  // Re-open, it should still be fine.
+  ASSERT_THAT(OpenEntry(key, &entry), IsOk());
+
+  // Read should fail though.
+  EXPECT_EQ(net::ERR_CACHE_READ_FAILURE,
+            ReadSparseData(entry, 0, buffer.get(), kSize));
+
+  // At the point read returns to us, the files should already been gone.
+  EXPECT_FALSE(base::PathExists(path_0));
+  EXPECT_FALSE(base::PathExists(path_s));
+
+  // Re-trying should still fail. Not DCHECK-fail.
+  EXPECT_EQ(net::ERR_FAILED, ReadSparseData(entry, 0, buffer.get(), kSize));
+
+  // Similarly for other ops.
+  EXPECT_EQ(net::ERR_FAILED, WriteSparseData(entry, 0, buffer.get(), kSize));
+  net::TestCompletionCallback cb;
+  int64_t start;
+  int rv = entry->GetAvailableRange(0, 1024, &start, cb.callback());
+  EXPECT_EQ(net::ERR_FAILED, cb.GetResult(rv));
+
+  entry->Close();
+  disk_cache::FlushCacheThreadForTesting();
+
+  // Closing shouldn't resurrect files, either.
+  EXPECT_FALSE(base::PathExists(path_0));
+  EXPECT_FALSE(base::PathExists(path_s));
+}
+
 class DiskCacheSimplePrefetchTest : public DiskCacheEntryTest {
  public:
   DiskCacheSimplePrefetchTest()
diff --git a/net/disk_cache/simple/simple_entry_impl.cc b/net/disk_cache/simple/simple_entry_impl.cc
index 0e860d7..d0a4289 100644
--- a/net/disk_cache/simple/simple_entry_impl.cc
+++ b/net/disk_cache/simple/simple_entry_impl.cc
@@ -1020,6 +1020,20 @@
         CreateNetLogSparseOperationCallback(sparse_offset, buf_len));
   }
 
+  if (state_ == STATE_FAILURE || state_ == STATE_UNINITIALIZED) {
+    if (net_log_.IsCapturing()) {
+      net_log_.AddEvent(
+          net::NetLogEventType::SIMPLE_CACHE_ENTRY_READ_SPARSE_END,
+          CreateNetLogReadWriteCompleteCallback(net::ERR_FAILED));
+    }
+    if (!callback.is_null()) {
+      base::ThreadTaskRunnerHandle::Get()->PostTask(
+          FROM_HERE, base::Bind(callback, net::ERR_FAILED));
+    }
+    // |this| may be destroyed after return here.
+    return;
+  }
+
   DCHECK_EQ(STATE_READY, state_);
   state_ = STATE_IO_PENDING;
 
@@ -1052,6 +1066,20 @@
         CreateNetLogSparseOperationCallback(sparse_offset, buf_len));
   }
 
+  if (state_ == STATE_FAILURE || state_ == STATE_UNINITIALIZED) {
+    if (net_log_.IsCapturing()) {
+      net_log_.AddEvent(
+          net::NetLogEventType::SIMPLE_CACHE_ENTRY_WRITE_SPARSE_END,
+          CreateNetLogReadWriteCompleteCallback(net::ERR_FAILED));
+    }
+    if (!callback.is_null()) {
+      base::ThreadTaskRunnerHandle::Get()->PostTask(
+          FROM_HERE, base::Bind(callback, net::ERR_FAILED));
+    }
+    // |this| may be destroyed after return here.
+    return;
+  }
+
   DCHECK_EQ(STATE_READY, state_);
   state_ = STATE_IO_PENDING;
 
@@ -1089,6 +1117,15 @@
   DCHECK(io_thread_checker_.CalledOnValidThread());
   ScopedOperationRunner operation_runner(this);
 
+  if (state_ == STATE_FAILURE || state_ == STATE_UNINITIALIZED) {
+    if (!callback.is_null()) {
+      base::ThreadTaskRunnerHandle::Get()->PostTask(
+          FROM_HERE, base::Bind(callback, net::ERR_FAILED));
+    }
+    // |this| may be destroyed after return here.
+    return;
+  }
+
   DCHECK_EQ(STATE_READY, state_);
   state_ = STATE_IO_PENDING;
 
diff --git a/net/disk_cache/simple/simple_synchronous_entry.cc b/net/disk_cache/simple/simple_synchronous_entry.cc
index 5b86b77..953c20a 100644
--- a/net/disk_cache/simple/simple_synchronous_entry.cc
+++ b/net/disk_cache/simple/simple_synchronous_entry.cc
@@ -490,6 +490,7 @@
 
       int len_to_read = std::min(buf_len, range_len_after_offset);
       if (!ReadSparseRange(found_range, net_offset, len_to_read, buf)) {
+        Doom();
         *out_result = net::ERR_CACHE_READ_FAILURE;
         return;
       }
@@ -508,6 +509,7 @@
     int range_len = base::saturated_cast<int>(found_range->length);
     int len_to_read = std::min(buf_len - read_so_far, range_len);
     if (!ReadSparseRange(found_range, 0, len_to_read, buf + read_so_far)) {
+      Doom();
       *out_result = net::ERR_CACHE_READ_FAILURE;
       return;
     }
@@ -533,6 +535,7 @@
   int appended_so_far = 0;
 
   if (!sparse_file_open() && !CreateSparseFile()) {
+    Doom();
     *out_result = net::ERR_CACHE_WRITE_FAILURE;
     return;
   }
@@ -565,6 +568,7 @@
 
       int len_to_write = std::min(buf_len, range_len_after_offset);
       if (!WriteSparseRange(found_range, net_offset, len_to_write, buf)) {
+        Doom();
         *out_result = net::ERR_CACHE_WRITE_FAILURE;
         return;
       }
@@ -583,6 +587,7 @@
       if (!AppendSparseRange(offset + written_so_far,
                              len_to_append,
                              buf + written_so_far)) {
+        Doom();
         *out_result = net::ERR_CACHE_WRITE_FAILURE;
         return;
       }
@@ -595,6 +600,7 @@
                           0,
                           len_to_write,
                           buf + written_so_far)) {
+      Doom();
       *out_result = net::ERR_CACHE_WRITE_FAILURE;
       return;
     }
@@ -607,6 +613,7 @@
     if (!AppendSparseRange(offset + written_so_far,
                            len_to_append,
                            buf + written_so_far)) {
+      Doom();
       *out_result = net::ERR_CACHE_WRITE_FAILURE;
       return;
     }
diff --git a/net/disk_cache/simple/simple_util.h b/net/disk_cache/simple/simple_util.h
index ad84607..9ea7548 100644
--- a/net/disk_cache/simple/simple_util.h
+++ b/net/disk_cache/simple/simple_util.h
@@ -47,11 +47,13 @@
     int file_index);
 
 // Same as |GetFilenameFromKeyAndIndex| above, but using a hex string.
-std::string GetFilenameFromEntryHashAndFileIndex(uint64_t entry_hash,
-                                                 int file_index);
+NET_EXPORT_PRIVATE std::string GetFilenameFromEntryHashAndFileIndex(
+    uint64_t entry_hash,
+    int file_index);
 
 // Given a |key| for an entry, returns the name of the sparse data file.
-std::string GetSparseFilenameFromEntryHash(uint64_t entry_hash);
+NET_EXPORT_PRIVATE std::string GetSparseFilenameFromEntryHash(
+    uint64_t entry_hash);
 
 // Given the size of a key, the size in bytes of the header at the beginning
 // of a simple cache file.
diff --git a/net/dns/dns_protocol.h b/net/dns/dns_protocol.h
index 2c4478c4..71ed31c 100644
--- a/net/dns/dns_protocol.h
+++ b/net/dns/dns_protocol.h
@@ -123,6 +123,7 @@
 static const uint16_t kTypeTXT = 16;
 static const uint16_t kTypeAAAA = 28;
 static const uint16_t kTypeSRV = 33;
+static const uint16_t kTypeOPT = 41;
 static const uint16_t kTypeNSEC = 47;
 
 // DNS reply codes (RCODEs).
diff --git a/net/dns/dns_query.cc b/net/dns/dns_query.cc
index ac74ca4..2ee2a32e 100644
--- a/net/dns/dns_query.cc
+++ b/net/dns/dns_query.cc
@@ -10,6 +10,7 @@
 #include "net/base/io_buffer.h"
 #include "net/dns/dns_protocol.h"
 #include "net/dns/dns_util.h"
+#include "net/dns/record_rdata.h"
 
 namespace net {
 
@@ -17,15 +18,31 @@
 
 const size_t kHeaderSize = sizeof(dns_protocol::Header);
 
+// Size of the fixed part of an OPT RR:
+// https://tools.ietf.org/html/rfc6891#section-6.1.2
+static const size_t kOptRRFixedSize = 11;
+
+// https://tools.ietf.org/html/rfc6891#section-6.2.5
+// TODO(robpercival): Determine a good value for this programmatically.
+const uint16_t kMaxUdpPayloadSize = 4096;
+
+size_t OptRecordSize(const OptRecordRdata* rdata) {
+  return rdata == nullptr ? 0 : kOptRRFixedSize + rdata->buf().size();
+}
+
 }  // namespace
 
 // DNS query consists of a 12-byte header followed by a question section.
 // For details, see RFC 1035 section 4.1.1.  This header template sets RD
 // bit, which directs the name server to pursue query recursively, and sets
 // the QDCOUNT to 1, meaning the question section has a single entry.
-DnsQuery::DnsQuery(uint16_t id, const base::StringPiece& qname, uint16_t qtype)
+DnsQuery::DnsQuery(uint16_t id,
+                   const base::StringPiece& qname,
+                   uint16_t qtype,
+                   const OptRecordRdata* opt_rdata)
     : qname_size_(qname.size()),
-      io_buffer_(new IOBufferWithSize(kHeaderSize + question_size())),
+      io_buffer_(new IOBufferWithSize(kHeaderSize + question_size() +
+                                      OptRecordSize(opt_rdata))),
       header_(reinterpret_cast<dns_protocol::Header*>(io_buffer_->data())) {
   DCHECK(!DNSDomainToString(qname).empty());
   *header_ = {};
@@ -35,10 +52,27 @@
 
   // Write question section after the header.
   base::BigEndianWriter writer(io_buffer_->data() + kHeaderSize,
-                               question_size());
+                               io_buffer_->size() - kHeaderSize);
   writer.WriteBytes(qname.data(), qname.size());
   writer.WriteU16(qtype);
   writer.WriteU16(dns_protocol::kClassIN);
+
+  if (opt_rdata != nullptr) {
+    header_->arcount = base::HostToNet16(1);
+    // Write OPT pseudo-resource record.
+    writer.WriteU8(0);                       // empty domain name (root domain)
+    writer.WriteU16(OptRecordRdata::kType);  // type
+    writer.WriteU16(kMaxUdpPayloadSize);     // class
+    // ttl (next 3 fields)
+    writer.WriteU8(0);  // rcode does not apply to requests
+    writer.WriteU8(0);  // version
+    // TODO(robpercival): Set "DNSSEC OK" flag if/when DNSSEC is supported:
+    // https://tools.ietf.org/html/rfc3225#section-3
+    writer.WriteU16(0);  // flags
+    // rdata
+    writer.WriteU16(opt_rdata->buf().size());  // rdata length
+    writer.WriteBytes(opt_rdata->buf().data(), opt_rdata->buf().size());
+  }
 }
 
 DnsQuery::~DnsQuery() {
diff --git a/net/dns/dns_query.h b/net/dns/dns_query.h
index 8266a72..b68772e 100644
--- a/net/dns/dns_query.h
+++ b/net/dns/dns_query.h
@@ -17,6 +17,8 @@
 
 namespace net {
 
+class OptRecordRdata;
+
 namespace dns_protocol {
 struct Header;
 }
@@ -24,12 +26,16 @@
 class IOBufferWithSize;
 
 // Represents on-the-wire DNS query message as an object.
-// TODO(szym): add support for the OPT pseudo-RR (EDNS0/DNSSEC).
 class NET_EXPORT_PRIVATE DnsQuery {
  public:
   // Constructs a query message from |qname| which *MUST* be in a valid
   // DNS name format, and |qtype|. The qclass is set to IN.
-  DnsQuery(uint16_t id, const base::StringPiece& qname, uint16_t qtype);
+  // If opt_rdata is not null, an OPT record will be added to the "Additional"
+  // section of the query.
+  DnsQuery(uint16_t id,
+           const base::StringPiece& qname,
+           uint16_t qtype,
+           const OptRecordRdata* opt_rdata = nullptr);
   ~DnsQuery();
 
   // Clones |this| verbatim, with ID field of the header set to |id|.
diff --git a/net/dns/dns_query_unittest.cc b/net/dns/dns_query_unittest.cc
index 775fb6c7..7ee93008 100644
--- a/net/dns/dns_query_unittest.cc
+++ b/net/dns/dns_query_unittest.cc
@@ -6,12 +6,20 @@
 
 #include "net/base/io_buffer.h"
 #include "net/dns/dns_protocol.h"
+#include "net/dns/record_rdata.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 
 namespace {
 
+using ::testing::ElementsAreArray;
+
+std::tuple<char*, size_t> AsTuple(const IOBufferWithSize* buf) {
+  return std::make_tuple(buf->data(), buf->size());
+}
+
 TEST(DnsQueryTest, Constructor) {
   // This includes \0 at the end.
   const char qname_data[] = "\x03""www""\x07""example""\x03""com";
@@ -33,9 +41,7 @@
   base::StringPiece qname(qname_data, sizeof(qname_data));
   DnsQuery q1(0xbeef, qname, dns_protocol::kTypeA);
   EXPECT_EQ(dns_protocol::kTypeA, q1.qtype());
-
-  ASSERT_EQ(static_cast<int>(sizeof(query_data)), q1.io_buffer()->size());
-  EXPECT_EQ(0, memcmp(q1.io_buffer()->data(), query_data, sizeof(query_data)));
+  EXPECT_THAT(AsTuple(q1.io_buffer()), ElementsAreArray(query_data));
   EXPECT_EQ(qname, q1.qname());
 
   base::StringPiece question(reinterpret_cast<const char*>(query_data) + 12,
@@ -57,6 +63,52 @@
   EXPECT_EQ(q1.question(), q2->question());
 }
 
+TEST(DnsQueryTest, EDNS0) {
+  // This includes \0 at the end.
+  const char qname_data[] =
+      "\x03"
+      "www"
+      "\x07"
+      "example"
+      "\x03"
+      "com";
+  const uint8_t query_data[] = {
+      // Header
+      0xbe, 0xef, 0x01, 0x00,  // Flags -- set RD (recursion desired) bit.
+      // Set QDCOUNT (question count) and ARCOUNT (additional count) to 1, all
+      // the rest are 0 for a query.
+      0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+      // Question
+      0x03, 'w', 'w', 'w',  // QNAME: www.example.com in DNS format.
+      0x07, 'e', 'x', 'a', 'm', 'p', 'l', 'e', 0x03, 'c', 'o', 'm', 0x00,
+
+      0x00, 0x01,  // QTYPE: A query.
+      0x00, 0x01,  // QCLASS: IN class.
+
+      // Additional
+      0x00,                    // QNAME: empty (root domain)
+      0x00, 0x29,              // TYPE: OPT
+      0x10, 0x00,              // CLASS: max UDP payload size
+      0x00, 0x00, 0x00, 0x00,  // TTL: rcode, version and flags
+      0x00, 0x08,              // RDATA length
+      0x00, 0xFF,              // OPT code
+      0x00, 0x04,              // OPT data size
+      0xDE, 0xAD, 0xBE, 0xEF   // OPT data
+  };
+
+  base::StringPiece qname(qname_data, sizeof(qname_data));
+  OptRecordRdata opt_rdata;
+  opt_rdata.AddOpt(OptRecordRdata::Opt(255, "\xde\xad\xbe\xef"));
+  DnsQuery q1(0xbeef, qname, dns_protocol::kTypeA, &opt_rdata);
+  EXPECT_EQ(dns_protocol::kTypeA, q1.qtype());
+
+  EXPECT_THAT(AsTuple(q1.io_buffer()), ElementsAreArray(query_data));
+
+  base::StringPiece question(reinterpret_cast<const char*>(query_data) + 12,
+                             21);
+  EXPECT_EQ(question, q1.question());
+}
+
 }  // namespace
 
 }  // namespace net
diff --git a/net/dns/dns_response_unittest.cc b/net/dns/dns_response_unittest.cc
index 5b0635c..af3f1d9 100644
--- a/net/dns/dns_response_unittest.cc
+++ b/net/dns/dns_response_unittest.cc
@@ -161,7 +161,7 @@
       0x00, 0x01,  // 1 question
       0x00, 0x02,  // 2 RRs (answers)
       0x00, 0x00,  // 0 authority RRs
-      0x00, 0x00,  // 0 additional RRs
+      0x00, 0x01,  // 1 additional RRs
 
       // Question
       // This part is echoed back from the respective query.
@@ -188,6 +188,16 @@
       0x00, 0x35, 0x00, 0x04,  // RDLENGTH is 4 bytes.
       0x4a, 0x7d,              // RDATA is the IP: 74.125.95.121
       0x5f, 0x79,
+
+      // Additional 1
+      0x00,                    // NAME is empty (root domain).
+      0x00, 0x29,              // TYPE is OPT.
+      0x10, 0x00,              // CLASS is max UDP payload size (4096).
+      0x00, 0x00, 0x00, 0x00,  // TTL (4 bytes) is rcode, version and flags.
+      0x00, 0x08,              // RDLENGTH
+      0x00, 0xFF,              // OPT code
+      0x00, 0x04,              // OPT data size
+      0xDE, 0xAD, 0xBE, 0xEF   // OPT data
   };
 
   DnsResponse resp;
@@ -216,6 +226,7 @@
   EXPECT_EQ(0x8180, resp.flags());
   EXPECT_EQ(0x0, resp.rcode());
   EXPECT_EQ(2u, resp.answer_count());
+  EXPECT_EQ(1u, resp.additional_answer_count());
 
   // Check question access.
   EXPECT_EQ(query->qname(), resp.qname());
@@ -227,6 +238,8 @@
   EXPECT_TRUE(parser.ReadRecord(&record));
   EXPECT_FALSE(parser.AtEnd());
   EXPECT_TRUE(parser.ReadRecord(&record));
+  EXPECT_FALSE(parser.AtEnd());
+  EXPECT_TRUE(parser.ReadRecord(&record));
   EXPECT_TRUE(parser.AtEnd());
   EXPECT_FALSE(parser.ReadRecord(&record));
 }
diff --git a/net/dns/record_parsed.cc b/net/dns/record_parsed.cc
index 750bc13..a7c7db68 100644
--- a/net/dns/record_parsed.cc
+++ b/net/dns/record_parsed.cc
@@ -60,6 +60,9 @@
     case NsecRecordRdata::kType:
       rdata = NsecRecordRdata::Create(record.rdata, *parser);
       break;
+    case OptRecordRdata::kType:
+      rdata = OptRecordRdata::Create(record.rdata, *parser);
+      break;
     default:
       DVLOG(1) << "Unknown RData type for received record: " << record.type;
       return std::unique_ptr<const RecordParsed>();
diff --git a/net/dns/record_rdata.cc b/net/dns/record_rdata.cc
index ff9434b..9282b0ed 100644
--- a/net/dns/record_rdata.cc
+++ b/net/dns/record_rdata.cc
@@ -4,6 +4,8 @@
 
 #include "net/dns/record_rdata.h"
 
+#include <numeric>
+
 #include "base/big_endian.h"
 #include "net/dns/dns_protocol.h"
 #include "net/dns/dns_response.h"
@@ -276,4 +278,66 @@
   return (bitmap_[byte_num] & (1 << bit_num)) != 0;
 }
 
+OptRecordRdata::OptRecordRdata() {}
+
+OptRecordRdata::~OptRecordRdata() {}
+
+// static
+std::unique_ptr<OptRecordRdata> OptRecordRdata::Create(
+    const base::StringPiece& data,
+    const DnsRecordParser& parser) {
+  std::unique_ptr<OptRecordRdata> rdata(new OptRecordRdata);
+  rdata->buf_.assign(data.begin(), data.end());
+
+  base::BigEndianReader reader(data.data(), data.size());
+  while (reader.remaining() > 0) {
+    uint16_t opt_code, opt_data_size;
+    base::StringPiece opt_data;
+
+    if (!(reader.ReadU16(&opt_code) && reader.ReadU16(&opt_data_size) &&
+          reader.ReadPiece(&opt_data, opt_data_size))) {
+      return std::unique_ptr<OptRecordRdata>();
+    }
+    rdata->opts_.push_back(Opt(opt_code, opt_data));
+  }
+
+  return rdata;
+}
+
+uint16_t OptRecordRdata::Type() const {
+  return OptRecordRdata::kType;
+}
+
+bool OptRecordRdata::IsEqual(const RecordRdata* other) const {
+  if (other->Type() != Type())
+    return false;
+  const OptRecordRdata* opt_other = static_cast<const OptRecordRdata*>(other);
+  return opt_other->opts_ == opts_;
+}
+
+void OptRecordRdata::AddOpt(const Opt& opt) {
+  base::StringPiece opt_data = opt.data();
+
+  // Resize buffer to accommodate new OPT.
+  const size_t orig_rdata_size = buf_.size();
+  buf_.resize(orig_rdata_size + Opt::kHeaderSize + opt_data.size());
+
+  // Start writing from the end of the existing rdata.
+  base::BigEndianWriter writer(buf_.data() + orig_rdata_size, buf_.size());
+  bool success = writer.WriteU16(opt.code()) &&
+                 writer.WriteU16(opt_data.size()) &&
+                 writer.WriteBytes(opt_data.data(), opt_data.size());
+  DCHECK(success);
+
+  opts_.push_back(opt);
+}
+
+OptRecordRdata::Opt::Opt(uint16_t code, base::StringPiece data) : code_(code) {
+  data.CopyToString(&data_);
+}
+
+bool OptRecordRdata::Opt::operator==(const OptRecordRdata::Opt& other) const {
+  return code_ == other.code_ && data_ == other.data_;
+}
+
 }  // namespace net
diff --git a/net/dns/record_rdata.h b/net/dns/record_rdata.h
index 0aa29d57..dab5bf0b 100644
--- a/net/dns/record_rdata.h
+++ b/net/dns/record_rdata.h
@@ -15,6 +15,7 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/strings/string_piece.h"
+#include "net/base/io_buffer.h"
 #include "net/base/ip_address.h"
 #include "net/base/net_export.h"
 #include "net/dns/dns_protocol.h"
@@ -218,6 +219,45 @@
   DISALLOW_COPY_AND_ASSIGN(NsecRecordRdata);
 };
 
+// OPT record format (https://tools.ietf.org/html/rfc6891):
+class NET_EXPORT_PRIVATE OptRecordRdata : public RecordRdata {
+ public:
+  class NET_EXPORT_PRIVATE Opt {
+   public:
+    static const size_t kHeaderSize = 4;  // sizeof(code) + sizeof(size)
+
+    Opt(uint16_t code, base::StringPiece data);
+
+    bool operator==(const Opt& other) const;
+
+    uint16_t code() const { return code_; }
+    base::StringPiece data() const { return data_; }
+
+   private:
+    uint16_t code_;
+    std::string data_;
+  };
+
+  static const uint16_t kType = dns_protocol::kTypeOPT;
+
+  OptRecordRdata();
+  ~OptRecordRdata() override;
+  static std::unique_ptr<OptRecordRdata> Create(const base::StringPiece& data,
+                                                const DnsRecordParser& parser);
+  bool IsEqual(const RecordRdata* other) const override;
+  uint16_t Type() const override;
+
+  const std::vector<char>& buf() const { return buf_; }
+
+  const std::vector<Opt>& opts() const { return opts_; }
+  void AddOpt(const Opt& opt);
+
+ private:
+  std::vector<Opt> opts_;
+  std::vector<char> buf_;
+
+  DISALLOW_COPY_AND_ASSIGN(OptRecordRdata);
+};
 
 }  // namespace net
 
diff --git a/net/dns/record_rdata_unittest.cc b/net/dns/record_rdata_unittest.cc
index f73853ed..d5765478 100644
--- a/net/dns/record_rdata_unittest.cc
+++ b/net/dns/record_rdata_unittest.cc
@@ -7,9 +7,16 @@
 #include <memory>
 
 #include "net/dns/dns_response.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
+namespace {
+
+using ::testing::ElementsAreArray;
+using ::testing::IsNull;
+using ::testing::NotNull;
+using ::testing::SizeIs;
 
 base::StringPiece MakeStringPiece(const uint8_t* data, unsigned size) {
   const char* data_cc = reinterpret_cast<const char*>(data);
@@ -224,4 +231,81 @@
   ASSERT_FALSE(record_obj);
 }
 
+TEST(RecordRdataTest, ParseOptRecord) {
+  // This is just the rdata portion of an OPT record, rather than a complete
+  // record.
+  const uint8_t rdata[] = {
+      // First OPT
+      0x00, 0x01,  // OPT code
+      0x00, 0x02,  // OPT data size
+      0xDE, 0xAD,  // OPT data
+      // Second OPT
+      0x00, 0xFF,             // OPT code
+      0x00, 0x04,             // OPT data size
+      0xDE, 0xAD, 0xBE, 0xEF  // OPT data
+  };
+
+  DnsRecordParser parser(rdata, sizeof(rdata), 0);
+  base::StringPiece rdata_strpiece = MakeStringPiece(rdata, sizeof(rdata));
+
+  std::unique_ptr<OptRecordRdata> rdata_obj =
+      OptRecordRdata::Create(rdata_strpiece, parser);
+  ASSERT_THAT(rdata_obj, NotNull());
+  ASSERT_THAT(rdata_obj->opts(), SizeIs(2));
+  ASSERT_EQ(1, rdata_obj->opts()[0].code());
+  ASSERT_EQ("\xde\xad", rdata_obj->opts()[0].data());
+  ASSERT_EQ(255, rdata_obj->opts()[1].code());
+  ASSERT_EQ("\xde\xad\xbe\xef", rdata_obj->opts()[1].data());
+  ASSERT_TRUE(rdata_obj->IsEqual(rdata_obj.get()));
+}
+
+TEST(RecordRdataTest, ParseOptRecordWithShorterSizeThanData) {
+  // This is just the rdata portion of an OPT record, rather than a complete
+  // record.
+  const uint8_t rdata[] = {
+      0x00, 0xFF,             // OPT code
+      0x00, 0x02,             // OPT data size (incorrect, should be 4)
+      0xDE, 0xAD, 0xBE, 0xEF  // OPT data
+  };
+
+  DnsRecordParser parser(rdata, sizeof(rdata), 0);
+  base::StringPiece rdata_strpiece = MakeStringPiece(rdata, sizeof(rdata));
+
+  std::unique_ptr<OptRecordRdata> rdata_obj =
+      OptRecordRdata::Create(rdata_strpiece, parser);
+  ASSERT_THAT(rdata_obj, IsNull());
+}
+
+TEST(RecordRdataTest, ParseOptRecordWithLongerSizeThanData) {
+  // This is just the rdata portion of an OPT record, rather than a complete
+  // record.
+  const uint8_t rdata[] = {
+      0x00, 0xFF,  // OPT code
+      0x00, 0x04,  // OPT data size (incorrect, should be 4)
+      0xDE, 0xAD   // OPT data
+  };
+
+  DnsRecordParser parser(rdata, sizeof(rdata), 0);
+  base::StringPiece rdata_strpiece = MakeStringPiece(rdata, sizeof(rdata));
+
+  std::unique_ptr<OptRecordRdata> rdata_obj =
+      OptRecordRdata::Create(rdata_strpiece, parser);
+  ASSERT_THAT(rdata_obj, IsNull());
+}
+
+TEST(RecordRdataTest, AddOptToOptRecord) {
+  // This is just the rdata portion of an OPT record, rather than a complete
+  // record.
+  const uint8_t expected_rdata[] = {
+      0x00, 0xFF,             // OPT code
+      0x00, 0x04,             // OPT data size
+      0xDE, 0xAD, 0xBE, 0xEF  // OPT data
+  };
+
+  OptRecordRdata rdata;
+  rdata.AddOpt(OptRecordRdata::Opt(255, "\xde\xad\xbe\xef"));
+  EXPECT_THAT(rdata.buf(), ElementsAreArray(expected_rdata));
+}
+
+}  // namespace
 }  // namespace net
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h
index fa45c7b..caca874 100644
--- a/skia/config/SkUserConfig.h
+++ b/skia/config/SkUserConfig.h
@@ -216,6 +216,10 @@
 #define SK_SUPPORT_LEGACY_TILED_BITMAPS
 #endif
 
+#ifndef SK_SUPPORT_LEGACY_FONTMGR_API
+#define SK_SUPPORT_LEGACY_FONTMGR_API
+#endif
+
 ///////////////////////// Imported from BUILD.gn and skia_common.gypi
 
 /* In some places Skia can use static initializers for global initialization,
diff --git a/skia/tools/filter_fuzz_stub/filter_fuzz_stub.cc b/skia/tools/filter_fuzz_stub/filter_fuzz_stub.cc
index 7c25f88fa..14654af 100644
--- a/skia/tools/filter_fuzz_stub/filter_fuzz_stub.cc
+++ b/skia/tools/filter_fuzz_stub/filter_fuzz_stub.cc
@@ -4,6 +4,7 @@
 
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/process/memory.h"
 #include "base/test/test_discardable_memory_allocator.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkCanvas.h"
@@ -73,6 +74,7 @@
 int main(int argc, char** argv) {
   int ret = 0;
 
+  base::EnableTerminationOnOutOfMemory();
   base::TestDiscardableMemoryAllocator discardable_memory_allocator;
   base::DiscardableMemoryAllocator::SetInstance(&discardable_memory_allocator);
 
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
index d5834a3e..145cef34 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -32,7 +32,7 @@
 crbug.com/591099 fast/text/word-space.html [ Failure ]
 
 # Glyph overflow.
-crbug.com/591099 fast/text/letter-spacing-negative-opacity.html [ Failure ]
+crbug.com/591099 fast/text/letter-spacing-negative-opacity.html [ Failure Pass ]
 crbug.com/591099 fast/text/shadow-no-blur.html [ Failure ]
 
 # Improved shaping we can rebase once we switch.
@@ -100,7 +100,6 @@
 crbug.com/591099 accessibility/inline-text-word-boundaries.html [ Failure ]
 crbug.com/591099 accessibility/input-type-password-value-and-selection.html [ Crash Failure Pass Timeout ]
 crbug.com/591099 accessibility/input-type-range-aria-value.html [ Failure ]
-crbug.com/591099 accessibility/input-type-text-selection.html [ Crash Failure Pass Timeout ]
 crbug.com/591099 accessibility/misspellings.html [ Timeout ]
 crbug.com/591099 accessibility/name-calc-img.html [ Crash Failure ]
 crbug.com/591099 accessibility/presentation-owned-elements.html [ Crash Failure ]
@@ -110,7 +109,6 @@
 crbug.com/591099 accessibility/scroll-div-horiz-sends-notification.html [ Failure Timeout ]
 crbug.com/591099 accessibility/set-selection-whitespace.html [ Failure ]
 crbug.com/591099 accessibility/slider-thumb-bounds.html [ Failure ]
-crbug.com/591099 accessibility/spin-button-detach.html [ Crash Failure Pass ]
 crbug.com/591099 accessibility/table-header-column-row.html [ Failure Timeout ]
 crbug.com/591099 accessibility/table-one-cell.html [ Failure Pass ]
 crbug.com/591099 accessibility/textarea-caret-position.html [ Crash Failure Timeout ]
@@ -320,7 +318,6 @@
 crbug.com/591099 compositing/overflow/border-radius-styles-with-composited-child.html [ Failure ]
 crbug.com/591099 compositing/overflow/clear-scroll-parent.html [ Failure ]
 crbug.com/591099 compositing/overflow/clip-descendents.html [ Failure ]
-crbug.com/591099 compositing/overflow/clip-parent-across-transform-boundary.html [ Failure ]
 crbug.com/591099 compositing/overflow/clip-parent-reset.html [ Failure ]
 crbug.com/591099 compositing/overflow/clipping-ancestor-with-accelerated-scrolling-ancestor.html [ Failure ]
 crbug.com/591099 compositing/overflow/composited-layer-under-border-radius-under-composited-layer.html [ Failure ]
@@ -462,7 +459,6 @@
 crbug.com/591099 compositing/tiled-layers-hidpi.html [ Failure ]
 crbug.com/591099 compositing/update-paint-phases.html [ Failure ]
 crbug.com/591099 compositing/video-frame-size-change.html [ Failure Pass ]
-crbug.com/591099 compositing/video/video-poster.html [ Failure Pass ]
 crbug.com/591099 compositing/visibility/layer-visible-content.html [ Failure ]
 crbug.com/591099 compositing/visibility/visibility-composited-transforms.html [ Failure Pass ]
 crbug.com/591099 compositing/visibility/visibility-composited.html [ Failure Pass ]
@@ -1167,10 +1163,9 @@
 crbug.com/591099 css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow.html [ Failure Pass ]
 crbug.com/591099 css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow.html [ Failure Pass ]
 crbug.com/591099 css3/filters/css-opacity-with-drop-shadow.html [ Crash Failure Pass ]
-crbug.com/591099 css3/filters/effect-all-on-background.html [ Failure Pass ]
 crbug.com/591099 css3/filters/effect-blur-hw.html [ Failure ]
 crbug.com/591099 css3/filters/effect-blur.html [ Failure ]
-crbug.com/591099 css3/filters/effect-brightness-clamping-hw.html [ Failure ]
+crbug.com/591099 css3/filters/effect-brightness-clamping-hw.html [ Failure Timeout ]
 crbug.com/591099 css3/filters/effect-brightness-clamping.html [ Failure ]
 crbug.com/591099 css3/filters/effect-brightness-hw.html [ Failure ]
 crbug.com/591099 css3/filters/effect-brightness.html [ Failure ]
@@ -1187,34 +1182,22 @@
 crbug.com/591099 css3/filters/effect-invert.html [ Failure ]
 crbug.com/591099 css3/filters/effect-opacity-hw.html [ Failure ]
 crbug.com/591099 css3/filters/effect-opacity.html [ Failure ]
-crbug.com/591099 css3/filters/effect-reference-add-hw.html [ Failure Pass ]
-crbug.com/591099 css3/filters/effect-reference-source-alpha-hw.html [ Failure Pass ]
-crbug.com/591099 css3/filters/effect-reference-subregion-hidpi-hw.html [ Failure Pass ]
-crbug.com/591099 css3/filters/effect-reference-subregion-hidpi.html [ Failure Pass ]
 crbug.com/591099 css3/filters/effect-reference-subregion-nested.html [ Failure Pass ]
-crbug.com/591099 css3/filters/effect-reference-subregion-zoom-hw.html [ Failure Pass ]
-crbug.com/591099 css3/filters/effect-reference-subregion-zoom.html [ Failure Pass ]
 crbug.com/591099 css3/filters/effect-saturate-hw.html [ Failure ]
 crbug.com/591099 css3/filters/effect-saturate.html [ Failure ]
 crbug.com/591099 css3/filters/effect-sepia-hw.html [ Failure ]
 crbug.com/591099 css3/filters/effect-sepia.html [ Failure ]
-crbug.com/591099 css3/filters/filter-repaint-shadow-clipped.html [ Failure ]
-crbug.com/591099 css3/filters/filter-repaint-shadow-rotated.html [ Failure ]
 crbug.com/591099 css3/filters/filtered-compositing-descendant.html [ Failure ]
 crbug.com/591099 css3/filters/filtered-inline.html [ Failure ]
-crbug.com/591099 css3/filters/nested-filter.html [ Crash Failure ]
 crbug.com/591099 css3/filters/regions-expanding.html [ Crash Failure ]
 crbug.com/591099 css3/filters/remove-filter-rendering.html [ Failure ]
 crbug.com/591099 css3/filters/simple-filter-rendering.html [ Failure ]
 crbug.com/591099 css3/flexbox/bug527039.html [ Failure ]
 crbug.com/591099 css3/flexbox/button.html [ Failure ]
 crbug.com/591099 css3/flexbox/child-overflow.html [ Failure Pass ]
-crbug.com/591099 css3/flexbox/flex-algorithm.html [ Failure ]
 crbug.com/591099 css3/flexbox/flex-align-vertical-writing-mode.html [ Failure Pass ]
-crbug.com/591099 css3/flexbox/flex-flow-auto-margins-no-available-space.html [ Failure ]
 crbug.com/591099 css3/flexbox/flex-flow-auto-margins.html [ Failure ]
 crbug.com/591099 css3/flexbox/flex-flow-border.html [ Failure ]
-crbug.com/591099 css3/flexbox/flex-flow-margins-auto-size.html [ Failure ]
 crbug.com/591099 css3/flexbox/flex-flow-margins.html [ Failure ]
 crbug.com/591099 css3/flexbox/flex-flow-padding.html [ Failure ]
 crbug.com/591099 css3/flexbox/flex-item-contains-strict.html [ Crash Failure ]
@@ -1227,7 +1210,6 @@
 crbug.com/591099 css3/flexbox/position-absolute-child-with-contenteditable.html [ Failure ]
 crbug.com/591099 css3/flexbox/scrollbars-auto.html [ Failure ]
 crbug.com/591099 css3/flexbox/scrollbars.html [ Failure ]
-crbug.com/591099 css3/flexbox/writing-modes.html [ Failure ]
 crbug.com/591099 css3/font-feature-settings-rendering.html [ Failure ]
 crbug.com/591099 css3/masking/clip-path-circle-filter.html [ Failure Pass ]
 crbug.com/591099 css3/masking/clip-path-circle-overflow-hidden.html [ Failure ]
@@ -2107,7 +2089,6 @@
 crbug.com/591099 editing/execCommand/format_block/no-visible-content.html [ Failure ]
 crbug.com/591099 editing/execCommand/forward-delete-no-scroll.html [ Failure ]
 crbug.com/591099 editing/execCommand/indent-empty-root.html [ Failure ]
-crbug.com/591099 editing/execCommand/infinite-recursion-computeRectForRepaint.html [ Crash Failure Pass ]
 crbug.com/591099 editing/execCommand/insert-image-on-top-of-directional-text.html [ Failure ]
 crbug.com/591099 editing/execCommand/insertHTML.html [ Failure ]
 crbug.com/591099 editing/execCommand/insertImage-src.html [ Failure ]
@@ -2117,7 +2098,6 @@
 crbug.com/591099 editing/execCommand/insert_list_in_noneditable_list_parent.html [ Failure ]
 crbug.com/591099 editing/execCommand/justify.html [ Failure Timeout ]
 crbug.com/591099 editing/execCommand/keep_typing_style.html [ Failure ]
-crbug.com/591099 editing/execCommand/list-wrapping-image-crash.html [ Failure Pass ]
 crbug.com/591099 editing/execCommand/outdent-inline-list.html [ Crash Failure ]
 crbug.com/591099 editing/execCommand/outdent-multiparagraph-list.html [ Crash Failure ]
 crbug.com/591099 editing/execCommand/outdent-selection.html [ Crash Failure ]
@@ -2239,7 +2219,6 @@
 crbug.com/591099 editing/pasteboard/drop-inputtext-acquires-style.html [ Crash Failure ]
 crbug.com/591099 editing/pasteboard/drop-text-events.html [ Crash Failure ]
 crbug.com/591099 editing/pasteboard/drop-text-without-selection.html [ Failure ]
-crbug.com/591099 editing/pasteboard/files-during-page-drags.html [ Failure Pass ]
 crbug.com/591099 editing/pasteboard/get-data-text-plain-paste.html [ Failure ]
 crbug.com/591099 editing/pasteboard/innerText-inline-table.html [ Failure ]
 crbug.com/591099 editing/pasteboard/input-field-1.html [ Crash Failure ]
@@ -2317,7 +2296,6 @@
 crbug.com/591099 editing/selection/caret-rtl-right.html [ Failure ]
 crbug.com/591099 editing/selection/caret-rtl.html [ Failure ]
 crbug.com/591099 editing/selection/clear-selection.html [ Failure ]
-crbug.com/591099 editing/selection/click-on-block-image.html [ Failure ]
 crbug.com/591099 editing/selection/click-start-of-line.html [ Failure ]
 crbug.com/591099 editing/selection/contains-boundaries.html [ Failure ]
 crbug.com/591099 editing/selection/contenteditable-click-inside.html [ Failure ]
@@ -2556,8 +2534,6 @@
 crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-003-left-overflow.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-003-right-overflow.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-004.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-top-below-bfc-001l.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-top-below-bfc-001r.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-top-below-inline-001l.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-top-below-inline-001r.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-top-below-inline-002l.xht [ Crash Failure ]
@@ -2570,18 +2546,8 @@
 crbug.com/591099 external/wpt/css/CSS2/linebox/vertical-align-baseline-004a.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/linebox/vertical-align-baseline-005a.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-in-inline-percents-001.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-replaced-width-006.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/max-height-percentage-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/normal-flow/root-box-001.xht [ Crash Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-replaced-width-036.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-replaced-width-037.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-replaced-width-043.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-replaced-width-050.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-replaced-width-051.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-replaced-width-057.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-replaced-width-064.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-replaced-width-065.xht [ Failure ]
-crbug.com/591099 external/wpt/css/CSS2/positioning/absolute-replaced-width-071.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/positioning/abspos-007.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/positioning/abspos-containing-block-001.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/positioning/abspos-containing-block-002.xht [ Failure ]
@@ -2622,44 +2588,21 @@
 crbug.com/591099 external/wpt/css/CSS2/text/text-indent-012.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/text/text-indent-percent-001.xht [ Failure ]
 crbug.com/591099 external/wpt/css/CSS2/text/text-transform-capitalize-003.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-align-3/distribution-values/space-evenly-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-display-3/display-contents-dynamic-flex-002-inline.html [ Crash Failure ]
 crbug.com/591099 external/wpt/css/css-display-3/display-contents-dynamic-flex-002-none.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-display-3/display-contents-dynamic-table-001-inline.html [ Crash Failure ]
 crbug.com/591099 external/wpt/css/css-display-3/display-flow-root-001.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/Flexible-order.html [ Crash Failure Pass ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/auto-margins-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/css-flexbox-row-reverse-wrap-reverse.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/css-flexbox-row-reverse-wrap.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/css-flexbox-row-wrap-reverse.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/css-flexbox-row-wrap.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/flex-container-margin.html [ Crash Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/flex-direction-with-element-insert.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/flex-direction.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_box-clear.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_columns-flexitems-2.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_columns-flexitems.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_generated-flex.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_item-bottom-float.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_item-clear.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_item-float.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_item-top-float.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_margin-auto-overflow.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_margin.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_order-box.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/percentage-heights-001.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/position-absolute-002.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/position-absolute-005.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/ttwf-reftest-flex-align-content-center.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/ttwf-reftest-flex-align-content-end.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/ttwf-reftest-flex-align-content-space-around.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/ttwf-reftest-flex-align-content-space-between.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/ttwf-reftest-flex-align-content-start.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/ttwf-reftest-flex-base.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/ttwf-reftest-flex-order.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-grid-1/abspos/absolute-positioning-grid-container-parent-001.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-grid-1/abspos/grid-positioned-items-background-rtl-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/grid-positioned-items-background-001.html [ Failure ]
+crbug.com/591099 external/wpt/css/css-grid-1/abspos/grid-positioned-items-background-rtl-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/grid-sizing-positioned-items-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/orthogonal-positioned-grid-items-007.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/abspos/orthogonal-positioned-grid-items-009.html [ Failure ]
@@ -2683,11 +2626,8 @@
 crbug.com/591099 external/wpt/css/css-grid-1/grid-items/grid-item-containing-block-002.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/grid-items/grid-item-containing-block-003.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-grid-1/grid-items/grid-item-containing-block-004.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-grid-1/grid-model/grid-margins-no-collapse-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-position-3/position-sticky-nested-left.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-position-3/position-sticky-nested-right.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-position-3/position-sticky-table-th-left.html [ Failure Pass ]
-crbug.com/591099 external/wpt/css/css-position-3/position-sticky-table-th-right.html [ Failure Pass ]
 crbug.com/591099 external/wpt/css/css-position-3/position-sticky-writing-modes.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-rhythm-1/line-height-step-basic-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-rhythm-1/line-height-step-boundary-001.html [ Failure ]
@@ -3040,8 +2980,6 @@
 crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-011.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/line-box-direction-vrl-019.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/margin-collapse-vrl-010.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/margin-vlr-003.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/margin-vrl-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/ortho-htb-alongside-vrl-floats-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/ortho-htb-alongside-vrl-floats-010.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/orthogonal-parent-shrink-to-fit-001a.html [ Crash Failure ]
@@ -3101,10 +3039,6 @@
 crbug.com/591099 external/wpt/css/css-writing-modes-3/vertical-alignment-vrl-024.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/vertical-alignment-vrl-026.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/wm-propagation-body-006.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/wm-propagation-body-010.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/wm-propagation-body-011.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/wm-propagation-body-015.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes-3/writing-mode-vertical-lr-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/writing-mode-vertical-rl-001.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/writing-mode-vertical-rl-002.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes-3/writing-mode-vertical-rl-003.htm [ Failure ]
@@ -3116,9 +3050,7 @@
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-baseline-horiz-003.xhtml [ Failure Pass ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-002.xhtml [ Failure ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-004.xhtml [ Crash Failure ]
-crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-003.xhtml [ Failure ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-004.xhtml [ Failure ]
-crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-003.xhtml [ Failure ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-004.xhtml [ Failure ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-baseline-multi-item-vert-001b.html [ Failure Pass ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-baseline-single-item-001a.html [ Crash Failure ]
@@ -3137,7 +3069,6 @@
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-break-inside-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-003.html [ Crash Failure ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-004.html [ Crash Failure ]
-crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-005.html [ Crash Failure Pass ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-006.html [ Crash Failure ]
 crbug.com/591099 external/wpt/cssom-view/cssom-getClientRects-002.html [ Failure ]
 crbug.com/591099 external/wpt/cssom-view/elementFromPoint-002.html [ Failure ]
@@ -3145,7 +3076,6 @@
 crbug.com/591099 external/wpt/cssom-view/elementFromPoint.html [ Crash Failure ]
 crbug.com/591099 external/wpt/cssom-view/elementsFromPoint-iframes.html [ Failure ]
 crbug.com/591099 external/wpt/cssom-view/elementsFromPoint-svg.html [ Failure ]
-crbug.com/591099 external/wpt/cssom-view/elementsFromPoint-table.html [ Failure ]
 crbug.com/591099 external/wpt/cssom-view/elementsFromPoint.html [ Crash Failure ]
 crbug.com/591099 external/wpt/cssom/interfaces.html [ Timeout ]
 crbug.com/591099 external/wpt/cssom/serialize-values.html [ Pass Timeout ]
@@ -3171,7 +3101,6 @@
 crbug.com/591099 external/wpt/dom/ranges/Range-mutations-replaceData.html [ Pass Timeout ]
 crbug.com/591099 external/wpt/dom/ranges/Range-set.html [ Timeout ]
 crbug.com/591099 external/wpt/dom/ranges/Range-surroundContents.html [ Pass Timeout ]
-crbug.com/591099 external/wpt/dom/traversal/NodeIterator.html [ Pass Timeout ]
 crbug.com/591099 external/wpt/dom/traversal/TreeWalker.html [ Pass Timeout ]
 crbug.com/591099 external/wpt/domxpath/xml_xpath_runner.html [ Pass Timeout ]
 crbug.com/591099 external/wpt/editing/run/backcolor.html [ Pass Timeout ]
@@ -3290,7 +3219,6 @@
 crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/flow-content-0/dialog.html [ Failure ]
 crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/flow-content-0/div-align.html [ Failure ]
 crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html [ Crash Failure ]
-crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/the-hr-element-0/align.html [ Failure ]
 crbug.com/591099 external/wpt/html/rendering/non-replaced-elements/the-hr-element-0/setting-overflow-visible.html [ Failure ]
 crbug.com/591099 external/wpt/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-img-auto.html [ Failure ]
 crbug.com/591099 external/wpt/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-img-percentage.html [ Failure ]
@@ -3342,7 +3270,6 @@
 crbug.com/591099 external/wpt/pointerevents/pointerevent_touch-action-button-test_touch-manual.html [ Crash Failure Timeout ]
 crbug.com/591099 external/wpt/pointerevents/pointerevent_touch-action-span-test_touch-manual.html [ Crash Timeout ]
 crbug.com/591099 external/wpt/pointerevents/pointerevent_touch-action-svg-test_touch-manual.html [ Crash Failure Timeout ]
-crbug.com/591099 external/wpt/quirks-mode/blocks-ignore-line-height.html [ Failure Pass ]
 crbug.com/591099 external/wpt/quirks-mode/line-height-calculation.html [ Crash Failure ]
 crbug.com/591099 external/wpt/quirks-mode/table-cell-width-calculation.html [ Crash Failure ]
 crbug.com/591099 external/wpt/scroll-anchoring/anchoring-with-bounds-clamping.html [ Failure ]
@@ -3475,10 +3402,7 @@
 crbug.com/591099 fast/block/align-inverted-direction.html [ Failure ]
 crbug.com/591099 fast/block/basic/011.html [ Failure ]
 crbug.com/591099 fast/block/basic/014.html [ Failure ]
-crbug.com/591099 fast/block/basic/016.html [ Failure ]
-crbug.com/591099 fast/block/basic/018.html [ Failure ]
 crbug.com/591099 fast/block/basic/020.html [ Failure ]
-crbug.com/591099 fast/block/basic/fieldset-stretch-to-legend.html [ Crash Failure ]
 crbug.com/591099 fast/block/basic/quirk-height.html [ Failure ]
 crbug.com/591099 fast/block/basic/quirk-percent-height-grandchild.html [ Failure ]
 crbug.com/591099 fast/block/block-width-recalc-with-relative-height.html [ Crash Failure ]
@@ -3496,8 +3420,6 @@
 crbug.com/591099 fast/block/float/027.html [ Failure ]
 crbug.com/591099 fast/block/float/028.html [ Failure ]
 crbug.com/591099 fast/block/float/031.html [ Failure ]
-crbug.com/591099 fast/block/float/032.html [ Failure ]
-crbug.com/591099 fast/block/float/034.html [ Failure ]
 crbug.com/591099 fast/block/float/035.html [ Failure ]
 crbug.com/591099 fast/block/float/assert-when-moving-float-2.html [ Failure Pass ]
 crbug.com/591099 fast/block/float/assert-when-moving-float.html [ Crash Failure ]
@@ -3515,7 +3437,6 @@
 crbug.com/591099 fast/block/float/float-in-float-painting.html [ Failure ]
 crbug.com/591099 fast/block/float/float-inserted-into-clean-line.html [ Failure ]
 crbug.com/635619 fast/block/float/float-not-removed-from-first-letter.html [ Crash Failure ]
-crbug.com/591099 fast/block/float/float-on-zero-height-line.html [ Failure Pass ]
 crbug.com/591099 fast/block/float/float-overflow-hidden-containing-block-width.html [ Failure ]
 crbug.com/591099 fast/block/float/floats-and-text-indent-rl.html [ Failure ]
 crbug.com/591099 fast/block/float/floats-and-text-indent.html [ Failure ]
@@ -3533,7 +3454,6 @@
 crbug.com/591099 fast/block/float/floats-wrap-inside-inline-004.htm [ Failure ]
 crbug.com/591099 fast/block/float/independent-align-positioning.html [ Failure ]
 crbug.com/591099 fast/block/float/logical-bottom-exceeds-layoutunit-max.html [ Failure ]
-crbug.com/591099 fast/block/float/marquee-shrink-to-avoid-floats.html [ Failure Pass ]
 crbug.com/591099 fast/block/float/negative-margin-on-element-avoiding-floats-with-margin-on-parent.html [ Failure ]
 crbug.com/591099 fast/block/float/negative-margin-on-element-avoiding-floats.html [ Failure ]
 crbug.com/591099 fast/block/float/nested-clearance.html [ Failure ]
@@ -3547,14 +3467,11 @@
 crbug.com/591099 fast/block/float/rubybase-children-moved-crash-2.html [ Crash Failure ]
 crbug.com/591099 fast/block/float/selection-gap-clip-out-tiger-crash.html [ Failure Pass ]
 crbug.com/591099 fast/block/float/shrink-to-avoid-float-complexity.html [ Failure ]
-crbug.com/591099 fast/block/float/shrink-to-fit-width.html [ Failure Pass ]
 crbug.com/591099 fast/block/float/trailing-float-with-columns.html [ Crash Failure ]
 crbug.com/591099 fast/block/float/width-update-after-clear.html [ Failure ]
-crbug.com/591099 fast/block/hr-with-float.html [ Failure ]
 crbug.com/591099 fast/block/inflow-bottom-margin.html [ Failure ]
 crbug.com/591099 fast/block/inline-children-root-linebox-crash.html [ Crash Failure ]
 crbug.com/591099 fast/block/line-layout/floats-do-not-fit-on-line.html [ Crash Failure ]
-crbug.com/591099 fast/block/line-layout/negative-max-height.html [ Failure Pass ]
 crbug.com/591099 fast/block/margin-collapse/001.html [ Failure ]
 crbug.com/591099 fast/block/margin-collapse/005.html [ Failure ]
 crbug.com/591099 fast/block/margin-collapse/032.html [ Failure ]
@@ -3610,8 +3527,6 @@
 crbug.com/591099 fast/block/positioning/inline-block-relposition.html [ Failure Pass ]
 crbug.com/591099 fast/block/positioning/leftmargin-topmargin.html [ Failure ]
 crbug.com/591099 fast/block/positioning/move-with-auto-width.html [ Failure ]
-crbug.com/591099 fast/block/positioning/offsetLeft-relative-iframe.html [ Crash Failure ]
-crbug.com/591099 fast/block/positioning/offsetLeft-relative-td.html [ Crash Failure ]
 crbug.com/591099 fast/block/positioning/padding-percent.html [ Crash Failure ]
 crbug.com/591099 fast/block/positioning/positioned-child-inside-relative-positioned-anonymous-block.html [ Failure ]
 crbug.com/591099 fast/block/positioning/relative-overflow-block.html [ Failure ]
@@ -3624,13 +3539,8 @@
 crbug.com/591099 fast/block/positioning/start-ignoring-before.html [ Failure ]
 crbug.com/591099 fast/block/positioning/trailing-space-test.html [ Failure ]
 crbug.com/591099 fast/block/positioning/vertical-lr/001.html [ Failure ]
-crbug.com/591099 fast/block/positioning/vertical-lr/002.html [ Failure ]
-crbug.com/591099 fast/block/positioning/vertical-lr/003.html [ Failure ]
-crbug.com/591099 fast/block/positioning/vertical-lr/004.html [ Failure ]
 crbug.com/591099 fast/block/positioning/vertical-rl/001.html [ Failure ]
 crbug.com/591099 fast/block/positioning/vertical-rl/002.html [ Crash Failure ]
-crbug.com/591099 fast/block/positioning/vertical-rl/003.html [ Failure ]
-crbug.com/591099 fast/block/positioning/vertical-rl/004.html [ Failure ]
 crbug.com/591099 fast/block/positioning/vertical-rl/fixed-positioning.html [ Failure ]
 crbug.com/591099 fast/block/positioning/window-height-change.html [ Failure ]
 crbug.com/591099 fast/block/scrollbar-wider-than-border-box.html [ Failure ]
@@ -3715,7 +3625,6 @@
 crbug.com/591099 fast/borders/border-radius-mask-video.html [ Failure ]
 crbug.com/591099 fast/borders/border-radius-wide-border-01.html [ Failure ]
 crbug.com/591099 fast/borders/border-styles-split.html [ Failure ]
-crbug.com/591099 fast/borders/fieldsetBorderRadius.html [ Crash Failure ]
 crbug.com/591099 fast/borders/inline-mask-overlay-image-outset-vertical-rl.html [ Failure ]
 crbug.com/591099 fast/borders/inline-mask-overlay-image-outset.html [ Failure ]
 crbug.com/591099 fast/borders/inline-mask-overlay-image.html [ Failure ]
@@ -3745,7 +3654,7 @@
 crbug.com/591099 fast/box-shadow/single-pixel-shadow.html [ Failure Pass ]
 crbug.com/591099 fast/box-shadow/spread.html [ Failure ]
 crbug.com/591099 fast/box-shadow/transform-fringing.html [ Failure ]
-crbug.com/591099 fast/box-sizing/box-sizing.html [ Failure Pass ]
+crbug.com/591099 fast/canvas-api/toDataURL-supportedTypes.html [ Failure ]
 crbug.com/591099 fast/canvas/canvas-createImageBitmap-drawImage.html [ Timeout ]
 crbug.com/591099 fast/canvas/canvas-drawImage-animated-images.html [ Failure ]
 crbug.com/591099 fast/canvas/canvas-ellipse-connecting-line.html [ Failure Pass ]
@@ -3756,10 +3665,8 @@
 crbug.com/591099 fast/canvas/fill-stroke-clip-reset-path.html [ Failure ]
 crbug.com/591099 fast/canvas/fillrect_gradient.html [ Failure ]
 crbug.com/591099 fast/canvas/patternfill-repeat.html [ Failure ]
-crbug.com/591099 fast/canvas-api/toDataURL-supportedTypes.html [ Failure ]
 crbug.com/591099 fast/clip/001.html [ Failure ]
 crbug.com/591099 fast/clip/004.html [ Failure ]
-crbug.com/591099 fast/clip/008.html [ Failure ]
 crbug.com/591099 fast/clip/009.html [ Failure ]
 crbug.com/591099 fast/clip/010.html [ Failure ]
 crbug.com/591099 fast/clip/011.html [ Failure ]
@@ -3919,7 +3826,6 @@
 crbug.com/591099 fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005-part-2.html [ Crash Failure ]
 crbug.com/591099 fast/css-grid-layout/named-grid-line-get-set.html [ Failure Timeout ]
 crbug.com/591099 fast/css-grid-layout/named-grid-lines-with-named-grid-areas-dynamic-get-set.html [ Failure ]
-crbug.com/591099 fast/css-grid-layout/named-grid-lines-with-named-grid-areas-get-set.html [ Pass Timeout ]
 crbug.com/591099 fast/css-grid-layout/named-grid-lines-with-named-grid-areas-resolution.html [ Failure ]
 crbug.com/591099 fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid.html [ Failure ]
 crbug.com/591099 fast/css-grid-layout/percent-grid-item-in-percent-grid-track-update.html [ Failure ]
@@ -3933,7 +3839,6 @@
 crbug.com/591099 fast/css-grid-layout/scrolled-grid-painting-overflow.html [ Failure ]
 crbug.com/591099 fast/css-grid-layout/scrolled-grid-painting.html [ Failure ]
 crbug.com/591099 fast/css-grid-layout/stale-grid-layout.html [ Failure Pass ]
-crbug.com/591099 fast/css-intrinsic-dimensions/css-tables.html [ Failure ]
 crbug.com/591099 fast/css-intrinsic-dimensions/fillavailable-minmax-content-inlinesize-contribution-nonreplaced-blocks.html [ Crash Failure ]
 crbug.com/591099 fast/css-intrinsic-dimensions/fitcontent-minmax-content-inlinesize-contribution-nonreplaced-blocks.html [ Crash Failure ]
 crbug.com/591099 fast/css-intrinsic-dimensions/fixed-height-stf-img-block-child-percent-height.html [ Failure ]
@@ -3945,7 +3850,6 @@
 crbug.com/591099 fast/css-intrinsic-dimensions/indefinite-percent-minmax-content-inlinesize-contribution-nonreplaced-blocks.html [ Failure ]
 crbug.com/591099 fast/css-intrinsic-dimensions/multicol.html [ Failure ]
 crbug.com/591099 fast/css-intrinsic-dimensions/resize-inside-percent-width-overflow-hidden.html [ Failure ]
-crbug.com/591099 fast/css-intrinsic-dimensions/tables.html [ Failure ]
 crbug.com/591099 fast/css/001.html [ Crash Failure ]
 crbug.com/591099 fast/css/002.html [ Failure ]
 crbug.com/591099 fast/css/003.html [ Failure ]
@@ -3974,7 +3878,6 @@
 crbug.com/591099 fast/css/background-shorthand-invalid-url.html [ Failure ]
 crbug.com/591099 fast/css/beforeSelectorOnCodeElement.html [ Failure ]
 crbug.com/591099 fast/css/begin-end-contain-selector-empty-value.html [ Failure Pass ]
-crbug.com/591099 fast/css/bfc-percentage-margin.html [ Failure ]
 crbug.com/591099 fast/css/bidi-override-in-anonymous-block.html [ Crash Failure ]
 crbug.com/591099 fast/css/bogus-color-span.html [ Failure ]
 crbug.com/591099 fast/css/border-height.html [ Failure ]
@@ -4007,7 +3910,6 @@
 crbug.com/591099 fast/css/color-quirk.html [ Failure ]
 crbug.com/591099 fast/css/color-strict.html [ Failure Pass ]
 crbug.com/591099 fast/css/compare-content-style.html [ Crash Failure ]
-crbug.com/591099 fast/css/computed-image-width-with-percent-height-quirksmode.html [ Failure Pass ]
 crbug.com/591099 fast/css/containment/size-and-layout-containment.html [ Crash Failure ]
 crbug.com/591099 fast/css/continuationCrash.html [ Crash Failure ]
 crbug.com/591099 fast/css/counters/counter-traverse-table-cell.html [ Failure ]
@@ -4137,27 +4039,14 @@
 crbug.com/591099 fast/css/non-standard-checkbox-size.html [ Failure ]
 crbug.com/591099 fast/css/nth-child-dynamic.html [ Failure ]
 crbug.com/591099 fast/css/number-parsing-crash.html [ Crash Failure Pass ]
-crbug.com/591099 fast/css/object-fit-canvas.html [ Failure ]
-crbug.com/591099 fast/css/object-fit-embed.html [ Failure Pass ]
 crbug.com/591099 fast/css/object-fit-grow-landscape.html [ Failure ]
 crbug.com/591099 fast/css/object-fit-grow-portrait.html [ Failure ]
-crbug.com/591099 fast/css/object-fit-img-svg.html [ Failure ]
-crbug.com/591099 fast/css/object-fit-img-svg2.html [ Failure ]
-crbug.com/591099 fast/css/object-fit-img.html [ Failure Pass ]
-crbug.com/591099 fast/css/object-fit-input-image.html [ Failure Pass ]
-crbug.com/591099 fast/css/object-fit-object.html [ Failure Pass ]
-crbug.com/591099 fast/css/object-fit-shrink.html [ Failure ]
-crbug.com/591099 fast/css/object-fit-video-poster.html [ Failure ]
-crbug.com/591099 fast/css/object-position-with-fit-contain.html [ Failure ]
-crbug.com/591099 fast/css/object-position-with-fit-cover.html [ Failure ]
-crbug.com/591099 fast/css/object-position-with-fit-none.html [ Failure ]
-crbug.com/591099 fast/css/object-position.html [ Failure ]
 crbug.com/591099 fast/css/only-child-pseudo-class.html [ Failure ]
 crbug.com/591099 fast/css/only-of-type-pseudo-class.html [ Failure ]
 crbug.com/591099 fast/css/outline-auto-empty-rects.html [ Failure ]
 crbug.com/591099 fast/css/outline-auto-location.html [ Failure ]
 crbug.com/591099 fast/css/outline-narrowLine.html [ Failure ]
-crbug.com/591099 fast/css/outline-small-visual-overflow.html [ Failure ]
+crbug.com/591099 fast/css/outline-small-visual-overflow.html [ Failure Pass ]
 crbug.com/591099 fast/css/overflow-rtl-border-after.html [ Failure ]
 crbug.com/591099 fast/css/pending-stylesheet-repaint.html [ Failure ]
 crbug.com/591099 fast/css/pendingStylesheetFontSize.html [ Failure ]
@@ -4235,7 +4124,7 @@
 crbug.com/591099 fast/css/unknown-pseudo-element-matching.html [ Crash Failure ]
 crbug.com/591099 fast/css/vertical-align-lengths.html [ Failure ]
 crbug.com/591099 fast/css/vertical-lr-bfc-auto-margins-beside-float.html [ Crash Failure ]
-crbug.com/591099 fast/css/vertical-lr-table-bfc-auto-margins-beside-float.html [ Failure ]
+crbug.com/591099 fast/css/vertical-lr-table-bfc-auto-margins-beside-float.html [ Failure Pass ]
 crbug.com/591099 fast/css/vertical-lr-table-percent-margins-beside-float.html [ Crash Failure ]
 crbug.com/591099 fast/css/vertical-text-overflow-ellipsis-text-align-center.html [ Failure ]
 crbug.com/591099 fast/css/vertical-text-overflow-ellipsis-text-align-justify.html [ Failure ]
@@ -4270,7 +4159,6 @@
 crbug.com/591099 fast/doctypes/002.html [ Crash Failure ]
 crbug.com/591099 fast/doctypes/003.html [ Crash Failure ]
 crbug.com/591099 fast/doctypes/004.html [ Crash Failure ]
-crbug.com/591099 fast/doctypes/doctype-parsing.html [ Crash Failure Pass ]
 crbug.com/591099 fast/dom/34176.html [ Crash Failure ]
 crbug.com/591099 fast/dom/52776.html [ Crash Failure ]
 crbug.com/591099 fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-with-before-style.html [ Failure ]
@@ -4337,7 +4225,6 @@
 crbug.com/591099 fast/dom/element-attribute-js-null.html [ Timeout ]
 crbug.com/591099 fast/dom/elementsFromPoint/elementsFromPoint-iframes.html [ Failure ]
 crbug.com/591099 fast/dom/elementsFromPoint/elementsFromPoint-svg.html [ Failure ]
-crbug.com/591099 fast/dom/elementsFromPoint/elementsFromPoint-table.html [ Failure ]
 crbug.com/591099 fast/dom/empty-anchor-in-overflow-scroller.html [ Failure ]
 crbug.com/591099 fast/dom/empty-hash-and-search.html [ Failure Pass ]
 crbug.com/591099 fast/dom/firstline-fixed-crash.html [ Failure ]
@@ -4359,7 +4246,6 @@
 crbug.com/591099 fast/dom/nodesFromRect/nodesFromRect-inline-image.html [ Failure ]
 crbug.com/591099 fast/dom/nodesFromRect/nodesFromRect-inner-documents.html [ Failure ]
 crbug.com/591099 fast/dom/nodesFromRect/nodesFromRect-links-and-text.html [ Failure ]
-crbug.com/591099 fast/dom/nodesFromRect/nodesFromRect-table.html [ Failure ]
 crbug.com/591099 fast/dom/offset-parent-positioned-and-inline.html [ Failure Pass ]
 crbug.com/591099 fast/dom/open-and-close-by-DOM.html [ Failure ]
 crbug.com/591099 fast/dom/outerText.html [ Failure ]
@@ -4460,9 +4346,7 @@
 crbug.com/591099 fast/events/click-svganchor-blur-refocus-window.html [ Failure ]
 crbug.com/591099 fast/events/click-svganchor-refocus-window.html [ Failure ]
 crbug.com/591099 fast/events/constructors/wheel-event-constructor.html [ Failure Pass Timeout ]
-crbug.com/591099 fast/events/content-changed-during-drop.html [ Crash Failure Pass ]
 crbug.com/591099 fast/events/context-no-deselect.html [ Crash Failure ]
-crbug.com/591099 fast/events/document-elementFromPoint.html [ Failure Pass ]
 crbug.com/591099 fast/events/domactivate-sets-underlying-click-event-as-handled.html [ Crash Failure ]
 crbug.com/591099 fast/events/drag-and-drop-autoscroll-inner-frame.html [ Timeout ]
 crbug.com/591099 fast/events/drag-dragend-detaches.html [ Failure ]
@@ -4492,7 +4376,6 @@
 crbug.com/591099 fast/events/keydown-keypress-focus-change.html [ Failure ]
 crbug.com/591099 fast/events/keydown-keypress-preventDefault.html [ Failure ]
 crbug.com/591099 fast/events/keypress-focus-change.html [ Failure ]
-crbug.com/591099 fast/events/keypress-removed-node.html [ Crash Failure Pass ]
 crbug.com/591099 fast/events/media-element-focus-tab.html [ Failure ]
 crbug.com/591099 fast/events/middleClickAutoscroll-in-iframe.html [ Timeout ]
 crbug.com/591099 fast/events/middleClickAutoscroll-nested-divs-forbidden.html [ Timeout ]
@@ -4509,13 +4392,11 @@
 crbug.com/591099 fast/events/mousemove-to-resizer-changes-cursor.html [ Failure ]
 crbug.com/591099 fast/events/mouseover-mouseout.html [ Failure ]
 crbug.com/591099 fast/events/no-blur-on-enter-button.html [ Failure ]
-crbug.com/591099 fast/events/offsetX-offsetY.html [ Failure Timeout ]
 crbug.com/591099 fast/events/onblur-remove.html [ Crash Failure ]
 crbug.com/591099 fast/events/onchange-range-slider.html [ Failure ]
 crbug.com/591099 fast/events/onload-re-entry.html [ Failure ]
 crbug.com/591099 fast/events/onload-webkit-before-webcore.html [ Failure ]
 crbug.com/591099 fast/events/page-scaled-mouse-click-iframe.html [ Failure ]
-crbug.com/591099 fast/events/page-visibility-iframe-delete-test.html [ Crash Failure Pass ]
 crbug.com/591099 fast/events/pointer-events-2.html [ Failure ]
 crbug.com/591099 fast/events/pointerevents/mouse-on-object.html [ Crash Failure ]
 crbug.com/591099 fast/events/pointerevents/mouse-pointer-capture-transition-events.html [ Timeout ]
@@ -4712,7 +4593,7 @@
 crbug.com/591099 fast/forms/range/slider-transformed.html [ Failure Pass ]
 crbug.com/591099 fast/forms/range/slider-zoomed.html [ Failure ]
 crbug.com/591099 fast/forms/range/thumbslider-no-parent-slider.html [ Failure ]
-crbug.com/591099 fast/forms/reportValidity-valid.html [ Crash Failure ]
+crbug.com/591099 fast/forms/reportValidity-valid.html [ Crash Failure Timeout ]
 crbug.com/591099 fast/forms/reset-autofilled.html [ Failure ]
 crbug.com/591099 fast/forms/restore-selection-after-layout.html [ Crash Failure ]
 crbug.com/591099 fast/forms/search/search-appearance-basic.html [ Crash Failure ]
@@ -4723,11 +4604,9 @@
 crbug.com/591099 fast/forms/search/search-rtl.html [ Crash Failure ]
 crbug.com/591099 fast/forms/search/search-vertical-alignment.html [ Crash Failure ]
 crbug.com/591099 fast/forms/search/searchfield-heights.html [ Crash Failure ]
-crbug.com/591099 fast/forms/select-popup/popup-menu-appearance-coarse.html [ Failure ]
-crbug.com/591099 fast/forms/select-popup/popup-menu-appearance-fractional-width.html [ Failure ]
+crbug.com/591099 fast/forms/select-popup/popup-menu-appearance-fractional-width.html [ Failure Pass ]
 crbug.com/591099 fast/forms/select-popup/popup-menu-appearance-rtl-default.html [ Failure ]
 crbug.com/591099 fast/forms/select-popup/popup-menu-appearance-rtl.html [ Failure ]
-crbug.com/591099 fast/forms/select-popup/popup-menu-appearance-styled.html [ Failure ]
 crbug.com/591099 fast/forms/select/003.html [ Crash Failure ]
 crbug.com/591099 fast/forms/select/004.html [ Failure ]
 crbug.com/591099 fast/forms/select/HTMLOptionElement_label01.html [ Failure ]
@@ -4894,10 +4773,7 @@
 crbug.com/591099 fast/forms/text/text-appearance-basic.html [ Crash Failure ]
 crbug.com/591099 fast/forms/text/text-appearance-datalist.html [ Failure ]
 crbug.com/591099 fast/forms/text/text-font-height-mismatch.html [ Crash Failure ]
-crbug.com/591099 fast/forms/text/text-inner-overflow.html [ Failure Pass ]
-crbug.com/591099 fast/forms/text/text-placeholder-in-flexbox.html [ Failure ]
 crbug.com/591099 fast/forms/text/text-reset.html [ Crash Failure ]
-crbug.com/591099 fast/forms/text/textfield-focus-out.html [ Crash Failure Pass ]
 crbug.com/591099 fast/forms/text/textfield-focus-ring.html [ Failure ]
 crbug.com/591099 fast/forms/text/textfield-outline.html [ Crash Failure ]
 crbug.com/591099 fast/forms/text/textfield-overflow-by-value-update.html [ Crash Failure ]
@@ -4965,7 +4841,6 @@
 crbug.com/591099 fast/frames/frameset-style-recalc.html [ Failure ]
 crbug.com/591099 fast/frames/iframe-onload-remove-self-no-crash.html [ Failure ]
 crbug.com/591099 fast/frames/iframe-option-crash.xhtml [ Failure ]
-crbug.com/591099 fast/frames/iframe-reparenting-unique-name.html [ Crash Failure Pass ]
 crbug.com/591099 fast/frames/iframe-scaling-with-scroll.html [ Failure ]
 crbug.com/591099 fast/frames/iframe-scrolling-attribute.html [ Failure ]
 crbug.com/591099 fast/frames/iframe-text-contents.html [ Failure ]
@@ -5033,7 +4908,6 @@
 crbug.com/591099 fast/inline-block/float-leading-whitespace.html [ Failure ]
 crbug.com/591099 fast/inline-block/float-no-whitespace.html [ Failure ]
 crbug.com/591099 fast/inline-block/float-trailing-whitespace.html [ Failure ]
-crbug.com/591099 fast/inline-block/inline-block-vertical-align.html [ Failure Pass ]
 crbug.com/591099 fast/inline-block/tricky-baseline.html [ Failure ]
 crbug.com/591099 fast/inline-block/vertical-align-top-and-bottom-2.html [ Failure ]
 crbug.com/591099 fast/inline/absolute-positioned-inline-in-centred-block.html [ Failure ]
@@ -5224,7 +5098,6 @@
 crbug.com/591099 fast/multicol/client-rects-crossing-boundaries-nested.html [ Failure Timeout ]
 crbug.com/591099 fast/multicol/client-rects-crossing-boundaries.html [ Failure ]
 crbug.com/591099 fast/multicol/client-rects-rtl.html [ Failure ]
-crbug.com/591099 fast/multicol/client-rects-sole-empty-block.html [ Failure ]
 crbug.com/591099 fast/multicol/client-rects.html [ Failure ]
 crbug.com/591099 fast/multicol/column-break-with-balancing.html [ Failure ]
 crbug.com/591099 fast/multicol/column-count-with-rules.html [ Failure ]
@@ -5345,7 +5218,7 @@
 crbug.com/591099 fast/multicol/inline-getclientrects.html [ Failure ]
 crbug.com/591099 fast/multicol/inner-multicol-in-second-column.html [ Failure ]
 crbug.com/591099 fast/multicol/input-type-number.html [ Failure ]
-crbug.com/591099 fast/multicol/insane-column-gap.html [ Failure ]
+crbug.com/591099 fast/multicol/insane-column-gap.html [ Failure Pass ]
 crbug.com/591099 fast/multicol/layers-in-multicol.html [ Failure ]
 crbug.com/591099 fast/multicol/line-in-next-row-in-fourth-inner-multicol.html [ Failure ]
 crbug.com/591099 fast/multicol/line-pushed-down-by-float.html [ Failure ]
@@ -5401,7 +5274,6 @@
 crbug.com/591099 fast/multicol/newmulticol/breaks-2-columns-3-no-balancing.html [ Failure ]
 crbug.com/591099 fast/multicol/newmulticol/breaks-2-columns-3.html [ Failure ]
 crbug.com/591099 fast/multicol/newmulticol/breaks-3-columns-3.html [ Failure Timeout ]
-crbug.com/591099 fast/multicol/newmulticol/clipping-top-overflow.html [ Failure ]
 crbug.com/591099 fast/multicol/newmulticol/fixed-height-fill-balance-2.html [ Failure ]
 crbug.com/591099 fast/multicol/newmulticol/fixed-height-fill-balance.html [ Failure ]
 crbug.com/591099 fast/multicol/newmulticol/hide-box-vertical-lr.html [ Failure ]
@@ -5434,7 +5306,6 @@
 crbug.com/591099 fast/multicol/paginate-block-replaced.html [ Failure ]
 crbug.com/591099 fast/multicol/positioned-outside-of-columns.html [ Failure ]
 crbug.com/591099 fast/multicol/positioned-split.html [ Failure ]
-crbug.com/591099 fast/multicol/positioned-with-constrained-height.html [ Failure Pass ]
 crbug.com/591099 fast/multicol/positive-leading.html [ Failure ]
 crbug.com/591099 fast/multicol/pushed-line-affected-by-float.html [ Failure ]
 crbug.com/591099 fast/multicol/regular-block-becomes-multicol.html [ Failure ]
@@ -5601,12 +5472,8 @@
 crbug.com/591099 fast/overflow/006.html [ Failure ]
 crbug.com/591099 fast/overflow/007.html [ Failure ]
 crbug.com/591099 fast/overflow/add-visual-overflow-and-change-container-position.html [ Failure ]
-crbug.com/591099 fast/overflow/clip-rects-fixed-ancestor.html [ Failure ]
 crbug.com/591099 fast/overflow/float-in-relpositioned.html [ Failure ]
 crbug.com/591099 fast/overflow/height-during-simplified-layout.html [ Failure ]
-crbug.com/591099 fast/overflow/hidden-html-auto-body.html [ Failure ]
-crbug.com/591099 fast/overflow/hidden-html-hidden-body.html [ Failure Pass ]
-crbug.com/591099 fast/overflow/hidden-html-paged-body.html [ Crash Failure ]
 crbug.com/591099 fast/overflow/image-selection-highlight.html [ Failure ]
 crbug.com/591099 fast/overflow/infiniteRecursion.html [ Crash Failure ]
 crbug.com/591099 fast/overflow/infiniteRecursionGuard.html [ Failure ]
@@ -5624,13 +5491,9 @@
 crbug.com/591099 fast/overflow/overflow-with-local-background-attachment.html [ Crash Failure ]
 crbug.com/591099 fast/overflow/overflow-x-y.html [ Crash Failure ]
 crbug.com/591099 fast/overflow/replaced-child-100percent-height-inside-fixed-container-with-overflow-auto.html [ Crash Failure ]
-crbug.com/591099 fast/overflow/scroll-html-hidden-body.html [ Failure Pass ]
-crbug.com/591099 fast/overflow/scroll-html-paged-body.html [ Crash Failure Pass ]
 crbug.com/591099 fast/overflow/scroll-nested-positioned-layer-in-overflow.html [ Failure ]
-crbug.com/591099 fast/overflow/scrollRevealButton.html [ Failure Pass ]
 crbug.com/591099 fast/overflow/scrollbar-restored-and-then-locked.html [ Crash Failure ]
 crbug.com/591099 fast/overflow/scrollbar-restored.html [ Failure ]
-crbug.com/591099 fast/overflow/trailing-float-linebox.html [ Failure Pass ]
 crbug.com/591099 fast/overflow/unreachable-overflow-rtl-bug.html [ Failure ]
 crbug.com/591099 fast/pagination/auto-height-with-break.html [ Crash Failure ]
 crbug.com/591099 fast/pagination/break-in-paged-overflow.html [ Crash Failure ]
@@ -5673,7 +5536,6 @@
 crbug.com/591099 fast/parser/noscript-with-javascript-disabled.html [ Failure ]
 crbug.com/591099 fast/parser/open-comment-in-style.html [ Failure ]
 crbug.com/591099 fast/parser/open-comment-in-textarea.html [ Crash Failure ]
-crbug.com/591099 fast/parser/residual-style-dom.html [ Pass Timeout ]
 crbug.com/591099 fast/parser/stray-end-tags-with-attributes-002-alt-quirks.html [ Failure ]
 crbug.com/591099 fast/parser/stray-end-tags-with-attributes-002-alt.html [ Failure ]
 crbug.com/591099 fast/parser/style-script-head-test.html [ Failure ]
@@ -5693,7 +5555,6 @@
 crbug.com/591099 fast/reflections/reflection-with-zoom.html [ Failure ]
 crbug.com/591099 fast/reflections/table-cell.html [ Failure ]
 crbug.com/591099 fast/reflections/transparent-reflected-sublayers.html [ Failure ]
-crbug.com/591099 fast/replaced/008.html [ Crash Failure Pass ]
 crbug.com/591099 fast/replaced/absolute-position-auto-width-and-left-and-right-and-intrinsic-width-quirks.html [ Crash Failure ]
 crbug.com/591099 fast/replaced/absolute-position-auto-width-and-left-and-right-and-intrinsic-width.html [ Crash Failure ]
 crbug.com/591099 fast/replaced/absolute-position-percentage-height.html [ Failure ]
@@ -5708,29 +5569,21 @@
 crbug.com/591099 fast/replaced/image-map-cursor.html [ Crash Failure ]
 crbug.com/591099 fast/replaced/image-map-on-image-with-inline-content-data.html [ Crash Failure ]
 crbug.com/591099 fast/replaced/image-map.html [ Failure ]
-crbug.com/591099 fast/replaced/image-onload.html [ Failure Pass ]
-crbug.com/591099 fast/replaced/inline-box-wrapper-handover.html [ Failure Pass ]
 crbug.com/591099 fast/replaced/max-width-percent.html [ Failure ]
-crbug.com/591099 fast/replaced/maxwidth-percent.html [ Failure Pass ]
-crbug.com/591099 fast/replaced/minwidth-percent.html [ Failure Pass ]
 crbug.com/591099 fast/replaced/no-focus-ring-embed.html [ Failure Timeout ]
 crbug.com/591099 fast/replaced/no-focus-ring-iframe.html [ Timeout ]
 crbug.com/591099 fast/replaced/no-focus-ring-object.html [ Failure Pass Timeout ]
-crbug.com/591099 fast/replaced/object-align-hspace-vspace.html [ Failure Pass ]
 crbug.com/591099 fast/replaced/object-with-non-empty-classid-triggers-fallback.html [ Crash Failure ]
 crbug.com/591099 fast/replaced/outline-replaced-elements.html [ Failure Pass ]
 crbug.com/591099 fast/replaced/percent-height-in-anonymous-block-in-table.html [ Failure ]
 crbug.com/591099 fast/replaced/percent-height-in-anonymous-block.html [ Failure ]
 crbug.com/591099 fast/replaced/preferred-widths.html [ Failure ]
-crbug.com/591099 fast/replaced/replaced-breaking-mixture.html [ Failure Pass ]
-crbug.com/591099 fast/replaced/replaced-breaking.html [ Failure Pass ]
 crbug.com/591099 fast/replaced/replaced-child-of-absolute-with-auto-height.html [ Failure ]
 crbug.com/591099 fast/replaced/replaced-element-with-percentage-height-anonymous-block-parent.html [ Failure ]
 crbug.com/591099 fast/replaced/selection-rect-transform.html [ Crash Failure ]
 crbug.com/591099 fast/replaced/selection-rect.html [ Failure Pass ]
 crbug.com/591099 fast/replaced/table-percent-height.html [ Failure ]
 crbug.com/591099 fast/replaced/table-replaced-element.html [ Failure ]
-crbug.com/591099 fast/replaced/vertical-lr/absolute-position-percentage-width.html [ Failure ]
 crbug.com/591099 fast/replaced/vertical-resize-100percent-element.html [ Failure ]
 crbug.com/591099 fast/replaced/vertical-rl/absolute-position-percentage-width.html [ Failure ]
 crbug.com/591099 fast/replaced/vertical-rl/absolute-position-with-auto-height-and-top-and-bottom.html [ Failure ]
@@ -5870,7 +5723,6 @@
 crbug.com/591099 fast/selectors/unqualified-hover-quirks.html [ Failure ]
 crbug.com/591099 fast/selectors/unqualified-hover-strict.html [ Failure ]
 crbug.com/591099 fast/selectors/visited-descendant.html [ Failure ]
-crbug.com/591099 fast/shapes/parsing/parsing-shape-outside.html [ Failure Pass Timeout ]
 crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-big-box-border-radius-001.html [ Failure ]
 crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-big-box-border-radius-002.html [ Failure ]
 crbug.com/591099 fast/shapes/shape-outside-floats/shape-outside-boxes-001.html [ Failure ]
@@ -5945,7 +5797,6 @@
 crbug.com/591099 fast/spatial-navigation/snav-fully-aligned-vertically.html [ Failure ]
 crbug.com/591099 fast/spatial-navigation/snav-hidden-iframe.html [ Failure ]
 crbug.com/591099 fast/spatial-navigation/snav-multiple-select-focusring.html [ Failure ]
-crbug.com/591099 fast/spatial-navigation/snav-z-index.html [ Failure Pass ]
 crbug.com/591099 fast/sub-pixel/block-preferred-widths-with-sub-pixel-floats.html [ Failure ]
 crbug.com/591099 fast/sub-pixel/column-clipping.html [ Failure ]
 crbug.com/591099 fast/sub-pixel/computedstylemargin.html [ Failure ]
@@ -5958,24 +5809,16 @@
 crbug.com/591099 fast/sub-pixel/size-of-box-with-zoom.html [ Failure ]
 crbug.com/591099 fast/sub-pixel/sub-pixel-border-2.html [ Failure ]
 crbug.com/591099 fast/table/009.html [ Failure ]
-crbug.com/591099 fast/table/014.html [ Failure Pass ]
 crbug.com/591099 fast/table/018.html [ Failure ]
 crbug.com/591099 fast/table/032.html [ Failure ]
-crbug.com/591099 fast/table/035-vertical.html [ Failure ]
-crbug.com/591099 fast/table/035.html [ Failure ]
 crbug.com/591099 fast/table/absolute-table-percent-lengths.html [ Failure ]
 crbug.com/591099 fast/table/anonymous-table-no-baseline-align.html [ Failure ]
-crbug.com/591099 fast/table/auto-with-percent-height-vertical.html [ Failure ]
-crbug.com/591099 fast/table/auto-with-percent-height.html [ Failure ]
-crbug.com/591099 fast/table/backgr_border-table-quirks-collapsed-border.html [ Failure Pass ]
-crbug.com/591099 fast/table/backgr_border-table-quirks.html [ Failure Pass ]
 crbug.com/591099 fast/table/backgr_layers-opacity-collapsed-border.html [ Crash Failure Pass ]
 crbug.com/591099 fast/table/backgr_layers-opacity.html [ Failure ]
 crbug.com/591099 fast/table/backgr_layers-show-collapsed-border.html [ Failure ]
 crbug.com/591099 fast/table/backgr_layers-show.html [ Failure ]
 crbug.com/591099 fast/table/border-collapsing/003-vertical.html [ Failure ]
 crbug.com/591099 fast/table/border-collapsing/004-vertical.html [ Crash Failure ]
-crbug.com/591099 fast/table/border-collapsing/004.html [ Failure ]
 crbug.com/591099 fast/table/border-collapsing/border-collapsing-head-foot-vertical.html [ Failure ]
 crbug.com/591099 fast/table/change-col-border-width.html [ Crash Failure ]
 crbug.com/591099 fast/table/change-row-border-width-floating-container.html [ Crash Failure ]
@@ -5994,13 +5837,9 @@
 crbug.com/591099 fast/table/incomplete-table-in-fragment-2.html [ Failure ]
 crbug.com/591099 fast/table/incomplete-table-in-fragment-hang.html [ Failure ]
 crbug.com/591099 fast/table/inline-table-margin-baseline.html [ Failure ]
-crbug.com/591099 fast/table/invisible-cell-background.html [ Failure ]
 crbug.com/591099 fast/table/large-shrink-wrapped-width.html [ Failure ]
 crbug.com/591099 fast/table/margins-flipped-text-direction.html [ Failure ]
-crbug.com/591099 fast/table/margins-perpendicular-containing-block.html [ Failure ]
-crbug.com/591099 fast/table/min-width-css-block-table.html [ Failure Pass Timeout ]
 crbug.com/591099 fast/table/min-width-html-block-table.html [ Failure Pass Timeout ]
-crbug.com/591099 fast/table/nested-percent-height-table.html [ Failure ]
 crbug.com/591099 fast/table/percent-height-content-in-fixed-height-cell-and-fixed-height-from-row.html [ Failure ]
 crbug.com/591099 fast/table/percent-height-content-in-fixed-height-cell.html [ Failure ]
 crbug.com/591099 fast/table/percent-height-overflow-auto-content-in-cell.html [ Failure ]
@@ -6010,8 +5849,6 @@
 crbug.com/591099 fast/table/percent-widths-stretch-vertical.html [ Failure ]
 crbug.com/591099 fast/table/recalc-section-first-body-crash-main.html [ Failure ]
 crbug.com/591099 fast/table/row-in-inline-block.html [ Failure ]
-crbug.com/591099 fast/table/stale-grid-crash.html [ Failure Pass ]
-crbug.com/591099 fast/table/table-cell-negative-start-margin-align-center.html [ Failure ]
 crbug.com/591099 fast/table/table-display-types-vertical.html [ Failure ]
 crbug.com/591099 fast/table/table-rowspan-table-height-and-row-precent-height-too-large.html [ Failure ]
 crbug.com/591099 fast/table/table-sections-border-spacing.html [ Failure ]
@@ -6071,23 +5908,6 @@
 crbug.com/591099 fast/text-autosizing/resize-window.html [ Failure ]
 crbug.com/591099 fast/text-autosizing/similar-clusters.html [ Failure ]
 crbug.com/591099 fast/text-autosizing/span-child.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/supercluster-multiple-layout.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/css-table-lots-of-text-many-cells.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/css-table-single-cell-lots-of-text.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/fixed-table-lots-of-text-many-cells.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/fixed-table-single-cell-lots-of-text.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/lots-of-text-many-cells.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/narrow-percentage-width.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/narrow-specified-width.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/nested-table-wrapping.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/nested-tables.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/single-cell-lots-of-text.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/single-percent-width-cell-lots-of-text.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/table-cell-inflation.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/table-for-layout.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/table-with-inline-block.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/wide-percentage-width.html [ Failure ]
-crbug.com/591099 fast/text-autosizing/tables/wide-specified-width.html [ Failure ]
 crbug.com/591099 fast/text-autosizing/unwrappable-blocks.html [ Failure ]
 crbug.com/591099 fast/text-autosizing/unwrappable-inlines.html [ Failure ]
 crbug.com/591099 fast/text-autosizing/various-font-sizes.html [ Failure ]
@@ -6102,6 +5922,7 @@
 crbug.com/591099 fast/text/complex-text-opacity.html [ Failure ]
 crbug.com/591099 fast/text/container-align-with-inlines.html [ Failure ]
 crbug.com/591099 fast/text/decorations-with-text-combine.html [ Failure ]
+crbug.com/591099 fast/text/descent-clip-in-scaled-page.html [ Failure ]
 crbug.com/591099 fast/text/ellipsis-at-edge-of-ltr-text-in-rtl-flow.html [ Failure ]
 crbug.com/591099 fast/text/ellipsis-at-edge-of-rtl-text-in-ltr-flow.html [ Failure ]
 crbug.com/591099 fast/text/ellipsis-in-absolute-block.html [ Failure ]
@@ -6127,18 +5948,15 @@
 crbug.com/591099 fast/text/ellipsis-rtl-text-in-rtl-flow-underline.html [ Failure ]
 crbug.com/591099 fast/text/ellipsis-rtl-text-in-rtl-flow.html [ Failure ]
 crbug.com/591099 fast/text/ellipsis-stroked.html [ Failure ]
-crbug.com/591099 fast/text/emoji-web-font.html [ Failure Pass ]
 crbug.com/591099 fast/text/emphasis-avoid-ruby.html [ Crash Failure ]
 crbug.com/591099 fast/text/emphasis-combined-text.html [ Failure ]
 crbug.com/591099 fast/text/emphasis-complex.html [ Failure ]
 crbug.com/591099 fast/text/emphasis-ellipsis-complextext.html [ Failure ]
 crbug.com/591099 fast/text/emphasis-overlap.html [ Failure ]
 crbug.com/591099 fast/text/find-kana.html [ Timeout ]
-crbug.com/591099 fast/text/firstline/001.html [ Failure Pass ]
-crbug.com/591099 fast/text/font-ascent-mac.html [ Failure ]
 crbug.com/591099 fast/text/font-smallcaps-layout.html [ Failure ]
-crbug.com/591099 fast/text/glyph-overflow-with-word-spacing.html [ Failure ]
-crbug.com/591099 fast/text/glyph-overflow.html [ Failure ]
+crbug.com/591099 fast/text/glyph-overflow-with-word-spacing.html [ Failure Pass ]
+crbug.com/591099 fast/text/glyph-overflow.html [ Failure Pass ]
 crbug.com/591099 fast/text/hide-atomic-inlines-after-ellipsis.html [ Crash Failure ]
 crbug.com/591099 fast/text/international/bidi-AN-after-empty-run.html [ Failure ]
 crbug.com/591099 fast/text/international/bidi-LDB-2-CSS.html [ Failure ]
@@ -6148,8 +5966,6 @@
 crbug.com/591099 fast/text/international/bidi-linebreak-001.html [ Failure ]
 crbug.com/591099 fast/text/international/bidi-linebreak-002.html [ Failure ]
 crbug.com/591099 fast/text/international/bidi-linebreak-003.html [ Failure ]
-crbug.com/591099 fast/text/international/bidi-listbox-atsui.html [ Failure Pass ]
-crbug.com/591099 fast/text/international/bidi-listbox.html [ Failure Pass ]
 crbug.com/591099 fast/text/international/bidi-mirror-he-ar.html [ Failure ]
 crbug.com/591099 fast/text/international/draw-complex-text-from-to.html [ Failure ]
 crbug.com/591099 fast/text/international/iso-8859-8.html [ Failure ]
@@ -6161,8 +5977,6 @@
 crbug.com/591099 fast/text/large-text-composed-char.html [ Failure Timeout ]
 crbug.com/591099 fast/text/letter-spacing-leading-and-trailing.html [ Failure ]
 crbug.com/591099 fast/text/long-word.html [ Failure Timeout ]
-crbug.com/591099 fast/text/midword-break-after-breakable-char.html [ Failure Pass ]
-crbug.com/591099 fast/text/monospace-width-cache.html [ Failure Pass ]
 crbug.com/591099 fast/text/offsetForPosition-cluster-at-zero.html [ Failure ]
 crbug.com/591099 fast/text/offsetForPosition-complex-fallback.html [ Failure ]
 crbug.com/591099 fast/text/orientation-sideways.html [ Failure ]
@@ -6234,7 +6048,6 @@
 crbug.com/591099 fast/writing-mode/Kusa-Makura-background-canvas.html [ Crash Failure ]
 crbug.com/591099 fast/writing-mode/auto-margins-across-boundaries.html [ Failure ]
 crbug.com/591099 fast/writing-mode/auto-sizing-orthogonal-flows.html [ Failure ]
-crbug.com/591099 fast/writing-mode/background-vertical-lr.html [ Failure ]
 crbug.com/591099 fast/writing-mode/background-vertical-rl.html [ Failure ]
 crbug.com/591099 fast/writing-mode/basic-vertical-line.html [ Failure ]
 crbug.com/591099 fast/writing-mode/block-level-images.html [ Failure ]
@@ -6249,7 +6062,6 @@
 crbug.com/591099 fast/writing-mode/fallback-orientation.html [ Failure ]
 crbug.com/591099 fast/writing-mode/fieldsets.html [ Crash Failure Pass ]
 crbug.com/591099 fast/writing-mode/flipped-blocks-hit-test-line-edges.html [ Failure ]
-crbug.com/591099 fast/writing-mode/flipped-blocks-hit-test-overflow.html [ Failure ]
 crbug.com/591099 fast/writing-mode/flipped-blocks-inline-map-local-to-container.html [ Crash Failure ]
 crbug.com/591099 fast/writing-mode/flipped-blocks-text-map-local-to-container.html [ Failure ]
 crbug.com/591099 fast/writing-mode/inline-direction-positioning.html [ Crash Failure ]
@@ -6259,7 +6071,6 @@
 crbug.com/591099 fast/writing-mode/japanese-ruby-vertical-lr.html [ Crash Failure ]
 crbug.com/591099 fast/writing-mode/japanese-ruby-vertical-rl.html [ Crash Failure ]
 crbug.com/591099 fast/writing-mode/logical-height-after-clear.html [ Failure ]
-crbug.com/591099 fast/writing-mode/margin-collapse.html [ Failure ]
 crbug.com/591099 fast/writing-mode/margins.html [ Failure ]
 crbug.com/591099 fast/writing-mode/orthogonal-writing-modes-available-width-absolute-crash.html [ Failure ]
 crbug.com/591099 fast/writing-mode/percentage-height-orthogonal-writing-modes-quirks.html [ Failure ]
@@ -6293,7 +6104,6 @@
 crbug.com/591099 fast/xsl/xslt-in-subframe.html [ Failure ]
 crbug.com/591099 fast/xsl/xslt-relative-path.xml [ Failure ]
 crbug.com/591099 fast/xsl/xslt_unicode.xml [ Failure ]
-crbug.com/591099 fonts/fantasy.html [ Failure Pass ]
 crbug.com/591099 fonts/monospace.html [ Failure ]
 crbug.com/591099 fonts/sans-serif.html [ Failure ]
 crbug.com/591099 fonts/serif.html [ Failure ]
@@ -6557,7 +6367,6 @@
 crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ Crash Failure Timeout ]
 crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-in-internal.html [ Crash Failure Pass ]
 crbug.com/591099 http/tests/devtools/sources/debugger-ui/function-generator-details.html [ Crash Failure Pass ]
-crbug.com/591099 http/tests/devtools/sources/debugger-ui/source-frame-count.html [ Crash Failure Pass ]
 crbug.com/591099 http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion.html [ Crash Failure Pass ]
 crbug.com/591099 http/tests/devtools/sources/debugger/properties-special.html [ Failure Pass ]
 crbug.com/591099 http/tests/devtools/startup/console/console-uncaught-promise-no-inspector.html [ Failure Pass Timeout ]
@@ -6788,7 +6597,6 @@
 crbug.com/591099 ietestcenter/css3/text/textshadow-010.htm [ Failure ]
 crbug.com/591099 images/12-55.html [ Failure ]
 crbug.com/591099 images/182.html [ Failure ]
-crbug.com/591099 images/2-comp.html [ Failure Pass ]
 crbug.com/591099 images/2-dht.html [ Failure ]
 crbug.com/591099 images/23-55.html [ Failure ]
 crbug.com/591099 images/55.html [ Crash Failure ]
@@ -6876,7 +6684,6 @@
 crbug.com/591099 images/webp-flip.html [ Failure ]
 crbug.com/591099 images/zoomed-img-size.html [ Failure ]
 crbug.com/591099 inspector-protocol/accessibility/accessibility-ignoredNodes.js [ Crash Failure Timeout ]
-crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-buttons.js [ Crash Failure Pass Timeout ]
 crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-img-figure.js [ Crash Failure Timeout ]
 crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-input-buttons.js [ Crash Timeout ]
 crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-input.js [ Crash Failure Timeout ]
@@ -6894,7 +6701,6 @@
 crbug.com/591099 intersection-observer/edge-inclusive-intersection.html [ Failure ]
 crbug.com/591099 intersection-observer/remove-element.html [ Failure ]
 crbug.com/591099 intersection-observer/same-document-root.html [ Crash Failure ]
-crbug.com/591099 jquery/offset.html [ Crash Failure ]
 crbug.com/591099 media/autoplay/document-user-activation.html [ Failure ]
 crbug.com/591099 media/controls-drag-timebar-rendering.html [ Pass ]
 crbug.com/591099 media/controls-timeline.html [ Failure ]
@@ -6905,7 +6711,6 @@
 crbug.com/591099 media/controls/video-overlay-cast-dark-rendering.html [ Failure ]
 crbug.com/591099 media/controls/video-overlay-cast-light-rendering.html [ Failure ]
 crbug.com/591099 media/media-document-audio-repaint.html [ Failure ]
-crbug.com/591099 media/track/media-element-move-to-new-document-assert.html [ Failure Pass ]
 crbug.com/591099 media/track/track-cue-rendering-horizontal.html [ Failure Pass ]
 crbug.com/591099 media/track/track-cue-rendering-tree-is-removed-properly.html [ Crash Failure ]
 crbug.com/591099 media/track/track-cue-rendering-vertical.html [ Failure Pass ]
@@ -7436,13 +7241,10 @@
 crbug.com/591099 paint/invalidation/svg/add-background-property-on-root.html [ Failure Pass ]
 crbug.com/591099 paint/invalidation/svg/add-outline-property-on-root.html [ Failure Pass ]
 crbug.com/591099 paint/invalidation/svg/animated-path-inside-transformed-html.xhtml [ Failure Pass ]
-crbug.com/591099 paint/invalidation/svg/animated-svg-as-image-same-image.html [ Failure Pass ]
 crbug.com/591099 paint/invalidation/svg/animated-svg-as-image-transformed-offscreen.html [ Failure Pass ]
-crbug.com/591099 paint/invalidation/svg/animated-svg-as-image.html [ Failure Pass ]
 crbug.com/591099 paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-1.html [ Failure ]
 crbug.com/591099 paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-2.html [ Failure ]
 crbug.com/591099 paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers.html [ Failure ]
-crbug.com/591099 paint/invalidation/svg/embedded-svg-size-changes.html [ Failure Pass ]
 crbug.com/591099 paint/invalidation/svg/foreign-object-repaint.svg [ Failure Pass ]
 crbug.com/591099 paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1.html [ Failure ]
 crbug.com/591099 paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2.html [ Failure ]
@@ -7604,7 +7406,6 @@
 crbug.com/591099 plugins/mouse-click-plugin-clears-selection.html [ Crash Failure ]
 crbug.com/591099 plugins/mouse-events-fixedpos.html [ Failure ]
 crbug.com/591099 plugins/mouse-events.html [ Failure ]
-crbug.com/591099 plugins/plugin-document-back-forward.html [ Pass Timeout ]
 crbug.com/591099 plugins/plugin-initiate-popup-window.html [ Timeout ]
 crbug.com/591099 plugins/refcount-leaks.html [ Failure ]
 crbug.com/591099 plugins/tabindex.html [ Crash Failure ]
@@ -7831,7 +7632,6 @@
 crbug.com/591099 svg/as-image/svg-object-intrinsic-size.html [ Failure ]
 crbug.com/591099 svg/as-image/svgview-references-use-counters.html [ Failure ]
 crbug.com/591099 svg/as-list-image/svg-list-image-intrinsic-size-zoom.html [ Failure ]
-crbug.com/591099 svg/as-object/embedded-svg-immediate-offsetWidth-query.html [ Failure Pass ]
 crbug.com/591099 svg/as-object/object-box-sizing-no-width-height.html [ Failure Pass ]
 crbug.com/591099 svg/as-object/svg-embedded-in-html-in-iframe.html [ Failure Pass Timeout ]
 crbug.com/591099 svg/canvas/canvas-default-object-sizing.html [ Failure Pass ]
@@ -7983,7 +7783,6 @@
 crbug.com/591099 svg/parser/whitespace-length-invalid-2.html [ Crash Timeout ]
 crbug.com/591099 svg/parser/whitespace-length-invalid-3.html [ Crash Timeout ]
 crbug.com/591099 svg/parser/whitespace-length-invalid-4.html [ Crash Timeout ]
-crbug.com/591099 svg/parser/whitespace-length.html [ Crash Pass Timeout ]
 crbug.com/591099 svg/parser/whitespace-number.html [ Crash Timeout ]
 crbug.com/591099 svg/stroke/empty-path.html [ Failure Pass ]
 crbug.com/591099 svg/text/bbox-with-glyph-overflow-on-path.html [ Failure ]
@@ -8039,14 +7838,12 @@
 crbug.com/591099 svg/zoom/text/zoom-hixie-mixed-009.xml [ Failure Pass ]
 crbug.com/591099 svg/zoom/text/zoom-hixie-rendering-model-004.xhtml [ Failure Pass ]
 crbug.com/591099 svg/zoom/text/zoom-svg-float-border-padding.xml [ Failure ]
-crbug.com/591099 tables/hittesting/filltable-stress.html [ Pass Timeout ]
 crbug.com/591099 tables/layering/paint-test-layering-1.html [ Failure ]
 crbug.com/591099 tables/layering/paint-test-layering-2.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug10633.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug109043.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug110566.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug113235-1.html [ Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug113235-2.html [ Failure Pass ]
 crbug.com/591099 tables/mozilla/bugs/bug12008.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug126742.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug1271.html [ Failure ]
@@ -8054,19 +7851,14 @@
 crbug.com/591099 tables/mozilla/bugs/bug131020-2.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug131020.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug131020_iframe.html [ Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug13105.html [ Failure Pass ]
 crbug.com/591099 tables/mozilla/bugs/bug133948.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug137388-3.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug149275-1.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug149275-2.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug154780.html [ Crash Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug16012.html [ Failure Pass ]
 crbug.com/591099 tables/mozilla/bugs/bug16252.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug18440.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug18664.html [ Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug19061-1.html [ Failure Pass ]
-crbug.com/591099 tables/mozilla/bugs/bug19061-2.html [ Failure Pass ]
-crbug.com/591099 tables/mozilla/bugs/bug19599.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug196870.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug2050.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug20579.html [ Failure ]
@@ -8076,16 +7868,11 @@
 crbug.com/591099 tables/mozilla/bugs/bug23151.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug23235.html [ Crash Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug24200.html [ Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug2469.html [ Failure Pass ]
 crbug.com/591099 tables/mozilla/bugs/bug2479-3.html [ Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug269566.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug27038-1.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug27038-2.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug2886.html [ Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug29326.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug2962.html [ Crash Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug2981-2.html [ Failure Pass ]
-crbug.com/591099 tables/mozilla/bugs/bug30559.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug30692.html [ Crash Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug3191.html [ Crash Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug32205-2.html [ Crash Failure ]
@@ -8093,7 +7880,6 @@
 crbug.com/591099 tables/mozilla/bugs/bug3309-1.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug3309-2.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug33137.html [ Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug3454.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug3977.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug4093.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug4284.html [ Failure ]
@@ -8107,7 +7893,6 @@
 crbug.com/591099 tables/mozilla/bugs/bug53690-2.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug5538.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug55694.html [ Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug56563.html [ Failure Pass ]
 crbug.com/591099 tables/mozilla/bugs/bug57828-2.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug57828.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug5798.html [ Failure ]
@@ -8116,15 +7901,11 @@
 crbug.com/591099 tables/mozilla/bugs/bug6304.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug63785.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug641-2.html [ Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug647.html [ Failure Pass ]
 crbug.com/591099 tables/mozilla/bugs/bug69187.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug7112-1.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug7112-2.html [ Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug727.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug7342.html [ Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug82946-1.html [ Failure Pass ]
 crbug.com/591099 tables/mozilla/bugs/bug82946-2.html [ Failure ]
-crbug.com/591099 tables/mozilla/bugs/bug83786.html [ Crash Failure Pass ]
 crbug.com/591099 tables/mozilla/bugs/bug8381.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug86708.html [ Failure ]
 crbug.com/591099 tables/mozilla/bugs/bug88035-1.html [ Failure ]
@@ -8140,29 +7921,16 @@
 crbug.com/591099 tables/mozilla/core/captions.html [ Failure ]
 crbug.com/591099 tables/mozilla/core/cell_heights.html [ Failure ]
 crbug.com/591099 tables/mozilla/core/col_span.html [ Failure ]
-crbug.com/591099 tables/mozilla/core/margins.html [ Failure ]
 crbug.com/591099 tables/mozilla/core/table_heights.html [ Failure ]
-crbug.com/591099 tables/mozilla/marvin/tables_align_center.html [ Failure ]
 crbug.com/591099 tables/mozilla/marvin/tfoot_char.html [ Failure ]
 crbug.com/591099 tables/mozilla/marvin/x_table.xml [ Failure ]
-crbug.com/591099 tables/mozilla/marvin/x_table_align_center.xml [ Failure ]
 crbug.com/591099 tables/mozilla/other/wa_table_thtd_rowspan.html [ Crash Failure ]
 crbug.com/591099 tables/mozilla/other/wa_table_tr_align.html [ Crash Failure ]
 crbug.com/591099 tables/mozilla_expected_failures/bugs/bug1010.html [ Crash Failure ]
-crbug.com/591099 tables/mozilla_expected_failures/bugs/bug104898.html [ Failure ]
-crbug.com/591099 tables/mozilla_expected_failures/bugs/bug1055-2.html [ Failure ]
-crbug.com/591099 tables/mozilla_expected_failures/bugs/bug1128.html [ Failure Pass ]
 crbug.com/591099 tables/mozilla_expected_failures/bugs/bug14007-2.html [ Failure ]
 crbug.com/591099 tables/mozilla_expected_failures/bugs/bug14489.html [ Crash Failure ]
 crbug.com/591099 tables/mozilla_expected_failures/bugs/bug19526.html [ Failure ]
 crbug.com/591099 tables/mozilla_expected_failures/bugs/bug25707.html [ Failure ]
-crbug.com/591099 tables/mozilla_expected_failures/bugs/bug3166-10.html [ Failure ]
-crbug.com/591099 tables/mozilla_expected_failures/bugs/bug3166-13.html [ Failure ]
-crbug.com/591099 tables/mozilla_expected_failures/bugs/bug3166-14.html [ Crash Failure ]
-crbug.com/591099 tables/mozilla_expected_failures/bugs/bug3166-15.html [ Failure ]
-crbug.com/591099 tables/mozilla_expected_failures/bugs/bug3166-16.html [ Failure ]
-crbug.com/591099 tables/mozilla_expected_failures/bugs/bug3166-17.html [ Failure ]
-crbug.com/591099 tables/mozilla_expected_failures/bugs/bug3166-18.html [ Failure ]
 crbug.com/591099 tables/mozilla_expected_failures/bugs/bug33784.html [ Failure ]
 crbug.com/591099 tables/mozilla_expected_failures/bugs/bug61042-1.html [ Failure ]
 crbug.com/591099 tables/mozilla_expected_failures/bugs/bug61042-2.html [ Failure ]
@@ -8173,8 +7941,6 @@
 crbug.com/591099 tables/mozilla_expected_failures/bugs/bug89315.html [ Failure ]
 crbug.com/591099 tables/mozilla_expected_failures/collapsing_borders/bug41262-5.html [ Failure ]
 crbug.com/591099 tables/mozilla_expected_failures/collapsing_borders/bug41262-6.html [ Failure ]
-crbug.com/591099 tables/mozilla_expected_failures/core/captions1.html [ Failure ]
-crbug.com/591099 tables/mozilla_expected_failures/core/captions2.html [ Failure ]
 crbug.com/591099 tables/mozilla_expected_failures/marvin/backgr_fixed-bg.html [ Failure ]
 crbug.com/591099 tables/mozilla_expected_failures/marvin/table_overflow_caption.html [ Failure ]
 crbug.com/591099 tables/mozilla_expected_failures/marvin/table_overflow_caption_bottom.html [ Failure ]
@@ -8256,7 +8022,6 @@
 crbug.com/591099 virtual/feature-policy/http/tests/feature-policy/payment-enabledforall.php [ Pass ]
 crbug.com/591099 virtual/gpu-rasterization/images/12-55.html [ Failure ]
 crbug.com/591099 virtual/gpu-rasterization/images/182.html [ Crash Failure ]
-crbug.com/591099 virtual/gpu-rasterization/images/2-comp.html [ Crash Failure Pass ]
 crbug.com/591099 virtual/gpu-rasterization/images/2-dht.html [ Crash Failure ]
 crbug.com/591099 virtual/gpu-rasterization/images/23-55.html [ Crash Failure ]
 crbug.com/591099 virtual/gpu-rasterization/images/55.html [ Crash Failure ]
@@ -8275,7 +8040,7 @@
 crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-pseudo-content.html [ Crash Failure ]
 crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-shape.html [ Failure ]
 crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image.html [ Failure ]
-crbug.com/591099 virtual/gpu-rasterization/images/color-profile-layer-filter.html [ Crash Failure ]
+crbug.com/591099 virtual/gpu-rasterization/images/color-profile-layer-filter.html [ Crash Failure Timeout ]
 crbug.com/591099 virtual/gpu-rasterization/images/color-profile-layer.html [ Crash Failure Timeout ]
 crbug.com/591099 virtual/gpu-rasterization/images/color-profile-mask-image-svg.html [ Crash Failure ]
 crbug.com/591099 virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb.html [ Failure ]
@@ -8343,18 +8108,18 @@
 crbug.com/591099 virtual/gpu-rasterization/images/sprite-no-bleed.html [ Failure ]
 crbug.com/591099 virtual/gpu-rasterization/images/webp-flip.html [ Failure ]
 crbug.com/591099 virtual/gpu-rasterization/images/zoomed-img-size.html [ Crash Failure ]
+crbug.com/591099 virtual/gpu/fast/canvas/OffscreenCanvas-2d-imageSmoothing-in-worker.html [ Timeout ]
+crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-colorClamping.html [ Pass ]
 crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-drawImage.html [ Crash Timeout ]
 crbug.com/591099 virtual/gpu/fast/canvas/canvas-drawImage-animated-images.html [ Crash Failure ]
 crbug.com/591099 virtual/gpu/fast/canvas/canvas-drawImage-video-imageSmoothingEnabled.html [ Pass ]
 crbug.com/591099 virtual/gpu/fast/canvas/canvas-ellipse-connecting-line.html [ Failure Pass ]
-crbug.com/591099 virtual/gpu/fast/canvas/canvas-imageSmoothingQuality.html [ Crash Failure ]
 crbug.com/591099 virtual/gpu/fast/canvas/canvas-measure-bidi-text.html [ Failure Pass ]
 crbug.com/591099 virtual/gpu/fast/canvas/canvas-render-layer.html [ Failure Pass ]
 crbug.com/591099 virtual/gpu/fast/canvas/canvas-shadow-source-in.html [ Failure Pass ]
 crbug.com/591099 virtual/gpu/fast/canvas/canvas-transforms-during-path.html [ Crash Failure ]
 crbug.com/591099 virtual/gpu/fast/canvas/fill-stroke-clip-reset-path.html [ Failure ]
 crbug.com/591099 virtual/gpu/fast/canvas/fillrect_gradient.html [ Failure ]
-crbug.com/591099 virtual/gpu/fast/canvas/image-object-in-canvas.html [ Crash Failure Pass ]
 crbug.com/591099 virtual/gpu/fast/canvas/patternfill-repeat.html [ Failure ]
 crbug.com/591099 virtual/high-contrast-mode/paint/high-contrast-mode/image-filter-all/text-on-backgrounds.html [ Crash Failure ]
 crbug.com/591099 virtual/layout_ng/ [ Skip ]
diff --git a/third_party/WebKit/LayoutTests/SlowTests b/third_party/WebKit/LayoutTests/SlowTests
index dd3efc8b..934ace0 100644
--- a/third_party/WebKit/LayoutTests/SlowTests
+++ b/third_party/WebKit/LayoutTests/SlowTests
@@ -375,75 +375,70 @@
 crbug.com/646528 compositing/lots-of-img-layers-with-opacity.html [ Slow ]
 
 # SwiftShader slow tests
-crbug.com/726075 [ Win Linux ] animations/svg/animated-filter-svg-element.html [ Slow ]
-crbug.com/726075 [ Win Linux ] compositing/culling/filter-occlusion-blur.html [ Slow ]
-crbug.com/726075 [ Win Linux ] compositing/masks/mask-with-added-filters.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/blending/mix-blend-mode-with-filters.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/effect-all-on-background-hw.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/effect-blur-hw.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/effect-brightness-clamping-hw.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/effect-combined-hw.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/effect-drop-shadow-hw.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/effect-reference-colorspace-hw.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/effect-reference-hw.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/effect-reference-ordering-hw.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/effect-reference-subregion-hw.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/effect-reference-zoom-hw.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/filter-change-repaint.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/filter-repaint-composited-fallback-crash.html [ Slow ]
-crbug.com/726075 [ Win Linux ] css3/filters/filter-repaint-composited-fallback.html [ Slow ]
-crbug.com/726075 [ Win Linux ] images/color-profile-layer-filter.html [ Slow ]
-crbug.com/726075 [ Win Linux ] paint/invalidation/filter-repaint-accelerated-child-with-filter-child.html [ Slow ]
-crbug.com/726075 [ Win Linux ] paint/invalidation/filter-repaint-accelerated-on-accelerated-filter.html [ Slow ]
-crbug.com/726075 [ Win Linux ] paint/invalidation/filter-repaint-on-accelerated-layer.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/exotic-color-space/images/color-profile-layer-filter.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu-rasterization/images/color-profile-mask-image-svg.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu-rasterization/images/color-profile-image-filter-all.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/OffscreenCanvas-filter-in-worker.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/OffscreenCanvas-filter.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-clipping.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-color-over-color.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-color-over-image.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-color-over-gradient.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-color-over-pattern.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-fill-style.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-global-alpha.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-gradient-over-color.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-gradient-over-image.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-gradient-over-pattern.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-gradient-over-gradient.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-image-over-color.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-image-over-gradient.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-image-over-image.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-image-over-pattern.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-pattern-over-color.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-pattern-over-gradient.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-pattern-over-image.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-pattern-over-pattern.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-shadow.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-text.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-blending-transforms.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-composite-transformclip.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-composite-shadow.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-composite-video-shadow.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-fillPath-alpha-shadow.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-fillPath-gradient-shadow.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-fillPath-pattern-shadow.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-filter-origin-clean.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-filter-modified-save-restore.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-filter-modified.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-filter-removed.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-scale-drawImage-shadow.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-scale-strokePath-shadow.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-shadow-source-in.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/gpu/fast/canvas/canvas-strokePath-alpha-shadow.html [ Slow ]
-crbug.com/726075 [ Win Linux ] virtual/threaded/animations/svg/animated-filter-svg-element.html [ Slow ]
+crbug.com/726075 [ Win ] animations/svg/animated-filter-svg-element.html [ Slow ]
+crbug.com/726075 [ Win ] compositing/masks/mask-with-added-filters.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/effect-all-on-background-hw.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/effect-blur-hw.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/effect-brightness-clamping-hw.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/effect-combined-hw.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/effect-drop-shadow-hw.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/effect-reference-colorspace-hw.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/effect-reference-hw.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/effect-reference-ordering-hw.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/effect-reference-subregion-hw.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/effect-reference-zoom-hw.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/filter-change-repaint.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/filter-repaint-composited-fallback-crash.html [ Slow ]
+crbug.com/726075 [ Win ] css3/filters/filter-repaint-composited-fallback.html [ Slow ]
+crbug.com/726075 [ Win ] images/color-profile-layer-filter.html [ Slow ]
+crbug.com/726075 [ Win ] paint/invalidation/filter-repaint-accelerated-on-accelerated-filter.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/exotic-color-space/images/color-profile-layer-filter.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu-rasterization/images/color-profile-image-filter-all.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu-rasterization/images/color-profile-mask-image-svg.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/OffscreenCanvas-filter-in-worker.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/OffscreenCanvas-filter.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-blending-color-over-pattern.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-blending-gradient-over-image.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-blending-gradient-over-pattern.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-blending-gradient-over-gradient.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-blending-pattern-over-gradient.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-blending-pattern-over-image.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-blending-pattern-over-pattern.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-composite-shadow.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-composite-video-shadow.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-fillPath-alpha-shadow.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-fillPath-gradient-shadow.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-fillPath-pattern-shadow.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-filter-origin-clean.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-filter-removed.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-scale-strokePath-shadow.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-shadow-source-in.html [ Slow ]
+crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/canvas-strokePath-alpha-shadow.html [ Slow ]
 
-crbug.com/726075 [ Linux ] media/color-profile-video-seek-filter.html [ Slow ]
-crbug.com/726075 [ Linux ] shapedetection/detection-HTMLVideoElement.html [ Slow ]
-crbug.com/726075 [ Linux ] virtual/gpu/fast/canvas/canvas-strokeRect-alpha-shadow.html [ Slow ]
-
-crbug.com/726075 [ Linux Debug ] virtual/gpu/fast/canvas/canvas-drawImage-live-video.html [ Slow ]
+crbug.com/726075 [ Win Debug ] compositing/culling/filter-occlusion-blur.html [ Slow ]
+crbug.com/726075 [ Win Debug ] css3/blending/mix-blend-mode-with-filters.html [ Slow ]
+crbug.com/726075 [ Win Debug ] paint/invalidation/filter-repaint-accelerated-child-with-filter-child.html [ Slow ]
+crbug.com/726075 [ Win Debug ] paint/invalidation/filter-repaint-on-accelerated-layer.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-clipping.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-color-over-color.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-color-over-gradient.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-color-over-image.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-fill-style.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-global-alpha.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-gradient-over-color.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-image-over-color.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-image-over-gradient.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-image-over-image.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-image-over-pattern.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-pattern-over-color.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-shadow.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-text.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-blending-transforms.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-composite-transformclip.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-filter-modified-save-restore.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-filter-modified.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/gpu/fast/canvas/canvas-scale-drawImage-shadow.html [ Slow ]
+crbug.com/726075 [ Win Debug ] virtual/threaded/animations/svg/animated-filter-svg-element.html [ Slow ]
 
 # IDB Observer tests require multiple browsing contexts/workers interacting with
 # IndexedDB, which can be slow.
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index dc067f1..feccf982 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -92,14 +92,13 @@
 # The failure in the next line is due to virtual/gpu bots using osmesa
 # Under osmesa, skia's filter quality doesn't work correctly. This test is expected to pass
 # when we swith to swiftshader.
-crbug.com/549742 [ Mac ] virtual/gpu/fast/canvas/canvas-drawImage-video-imageSmoothingEnabled.html [ Failure ]
+crbug.com/549742 [ Linux Mac ] virtual/gpu/fast/canvas/canvas-drawImage-video-imageSmoothingEnabled.html [ Failure ]
 
 # SwiftShader Failures
-crbug.com/726075 [ Win Linux ] compositing/3d-cube.html [ Failure ]
+crbug.com/726075 [ Win ] compositing/3d-cube.html [ Failure ]
 crbug.com/726075 [ Win ] virtual/gpu/fast/canvas/2d.fillText.gradient.html [ Failure ]
-crbug.com/726075 [ Win Linux ] external/wpt/webvtt/rendering/cues-with-video/processing-model/dom_override_remove_cue_while_paused.html [ Failure ]
-crbug.com/726075 [ Win Linux ] virtual/exotic-color-space/images/color-profile-border-fade.html [ Failure ]
-crbug.com/726075 [ Linux ] shapedetection/detection-HTMLVideoElement.html [ Timeout ]
+crbug.com/726075 [ Win ] external/wpt/webvtt/rendering/cues-with-video/processing-model/dom_override_remove_cue_while_paused.html [ Failure ]
+crbug.com/726075 [ Win Debug ] virtual/exotic-color-space/images/color-profile-border-fade.html [ Failure ]
 
 # Fails because the manual test hasn't been automated yet
 crbug.com/762054 external/wpt/cssom-view/scrollBoundaryBehavior-manual.html [ Skip ]
@@ -1859,11 +1858,6 @@
 crbug.com/626703 [ Win10 ] external/wpt/preload/delaying-onload-link-preload-after-discovery.html [ Timeout ]
 crbug.com/626703 external/wpt/2dcontext/building-paths/canvas_complexshapes_arcto_001.htm [ Failure ]
 crbug.com/626703 external/wpt/2dcontext/building-paths/canvas_complexshapes_beziercurveto_001.htm [ Failure ]
-crbug.com/626703 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_11.html [ Failure ]
-crbug.com/626703 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_12.html [ Failure ]
-crbug.com/626703 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html [ Failure ]
-crbug.com/626703 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html [ Failure ]
-crbug.com/626703 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html [ Failure ]
 crbug.com/626703 [ Mac ] external/wpt/2dcontext/the-canvas-state/canvas_state_restore_001.htm [ Failure ]
 crbug.com/626703 external/wpt/compat/webkit-text-fill-color-property-005.html [ Failure ]
 crbug.com/626703 external/wpt/content-security-policy/connect-src/connect-src-eventsource-blocked.sub.html [ Timeout ]
@@ -2209,16 +2203,6 @@
 
 # These external tests fail after turning on color correct rendering for canvas
 # since they use a non-SRGB source image.
-crbug.com/763933 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html [ Failure ]
-crbug.com/763933 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html [ Failure ]
-crbug.com/763933 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html [ Failure ]
-crbug.com/763933 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html [ Failure ]
-crbug.com/763933 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html [ Failure ]
-crbug.com/763933 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html [ Failure ]
-crbug.com/763933 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html [ Failure ]
-crbug.com/763933 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html [ Failure ]
-crbug.com/763933 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html [ Failure ]
-crbug.com/763933 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_svg_image_1.html [ Failure ]
 crbug.com/763933 virtual/display_list_2d_canvas/fast/canvas/canvas-pattern-no-repeat-with-transformations.html [ Failure ]
 crbug.com/763933 virtual/display_list_2d_canvas/fast/canvas/image-object-in-canvas.html [ Failure ]
 
diff --git a/third_party/WebKit/LayoutTests/compositing/culling/filter-occlusion-blur-expected.png b/third_party/WebKit/LayoutTests/compositing/culling/filter-occlusion-blur-expected.png
index 46428a3..1df89a6 100644
--- a/third_party/WebKit/LayoutTests/compositing/culling/filter-occlusion-blur-expected.png
+++ b/third_party/WebKit/LayoutTests/compositing/culling/filter-occlusion-blur-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/css3/filters/effect-blur-hw-expected.png b/third_party/WebKit/LayoutTests/css3/filters/effect-blur-hw-expected.png
index c0ab7c9..f92bdbb 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/effect-blur-hw-expected.png
+++ b/third_party/WebKit/LayoutTests/css3/filters/effect-blur-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/css3/filters/filter-repaint-composited-fallback-crash-expected.png b/third_party/WebKit/LayoutTests/css3/filters/filter-repaint-composited-fallback-crash-expected.png
index 85fde79..4aff4f1 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/filter-repaint-composited-fallback-crash-expected.png
+++ b/third_party/WebKit/LayoutTests/css3/filters/filter-repaint-composited-fallback-crash-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/css3/filters/filter-repaint-composited-fallback-expected.png b/third_party/WebKit/LayoutTests/css3/filters/filter-repaint-composited-fallback-expected.png
index 85fde79..4aff4f1 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/filter-repaint-composited-fallback-expected.png
+++ b/third_party/WebKit/LayoutTests/css3/filters/filter-repaint-composited-fallback-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/PRESUBMIT.py b/third_party/WebKit/LayoutTests/external/PRESUBMIT.py
index e1c225a..7f297eaa 100644
--- a/third_party/WebKit/LayoutTests/external/PRESUBMIT.py
+++ b/third_party/WebKit/LayoutTests/external/PRESUBMIT.py
@@ -14,7 +14,7 @@
     wpt_path = input_api.os_path.join(input_api.PresubmitLocalPath(), 'wpt')
     linter_path = input_api.os_path.join(
         input_api.PresubmitLocalPath(), '..', '..', 'Tools', 'Scripts',
-        'webkitpy', 'thirdparty', 'wpt', 'wpt', 'lint')
+        'webkitpy', 'thirdparty', 'wpt', 'wpt', 'wpt')
 
     paths_in_wpt = []
     for f in input_api.AffectedFiles():
@@ -31,6 +31,7 @@
     args = [
         input_api.python_executable,
         linter_path,
+        'lint',
         '--repo-root=%s' % wpt_path,
         '--ignore-glob=*-expected.txt',
     ] + paths_in_wpt
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
index f51e020c..779a4e1 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -254033,7 +254033,7 @@
    "testharness"
   ],
   "fetch/api/cors/cors-preflight-star.any-expected.txt": [
-   "d527ea318ff61b387ab4b6d26701edb399eaba8d",
+   "82d5b67079d5772fed201c91f43fbbbb33445625",
    "support"
   ],
   "fetch/api/cors/cors-preflight-star.any.js": [
@@ -254041,7 +254041,7 @@
    "testharness"
   ],
   "fetch/api/cors/cors-preflight-star.any.worker-expected.txt": [
-   "d527ea318ff61b387ab4b6d26701edb399eaba8d",
+   "82d5b67079d5772fed201c91f43fbbbb33445625",
    "support"
   ],
   "fetch/api/cors/cors-preflight-status.any.js": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/2x2-srgb.png b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/2x2-srgb.png
deleted file mode 100644
index 9be3156..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/2x2-srgb.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/2x2.png b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/2x2.png
index 276791c..9be3156 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/2x2.png
+++ b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/2x2.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas.html
new file mode 100644
index 0000000..36bd085
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas.html
@@ -0,0 +1,203 @@
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<canvas id="dest" height="100" width="100"></canvas>
+
+<script>
+var sourceCanvasWidth = sourceCanvasHeight = 50;
+var destCanvasWidth = destCanvasHeight = 100;
+var blueRect = {x: 0, y: 0, w: 50, h: 50};
+var blackRect = {x: 5, y: 5, w: 40, h: 40};
+var redPixel = [255, 0, 0, 255];
+var bluePixel = [0, 0, 255, 255];
+var blackPixel = [0, 0, 0, 255];
+var transparentBlackPixel = [0, 0, 0, 0];
+
+var destCanvas = document.getElementById('dest');
+var destCtx = destCanvas.getContext('2d');
+destCtx.imageSmoothingEnabled = false;
+
+function checkPixel(location, expected) {
+    var actual = destCtx.getImageData(location[0], location[1], 1, 1).data;
+    assert_array_equals(actual, expected);
+}
+
+function PreparePixelTests(blueCheck, blackCheck, redCheck, testDescription) {
+    var pixelTests = [];
+    for (var i = 0; i < blueCheck.length; i++) {
+        var message = testDescription + 'Pixel ' + blueCheck[i][0] + ',' + blueCheck[i][1] + ' should be blue.';
+        pixelTests.push([message, blueCheck[i], bluePixel]);
+    }
+    for (var i = 0; i < blackCheck.length; i++) {
+        var message = testDescription + 'Pixel ' + blackCheck[i][0] + ',' + blackCheck[i][1] + ' should be black.';
+        pixelTests.push([message, blackCheck[i], blackPixel]);
+    }
+    for (var i = 0; i < redCheck.length; i++) {
+        var message = testDescription + 'Pixel ' + redCheck[i][0] + ',' + redCheck[i][1] + ' should be red.';
+        pixelTests.push([message, redCheck[i], redPixel]);
+    }
+    pixelTests.push([testDescription + 'Pixel outside canvas should be transparent black.\n', [100, 100], transparentBlackPixel]);
+    return pixelTests;
+}
+
+function drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription) {
+    destCtx.fillStyle = 'red';
+    destCtx.fillRect(0, 0,  destCanvasWidth, destCanvasHeight);
+
+    var sourceCanvas = document.createElement('canvas');
+    sourceCanvas.width = sourceCanvasWidth;
+    sourceCanvas.height = sourceCanvasHeight;
+    var sourceCtx = sourceCanvas.getContext('2d');
+    sourceCtx.fillStyle = 'blue';
+    sourceCtx.fillRect(blueRect.x, blueRect.y, blueRect.w, blueRect.h);
+    sourceCtx.fillStyle = 'black';
+    sourceCtx.fillRect(blackRect.x, blackRect.y, blackRect.w, blackRect.h);
+    if (typeof sourceRect.x !== 'undefined')
+        destCtx.drawImage(sourceCanvas, sourceRect.x, sourceRect.y, sourceRect.w, sourceRect.h,
+                          destRect.x, destRect.y, destRect.w, destRect.h);
+    else if (typeof destRect.w !== 'undefined')
+        destCtx.drawImage(sourceCanvas, destRect.x, destRect.y, destRect.w, destRect.h);
+    else
+        destCtx.drawImage(sourceCanvas, destRect.x, destRect.y);
+    var pixelTests = PreparePixelTests(blueCheck, blackCheck, redCheck, testDescription);
+    generate_tests(checkPixel, pixelTests);
+}
+
+var testDescription;
+var sourceRect = {}, destRect = {};
+var blueCheck, blackCheck, redCheck;
+
+// 2 arguments, the dest origin is 0,0
+// The source canvas will be copied to the 0,0 position of the destination canvas
+testDescription = 'Test scenario 1: dx = 0, dy = 0 --- ';
+destRect = {x: 0, y: 0};
+blueCheck = [[0,0], [0,49], [49,0], [49,49]];
+blackCheck = [[5,5], [5,44], [44,5], [44,44]];
+redCheck = [[50,0], [0,50], [50,50], [99,99]];
+drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription);
+
+// 2 arguments, the dest origin is not 0,0
+// The source canvas will copied to the 25, 25 position of the destination canvas
+testDescription = 'Test scenario 2: dx = 25, dy = 25 --- ';
+destRect = {x: 25, y: 25};
+blueCheck = [[25,25], [25,74], [74,25], [74,74]];
+blackCheck = [[30,30], [30,69], [69,30], [69,69]];
+redCheck = [[24,24], [24,75], [75,24], [75,75]];
+drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription);
+
+// 4 arguments, the source origin is not 0,0, the dest size is provided
+// The source canvas will copied to the 50, 50 position of the destination canvas and
+// on an area of 50x50 pixels
+testDescription = 'Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- ';
+destRect = {x: 50, y: 50, w: 50, h: 50};
+blueCheck = [[50,50], [50,99], [99,50], [99,99]];
+blackCheck = [[55,55], [55,94], [94,55], [94,94]];
+redCheck = [[0,0], [49,49], [49,99], [99,49]];
+drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription);
+
+// 4 arguments, the dest origin is not 0,0 and the dest size is provided but
+// does not match the size of the source. The image will be distorted
+// The source canvas will copied to the 50,50 position of the destination canvas
+// and it will be shrunk to a and area of 20x20
+testDescription = 'Test scenario 4: dx = 50, dy = 50, dw = 20, dh = 20 --- ';
+destRect = {x: 50, y: 50, w: 20, h: 20};
+blueCheck = [[50,50], [50,69], [69,50], [69,69]];
+blackCheck = [[52,52], [52,67], [67,52], [67,67]];
+redCheck = [[49,49], [49,70], [70,49], [70,70]];
+drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription);
+
+// The source canvas will copied to the 50,50 position of the destination canvas
+// over an area of 50x25 pixels
+// The copied image will be distorted along the x axis
+testDescription = 'Test scenario 5: dx = 50, dy = 50, dw = 50, dh = 20 --- ';
+destRect = {x: 50, y: 50, w: 50, h: 20};
+blueCheck = [[50,50], [50,69], [99,50], [99,69]];
+blackCheck = [[55,52], [55,67], [94,52], [94,67]];
+redCheck = [[49,49], [49, 69], [99,49], [99,70]];
+drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription);
+
+// 8 arguments, both destination and source origins are 0, 0
+// An area of 25x25 pixels of the source image will be copied to
+// an area of 25x25 pixels of the destination canvas
+// destCtx.drawImage(sourceCanvas, 0, 0, 25, 25, 0, 0, 25, 25);
+testDescription = 'Test scenario 6: sx = 0, sy = 0, sw = 25, sh = 25, dx = 0, dy = 0, dw = 25, dh = 25 --- ';
+sourceRect = {x: 0, y: 0, w: 25, h: 25};
+destRect = {x: 0, y: 0, w: 25, h: 25};
+blueCheck = [[0,0], [4,4], [0,24], [24,0]];
+blackCheck = [[5,5], [5,24], [24,5], [24,24]];
+redCheck = [[25,25], [25, 99], [99,25], [99,99]];
+drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription);
+
+// 8 arguments the destination origin is not 0,0
+// An area of 25x25 pixels of the source image will be copied to
+// an area of 25x25 pixels of the destination canvas in the position 25,25
+testDescription = 'Test scenario 7: sx = 0, sy = 0, sw = 25, sh = 25, dx = 25, dy = 25, dw = 25, dh = 25 --- ';
+sourceRect = {x: 0, y: 0, w: 25, h: 25};
+destRect = {x: 25, y: 25, w: 25, h: 25};
+blueCheck = [[25,25], [25,49], [49,25], [29,29]];
+blackCheck = [[30,30], [30,49], [49,30], [49,49]];
+redCheck = [[24,24], [24, 50], [50,24], [50,50]];
+drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription);
+
+// The source rectangle overflows the source image
+// The source area is clipped to fit the source image
+// and the destination are is clipped in the same proportion
+testDescription = 'Test scenario 8: sx = 25, sy = 25, sw = 50, sh = 50, dx = 0, dy = 0, dw = 50, dh = 50 --- ';
+sourceRect = {x: 25, y: 25, w: 50, h: 50};
+destRect = {x: 0, y: 0, w: 50, h: 50};
+blueCheck = [[0,20], [20,0], [20,20], [24,24]];
+blackCheck = [[0,0], [0,19], [19,0], [19,19]];
+redCheck = [[0,25], [25, 0], [25,25], [99,99]];
+drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription);
+
+// The destination rectangle has negative width and height. When the source
+// rectangle is outside the source image, the source rectangle must be clipped
+// to the source image and the destination rectangle must be clipped in the same
+// proportion.
+testDescription = 'Test scenario 9: sx = 0, sy = 0, sw = 50, sh = 50, dx = 100, dy = 100, dw = -50, dh = -50 --- ';
+sourceRect = {x: 0, y: 0, w: 50, h: 50};
+destRect = {x: 100, y: 100, w: -50, h: -50};
+blueCheck = [[50,50], [50,99], [99,50], [99,99]];
+blackCheck = [[55,55], [55,94], [94,55], [94,94]];
+redCheck = [[0,0], [49,49], [0,99], [99,0]];
+drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription);
+
+// The destination rectangle is larger than the destination canvas
+// When the destination rectangle is outside the destination image (the scratch bitmap),
+// the pixels that land outside the scratch bitmap are discarded,
+// as if the destination was an infinite canvas whose rendering was
+// clipped to the dimensions of the scratch bitmap.
+testDescription = 'Test scenario 10: sx = 0, sy = 0, sw = 50, sh = 50, dx = 0, dy = 0, dw = 200, dh = 200 --- ';
+sourceRect = {x: 0, y: 0, w: 50, h: 50};
+destRect = {x: 0, y: 0, w: 200, h: 200};
+blueCheck = [[0,0], [0,99], [99,0], [19,19]];
+blackCheck = [[20,20], [20,99], [99,20], [99,99]];
+redCheck = [];
+drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription);
+
+// The source rectangle is larger than the source canvas
+// The source area is clipped to fit the source image
+// and the destination are is clipped in the same proportion
+testDescription = 'Test scenario 11: sx = 0, sy = 0, sw = 100, sh = 100, dx = 0, dy = 0, dw = 50, dh = 50 --- ';
+sourceRect = {x: 0, y: 0, w: 100, h: 100};
+destRect = {x: 0, y: 0, w: 50, h: 50};
+blueCheck = [[0,0], [1,1], [23,23], [24,24]];
+blackCheck = [[3,3], [3,21], [21,3], [21,21]];
+redCheck = [[0,25], [25, 0], [25,25], [99,99]];
+drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription);
+
+// Negative coordinates of the source rectangle.
+// The source area is clipped to fit the source image and the destination area
+// is clipped in the same proportion. In this specific test:
+// - source is clipped by 20 from top and left.
+// - destination will get proportionally clipped by 50 from top and left as we
+// are scaling the source image 2.5 times.
+// - the rect will be drawn from 70,70 to 100,100.
+testDescription = 'Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- ';
+sourceRect = {x: -20, y: -20, w: 50, h: 50};
+destRect = {x: 20, y: 20, w: 125, h: 125};
+blueCheck = [[70,70], [70,99], [99,70], [82,82]];
+blackCheck = [[84,84], [84,99], [99,84], [99,99]];
+redCheck = [[0,69], [69, 0], [69,69]];
+drawCanvasOnCanvasUsingDrawImage(sourceRect, destRect, blueCheck, blackCheck, redCheck, testDescription);
+
+</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_1.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_1.html
deleted file mode 100644
index 871e279..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_1.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_canvas_1_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceCanvas = document.createElement('canvas');
-sourceCanvas.width = sourceWidth;
-sourceCanvas.height = sourceHeight;
-
-var sourceCtx = sourceCanvas.getContext('2d');
-sourceCtx.fillStyle = "#00FFFF";
-sourceCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-sourceCtx.fillStyle = "#000000";
-sourceCtx.fillRect(5,5,40,40);
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-// 2 arguments, the dest origin is 0,0
-// The source canvas will copied to the 0,0 position of the destination canvas
-destCtx.drawImage(sourceCanvas, 0, 0);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_10.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_10.html
deleted file mode 100644
index 14e15ffc..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_10.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_canvas_10_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceCanvas = document.createElement('canvas');
-sourceCanvas.width = sourceWidth;
-sourceCanvas.height = sourceHeight;
-
-var sourceCtx = sourceCanvas.getContext('2d');
-sourceCtx.fillStyle = "#00FFFF";
-sourceCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-sourceCtx.fillStyle = "#000000";
-sourceCtx.fillRect(5,5,40,40);
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// The destination rectangle is larger than the destination canvas
-// When the destination rectangle is outside the destination image (the scratch bitmap),
-// the pixels that land outside the scratch bitmap are discarded,
-// as if the destination was an infinite canvas whose rendering was
-// clipped to the dimensions of the scratch bitmap.
-destCtx.drawImage(sourceCanvas, 0, 0, 50, 50, 0, 0, 200, 200);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_10_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_10_ref.html
deleted file mode 100644
index cd05233b..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_10_ref.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script type="text/javascript">
-
-var destCanvas = document.getElementById('dest');
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.fillStyle = "#00FFFF";
-destCtx.fillRect(0, 0, 100, 100);
-destCtx.fillStyle = "#000000";
-destCtx.fillRect(20, 20, 80, 80);
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_11.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_11.html
deleted file mode 100644
index e06dfc0..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_11.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_canvas_11_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceCanvas = document.createElement('canvas');
-sourceCanvas.width = sourceWidth;
-sourceCanvas.height = sourceHeight;
-
-var sourceCtx = sourceCanvas.getContext('2d');
-sourceCtx.fillStyle = "#00FFFF";
-sourceCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-sourceCtx.fillStyle = "#000000";
-sourceCtx.fillRect(5,5,40,40);
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// The source rectangle is larger than the source canvas
-// The source area is clipped to fit the source image
-// and the destination are is clipped in the same proportion
-destCtx.drawImage(sourceCanvas, 0, 0, 100, 100, 0, 0, 50, 50);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_11_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_11_ref.html
deleted file mode 100644
index 970f626..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_11_ref.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script type="text/javascript">
-
-var destCanvas = document.getElementById('dest');
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.fillStyle = "#00FFFF";
-destCtx.fillRect(0, 0, 25, 25);
-destCtx.fillStyle = "#000000";
-destCtx.fillRect(2, 2, 20, 20);
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_12.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_12.html
deleted file mode 100644
index 47debc7..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_12.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_canvas_12_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceCanvas = document.createElement('canvas');
-sourceCanvas.width = sourceWidth;
-sourceCanvas.height = sourceHeight;
-
-var sourceCtx = sourceCanvas.getContext('2d');
-sourceCtx.fillStyle = "#00FFFF";
-sourceCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-sourceCtx.fillStyle = "#000000";
-sourceCtx.fillRect(5,5,40,40);
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// Negative coordinates of the source rectangle
-// The source area is clipped to fit the source image
-// and the destination area is clipped in the same proportion
-destCtx.drawImage(sourceCanvas, -25, -25, 50, 50, 0, 0, 50, 50);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_12_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_12_ref.html
deleted file mode 100644
index 190f74f..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_12_ref.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script type="text/javascript">
-
-var destCanvas = document.getElementById('dest');
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.fillStyle = "#00FFFF";
-destCtx.fillRect(0, 0, 25, 25);
-destCtx.fillStyle = "#000000";
-destCtx.fillRect(5, 5, 20, 20);
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_1_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_1_ref.html
deleted file mode 100644
index d0bac45..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_1_ref.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-  canvas {
-    display: block;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script type="text/javascript">
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var destCanvas = document.getElementById('dest');
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.fillStyle = "#00FFFF";
-destCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-destCtx.fillStyle = "#000000";
-destCtx.fillRect(5, 5, 40, 40);
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_2.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_2.html
deleted file mode 100644
index b169d374..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_2.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_canvas_2_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceCanvas = document.createElement('canvas');
-sourceCanvas.width = sourceWidth;
-sourceCanvas.height = sourceHeight;
-
-var sourceCtx = sourceCanvas.getContext('2d');
-sourceCtx.fillStyle = "#00FFFF";
-sourceCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-sourceCtx.fillStyle = "#000000";
-sourceCtx.fillRect(5,5,40,40);
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// 2 arguments, the dest origin is not 0,0
-// The source canvas will copied to the 25, 25 position of the destination canvas
-destCtx.drawImage(sourceCanvas, 25, 25);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_2_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_2_ref.html
deleted file mode 100644
index 72ec289..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_2_ref.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-  canvas {
-    display: block;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script type="text/javascript">
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var destCanvas = document.getElementById('dest');
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.fillStyle = "#00FFFF";
-destCtx.fillRect(25, 25, sourceWidth, sourceHeight);
-destCtx.fillStyle = "#000000";
-destCtx.fillRect(30, 30, 40, 40);
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_3.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_3.html
deleted file mode 100644
index e59e5d3..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_3.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_canvas_3_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceCanvas = document.createElement('canvas');
-sourceCanvas.width = sourceWidth;
-sourceCanvas.height = sourceHeight;
-
-var sourceCtx = sourceCanvas.getContext('2d');
-sourceCtx.fillStyle = "#00FFFF";
-sourceCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-sourceCtx.fillStyle = "#000000";
-sourceCtx.fillRect(5,5,40,40);
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// 4 arguments, the source origin is not 0,0, the dest size is provided
-// The source canvas will copied to the 50, 50 position of the destination canvas and
-// on an area of 50x50 pixels
-destCtx.drawImage(sourceCanvas, 50, 50, 50, 50);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_3_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_3_ref.html
deleted file mode 100644
index 3e153f1..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_3_ref.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-  canvas {
-    display: block;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script type="text/javascript">
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var destCanvas = document.getElementById('dest');
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.fillStyle = "#00FFFF";
-destCtx.fillRect(50, 50, sourceWidth, sourceHeight);
-destCtx.fillStyle = "#000000";
-destCtx.fillRect(55, 55, 40, 40);
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_4.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_4.html
deleted file mode 100644
index f3dd84e..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_4.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_canvas_4_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceCanvas = document.createElement('canvas');
-sourceCanvas.width = sourceWidth;
-sourceCanvas.height = sourceHeight;
-
-var sourceCtx = sourceCanvas.getContext('2d');
-sourceCtx.fillStyle = "#00FFFF";
-sourceCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-sourceCtx.fillStyle = "#000000";
-sourceCtx.fillRect(5,5,40,40);
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// 4 arguments, the dest origin is not 0,0 and the dest size is provided but
-// does not match the size of the source. The image will be distorted
-// The source canvas will copied to the 50,50 position of the destination canvas
-// and it will be shrunk to a and area of 20x20
-destCtx.drawImage(sourceCanvas, 50, 50, 20, 20);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_4_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_4_ref.html
deleted file mode 100644
index 9a8cc99..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_4_ref.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script type="text/javascript">
-
-var destCanvas = document.getElementById('dest');
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.fillStyle = "#00FFFF";
-destCtx.fillRect(50, 50, 20, 20);
-destCtx.fillStyle = "#000000";
-destCtx.fillRect(52, 52, 16, 16);
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_5.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_5.html
deleted file mode 100644
index 2190847..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_5.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_canvas_5_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceCanvas = document.createElement('canvas');
-sourceCanvas.width = sourceWidth;
-sourceCanvas.height = sourceHeight;
-
-var sourceCtx = sourceCanvas.getContext('2d');
-sourceCtx.fillStyle = "#00FFFF";
-sourceCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-sourceCtx.fillStyle = "#000000";
-sourceCtx.fillRect(5,5,40,40);
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// The source canvas will copied to the 50,50 position of the destination canvas
-// over an area of 50x25 pixels
-// The copied image will be distorted along the x axis
-destCtx.drawImage(sourceCanvas, 50, 50, 50, 20);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_5_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_5_ref.html
deleted file mode 100644
index 47dd63e..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_5_ref.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script type="text/javascript">
-
-var destCanvas = document.getElementById('dest');
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.fillStyle = "#00FFFF";
-destCtx.fillRect(50, 50, 50, 20);
-destCtx.fillStyle = "#000000";
-destCtx.fillRect(55, 52, 40, 16);
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_6.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_6.html
deleted file mode 100644
index 2ce48d8..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_6.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_canvas_6_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceCanvas = document.createElement('canvas');
-sourceCanvas.width = sourceWidth;
-sourceCanvas.height = sourceHeight;
-
-var sourceCtx = sourceCanvas.getContext('2d');
-sourceCtx.fillStyle = "#00FFFF";
-sourceCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-sourceCtx.fillStyle = "#000000";
-sourceCtx.fillRect(5,5,40,40);
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// 8 arguments, both destination and source origins are 0, 0
-// An area of 25x25 pixels of the source image will be copied to
-// an area of 25x25 pixels of the destination canvas
-destCtx.drawImage(sourceCanvas, 0, 0, 25, 25, 0, 0, 25, 25);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_6_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_6_ref.html
deleted file mode 100644
index 190f74f..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_6_ref.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script type="text/javascript">
-
-var destCanvas = document.getElementById('dest');
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.fillStyle = "#00FFFF";
-destCtx.fillRect(0, 0, 25, 25);
-destCtx.fillStyle = "#000000";
-destCtx.fillRect(5, 5, 20, 20);
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_7.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_7.html
deleted file mode 100644
index 1952909..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_7.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_canvas_7_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceCanvas = document.createElement('canvas');
-sourceCanvas.width = sourceWidth;
-sourceCanvas.height = sourceHeight;
-
-var sourceCtx = sourceCanvas.getContext('2d');
-sourceCtx.fillStyle = "#00FFFF";
-sourceCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-sourceCtx.fillStyle = "#000000";
-sourceCtx.fillRect(5,5,40,40);
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// 8 arguments the destination origin is not 0,0
-// An area of 25x25 pixels of the source image will be copied to
-// an area of 25x25 pixels of the destination canvas in the position 25,25
-destCtx.drawImage(sourceCanvas, 0, 0, 25, 25, 25, 25, 25, 25);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_7_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_7_ref.html
deleted file mode 100644
index 51b2b27..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_7_ref.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script type="text/javascript">
-
-var destCanvas = document.getElementById('dest');
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.fillStyle = "#00FFFF";
-destCtx.fillRect(25, 25, 25, 25);
-destCtx.fillStyle = "#000000";
-destCtx.fillRect(30, 30, 20, 20);
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_8.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_8.html
deleted file mode 100644
index c47a5b5..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_8.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_canvas_8_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceCanvas = document.createElement('canvas');
-sourceCanvas.width = sourceWidth;
-sourceCanvas.height = sourceHeight;
-
-var sourceCtx = sourceCanvas.getContext('2d');
-sourceCtx.fillStyle = "#00FFFF";
-sourceCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-sourceCtx.fillStyle = "#000000";
-sourceCtx.fillRect(5,5,40,40);
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// The source rectangle overflows the source image
-// The source area is clipped to fit the source image
-// and the destination are is clipped in the same proportion
-destCtx.drawImage(sourceCanvas, 25, 25, 50, 50, 0, 0, 50, 50);
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_8_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_8_ref.html
deleted file mode 100644
index 652bf6e..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_8_ref.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script type="text/javascript">
-
-var destCanvas = document.getElementById('dest');
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.fillStyle = "#00FFFF";
-destCtx.fillRect(0, 0, 25, 25);
-destCtx.fillStyle = "#000000";
-destCtx.fillRect(0, 0, 20, 20);
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_9.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_9.html
deleted file mode 100644
index 8b48e64..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_9.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_canvas_9_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 50;
-var sourceHeight = 50;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceCanvas = document.createElement('canvas');
-sourceCanvas.width = sourceWidth;
-sourceCanvas.height = sourceHeight;
-
-var sourceCtx = sourceCanvas.getContext('2d');
-sourceCtx.fillStyle = "#00FFFF";
-sourceCtx.fillRect(0, 0, sourceWidth, sourceHeight);
-sourceCtx.fillStyle = "#000000";
-sourceCtx.fillRect(5,5,40,40);
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// The destination rectangle has negative width and height
-// An exception is raised and nothing is drawn
-try {
-    destCtx.drawImage(sourceCanvas, 25, 50, 50, 0, 0, -100, -100);
-    // It makes the test fail if the exception is not thrown
-    destCtx.fillStyle = "#0000FF";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-}
-catch(err) {
-}
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_9_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_9_ref.html
deleted file mode 100644
index b9be7e5..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_9_ref.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<body>
-<canvas id="dest" height="100" width="100"></canvas>
-<script type="text/javascript">
-
-var destCanvas = document.getElementById('dest');
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image.html
new file mode 100644
index 0000000..a94cfdcd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image.html
@@ -0,0 +1,268 @@
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<canvas id="dest" height="100" width="100"></canvas>
+
+<script>
+var sourceWidth = sourceHeight = 100;
+var destCanvasWidth = destCanvasHeight = 100;
+var redPixel = [255, 0, 0, 255];
+var lightPixel = [253, 140, 245, 255];
+var grayPixel = [41, 122, 115, 255];
+var transparentBlackPixel = [0, 0, 0, 0];
+
+var destCanvas = document.getElementById('dest');
+var sourceImg = document.createElement('img');
+sourceImg.src = '../2x2.png';
+sourceImg.width = sourceWidth;
+sourceImg.height = sourceHeight;
+var destCtx = destCanvas.getContext('2d');
+destCtx.imageSmoothingEnabled = false;
+
+function checkPixel(location, expected) {
+    var actual = destCtx.getImageData(location[0], location[1], 1, 1).data;
+    assert_array_equals(actual, expected);
+}
+
+function PreparePixelTests(lightPixelCheck, grayPixelCheck, redCheck, testDescription) {
+    var pixelTests = [];
+    for (var i = 0; i < lightPixelCheck.length; i++) {
+        var message = testDescription + 'Pixel ' + lightPixelCheck[i][0] + ',' + lightPixelCheck[i][1] + ' should be light purple.';
+        pixelTests.push([message, lightPixelCheck[i], lightPixel]);
+    }
+    for (var i = 0; i < grayPixelCheck.length; i++) {
+        var message = testDescription + 'Pixel ' + grayPixelCheck[i][0] + ',' + grayPixelCheck[i][1] + ' should be gray.';
+        pixelTests.push([message, grayPixelCheck[i], grayPixel]);
+    }
+    for (var i = 0; i < redCheck.length; i++) {
+        var message = testDescription + 'Pixel ' + redCheck[i][0] + ',' + redCheck[i][1] + ' should be red.';
+        pixelTests.push([message, redCheck[i], redPixel]);
+    }
+    pixelTests.push([testDescription + 'Pixel outside canvas should be transparent black.\n', [100, 100], transparentBlackPixel]);
+    return pixelTests;
+}
+
+function drawCustomImageOnCanvas(sourceImage, sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription) {
+    destCtx.fillStyle = 'red';
+    destCtx.fillRect(0, 0,  destCanvasWidth, destCanvasHeight);
+    if (typeof sourceRect.x !== 'undefined')
+        destCtx.drawImage(sourceImage, sourceRect.x, sourceRect.y, sourceRect.w, sourceRect.h,
+                          destRect.x, destRect.y, destRect.w, destRect.h);
+    else if (typeof destRect.w !== 'undefined')
+        destCtx.drawImage(sourceImage, destRect.x, destRect.y, destRect.w, destRect.h);
+    else
+        destCtx.drawImage(sourceImage, destRect.x, destRect.y);
+    var pixelTests = PreparePixelTests(lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+    generate_tests(checkPixel, pixelTests);
+}
+
+function drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription) {
+    drawCustomImageOnCanvas(sourceImg, sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+var testDescription;
+var sourceRect = {}, destRect = {};
+var lightPixelCheck, grayPixelCheck, redCheck;
+
+// 2 arguments, the dest origin is 0,0
+// The source image will copied to the 0,0 position of the destination canvas
+function runDrawImageTest_dX0_dY0() {
+    testDescription = 'Test scenario 1: dx = 0, dy = 0 --- ';
+    destRect = {x: 0, y: 0};
+    lightPixelCheck = [[0,0], [0,99], [99,0], [99,99]];
+    grayPixelCheck = [];
+    redCheck = [];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// 2 arguments, the dest origin is not 0,0
+// The source canvas will copied to the 25,25 position of the destination canvas
+function runDrawImageTest_dX25_dY25() {
+    testDescription = 'Test scenario 2: dx = 25, dy = 25 --- ';
+    destRect = {x: 25, y: 25};
+    lightPixelCheck = [[25,25], [25,99], [99,25], [99,99]];
+    grayPixelCheck = [];
+    redCheck = [[0,0], [24,24], [0,25], [25,0], [0,99], [99,0]];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// 4 arguments, the source origin is not 0,0, the dest size is provided
+// The source canvas will copied to the 50, 50 position of the destination canvas and
+// on an area of 50x50 pixels
+function runDrawImageTest_dX50_dY50_dW50_dH50() {
+    testDescription = 'Test scenario 3: dx = 50, dy = 50, dw = 50, dh = 50 --- ';
+    destRect = {x: 50, y: 50, w: 50, h: 50};
+    lightPixelCheck = [[50,50], [99,99]];
+    grayPixelCheck = [[50,99], [99,50]];
+    redCheck = [[0,0], [49,49], [0,50], [50,0], [0,99], [99,0]];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// 4 arguments, the dest origin is not 0,0 and the dest size is provided but
+// does not match the size of the source. The image will be distorted
+// The source canvas will copied to the 50,50 position of the destination canvas
+// and it will be shrunk to a and area of 16x16
+function runDrawImageTest_dX50_dY50_dW16_dH16() {
+    testDescription = 'Test scenario 4: dx = 50, dy = 50, dw = 16, dh = 16 --- ';
+    destRect = {x: 50, y: 50, w: 16, h: 16};
+    lightPixelCheck = [[50,50], [65,65]];
+    grayPixelCheck = [[50,65], [65,50]];
+    redCheck = [[0,0], [49,49], [49,66], [66,49], [66,66], [99,99]];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// The source canvas will copied to the 50,50 position of the destination canvas
+// over an area of 64x32 pixels
+// The copied image will be distorted along the x axis
+function runDrawImageTest_dX50_dY50_dW64_dH32() {
+    testDescription = 'Test scenario 5: dx = 50, dy = 50, dw = 64, dh = 32 --- ';
+    destRect = {x: 50, y: 50, w: 64, h: 32};
+    lightPixelCheck = [[50,50], [99,81]];
+    grayPixelCheck = [[50,81], [99,50]];
+    redCheck = [[0,0], [49,49], [49,82], [99,49], [99,82], [99,99]];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// 8 arguments, both destination and source origins are 0, 0
+// An area of 32x32 pixels of the source image will be copied to
+// an area of 32x32 pixels of the destination canvas
+function runDrawImageTest_sX0_sY0_sW32_sH32_dX0_dY0_dW32_dH32() {
+    testDescription = 'Test scenario 6: sx = 0, sy = 0, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- ';
+    sourceRect = {x: 0, y: 0, w: 32, h: 32};
+    destRect = {x: 0, y: 0, w: 32, h: 32};
+    lightPixelCheck = [[0,0], [0,31], [31,0], [31,31]];
+    grayPixelCheck = [];
+    redCheck = [[0,32], [32,0], [32,32], [99,99]];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// 8 arguments the destination origin is not 0,0
+// An area of 32x32 pixels of the source image will be copied to
+// an area of 32x32 pixels of the destination canvas in the position 32,32
+function runDrawImageTest_sX0_sY0_sW32_sH32_dX32_dY32_dW32_dH32() {
+    testDescription = 'Test scenario 7: sx = 0, sy = 0, sw = 32, sh = 32, dx = 32, dy = 32, dw = 32, dh = 32 --- ';
+    sourceRect = {x: 0, y: 0, w: 32, h: 32};
+    destRect = {x: 32, y: 32, w: 32, h: 32};
+    lightPixelCheck = [[32,32], [32,63], [63,32], [63,63]];
+    grayPixelCheck = [];
+    redCheck = [[0,0], [31,31], [31,64], [64,31], [64,64], [99,99]];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// The source rectangle overflows the source image
+// The source area is clipped to fit the source image
+// and the destination are is clipped in the same proportion
+function runDrawImageTest_sX32_sY32_sW32_sH32_dX0_dY0_dW32_dH32() {
+    testDescription = 'Test scenario 8: sx = 32, sy = 32, sw = 32, sh = 32, dx = 0, dy = 0, dw = 32, dh = 32 --- ';
+    sourceRect = {x: 32, y: 32, w: 32, h: 32};
+    destRect = {x: 0, y: 0, w: 32, h: 32};
+    lightPixelCheck = [[0,0], [0,31], [31,0], [31,31]];
+    grayPixelCheck = [];
+    redCheck = [[0,32], [32,0], [32,32], [99,99]];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// The destination rectangle has negative width and height. When the source
+// rectangle is outside the source image, the source rectangle must be clipped
+// to the source image and the destination rectangle must be clipped in the same
+// proportion.
+function runDrawImageTest_sX0_sY0_sW32_sH32_dX32_dY32_dWm32_dHm32() {
+    testDescription = 'Test scenario 9: sx = 32, sy = 32, sw = 32, sh = 32, dx = 32, dy = 32, dw = -32, dh = -32 --- ';
+    sourceRect = {x: 32, y: 32, w: 32, h: 32};
+    destRect = {x: 0, y: 0, w: 32, h: 32};
+    lightPixelCheck = [[0,0], [0,31], [31,0], [31,31]];
+    grayPixelCheck = [];
+    redCheck = [[0,32], [32,0], [32,32], [99,99]];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// The destination rectangle is larger than the destination canvas.
+// When the destination rectangle is outside the destination image (the scratch bitmap),
+// the pixels that land outside the scratch bitmap are discarded,
+// as if the destination was an infinite canvas
+// whose rendering was clipped to the dimensions of the scratch bitmap.
+function runDrawImageTest_sX0_sY0_sW512_sH512_dX0_dY0_dW256_dH256() {
+    testDescription = 'Test scenario 10: sx = 0, sy = 0, sw = 512, sh = 512, dx = 0, dy = 0, dw = 256, dh = 256 --- ';
+    sourceRect = {x: 0, y: 0, w: 512, h: 512};
+    destRect = {x: 0, y: 0, w: 256, h: 256};
+    lightPixelCheck = [[0,0], [0,99], [99,0], [99,99]];
+    grayPixelCheck = [];
+    redCheck = [];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// The source rectangle is larger than the source canvas
+// The source area is clipped to fit the source image
+// and the destination area is clipped in the same proportion
+function runDrawImageTest_sX0_sY0_sW2048_sH2048_dX0_dY0_dW800_dH800() {
+    testDescription = 'Test scenario 11: sx = 0, sy = 0, sw = 2048, sh = 2048, dx = 0, dy = 0, dw = 800, dh = 800 --- ';
+    sourceRect = {x: 0, y: 0, w: 2048, h: 2048};
+    destRect = {x: 0, y: 0, w: 800, h: 800};
+    lightPixelCheck = [[0,0], [0,99], [99,0], [99,99]];
+    grayPixelCheck = [];
+    redCheck = [];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// Negative coordinates of the source rectangle
+// The source area is clipped to fit the source image
+// and the destination area is clipped in the same proportion
+function runDrawImageTest_sXm20_sYm20_sW50_sH50_dX20_dY20_dW125_dH125() {
+    testDescription = 'Test scenario 12: sx = -20, sy = -20, sw = 50, sh = 50, dx = 20, dy = 20, dw = 125, dh = 125 --- ';
+    sourceRect = {x: -20, y: -20, w: 50, h: 50};
+    destRect = {x: 20, y: 20, w: 125, h: 125};
+    lightPixelCheck = [[70,70], [70,99], [99,70], [99,99]];
+    grayPixelCheck = [];
+    redCheck = [[0,0], [0,99], [99,0], [69,69], [69, 99], [99,69]];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// The source Image doesn't have a src url defined.
+// No exception is thrown and nothing is drawn.
+function runDrawImageTestImageWithuotSource() {
+    testDescription = 'Test scenario 13: draw an image element that does not have a source --- ';
+    var sourceImage = document.createElement('img');
+    sourceRect = {x: 0, y: 0, w: 50, h: 50};
+    destRect = {x: 0, y: 0, w: 100, h: 100};
+    lightPixelCheck = [];
+    grayPixelCheck = [];
+    redCheck = [[0,0], [0,99], [99,0], [99,69]];
+    drawCustomImageOnCanvas(sourceImage, sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+// Clipping the source and down scaling to the destination
+function runDrawImageTest_sX64_sY64_sW384_sH384_dX0_dY0_dW32_dH64() {
+    testDescription = 'Test scenario 14: sx = 64, sy = 64, sw = 384, sh = 384, dx = 0, dy = 0, dw = 32, dh = 64 --- ';
+    sourceRect = {x: 64, y: 64, w: 384, h: 384};
+    destRect = {x: 0, y: 0, w: 32, h: 64};
+    lightPixelCheck = [[0,0], [15,31], [17,33], [31,63]];
+    grayPixelCheck = [[16,0], [31,31], [0, 33], [15,63]];
+    redCheck = [[0,64], [32,0], [32,64], [99,99]];
+    drawImageOnCanvas(sourceRect, destRect, lightPixelCheck, grayPixelCheck, redCheck, testDescription);
+}
+
+
+function runDrawImageTests() {
+    runDrawImageTest_dX0_dY0();
+    runDrawImageTest_dX25_dY25();
+    runDrawImageTest_dX50_dY50_dW50_dH50();
+    runDrawImageTest_dX50_dY50_dW16_dH16();
+    runDrawImageTest_dX50_dY50_dW64_dH32();
+    runDrawImageTest_sX0_sY0_sW32_sH32_dX0_dY0_dW32_dH32();
+    runDrawImageTest_sX0_sY0_sW32_sH32_dX32_dY32_dW32_dH32();
+    runDrawImageTest_sX32_sY32_sW32_sH32_dX0_dY0_dW32_dH32();
+    runDrawImageTest_sX0_sY0_sW32_sH32_dX32_dY32_dWm32_dHm32();
+    runDrawImageTest_sX0_sY0_sW512_sH512_dX0_dY0_dW256_dH256();
+    runDrawImageTest_sX0_sY0_sW2048_sH2048_dX0_dY0_dW800_dH800();
+    runDrawImageTest_sXm20_sYm20_sW50_sH50_dX20_dY20_dW125_dH125();
+    runDrawImageTestImageWithuotSource();
+    runDrawImageTest_sX64_sY64_sW384_sH384_dX0_dY0_dW32_dH64();
+}
+
+async_test(t => {
+        window.onload = function() {
+            t.step(runDrawImageTests);
+            t.done();
+        }
+}, 'Draw 100x100 image to 100x100 canvas at 0,0.');
+
+</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html
deleted file mode 100644
index b9de85a..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_1_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-  // 2 arguments, the dest origin is 0,0
-  // The source canvas will copied to the 0,0 position of the destination canvas
-  destCtx.drawImage(sourceImg, 0, 0);
-}
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html
deleted file mode 100644
index 3b11b73..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_10_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 128;
-var sourceHeight = 128;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-  // The destination rectangle is larger than the destination canvas.
-  // When the destination rectangle is outside the destination image (the scratch bitmap),
-  // the pixels that land outside the scratch bitmap are discarded,
-  // as if the destination was an infinite canvas
-  // whose rendering was clipped to the dimensions of the scratch bitmap.
-  destCtx.drawImage(sourceImg, 0, 0, 512, 512, 0, 0, 256, 256);
-}
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10_ref.html
deleted file mode 100644
index 60545df1..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10_ref.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-image: url("../2x2.png");
-  }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10_srgb.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10_srgb.html
deleted file mode 100644
index 0b2a2f698..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10_srgb.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<canvas id="dest" height="100" width="100"></canvas>
-
-<script>
-var sourceWidth = 128;
-var sourceHeight = 128;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2-srgb.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-var destCtx = destCanvas.getContext('2d');
-
-function checkPixel(x, y, expected, epsilon) {
-    var actual = destCtx.getImageData(x, y, 1, 1).data;
-    assert_true(actual.length === expected.length);
-    for (var i=0; i < actual.length; i++)
-        assert_approx_equals(actual[i], expected[i], epsilon);
-}
-
-var pixelTests = [
-    ['Pixel Top Left Image', 0, 0, [253, 140, 245, 255], 1],
-    ['Pixel Top Right Image', 0, 99, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Left Image', 99, 0, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Right Image', 99, 99, [253, 140, 245, 255], 1],
-];
-
-function runTest() {
-    destCtx.fillStyle = "#FF0000";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-    destCtx.imageSmoothingEnabled = smoothingEnabled;
-    // The destination rectangle is larger than the destination canvas.
-    // When the destination rectangle is outside the destination image (the scratch bitmap),
-    // the pixels that land outside the scratch bitmap are discarded,
-    // as if the destination was an infinite canvas
-    // whose rendering was clipped to the dimensions of the scratch bitmap.
-    destCtx.drawImage(sourceImg, 0, 0, 512, 512, 0, 0, 256, 256);
-    generate_tests(checkPixel, pixelTests);
-}
-
-async_test(t => {
-        window.onload = function() {
-            t.step(runTest);
-            t.done();
-        }
-}, 'Draw a 100x100 image to a 100x100 canvas with resize and clipping.');
-</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html
deleted file mode 100644
index dd1a614..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_11_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 128;
-var sourceHeight = 128;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-  // The source rectangle is larger than the source canvas
-  // The source area is clipped to fit the source image
-  // and the destination are is clipped in the same proportion
-  destCtx.drawImage(sourceImg, 0, 0, 2048, 2048, 0, 0, 800, 800);
-}
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11_ref.html
deleted file mode 100644
index 10d8885..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11_ref.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: #FA6FF2;
-  }
-</style>
-<body>
-<div id="destination" height="100" width="100"></canvas>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html
deleted file mode 100644
index 402a661f..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_12_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 128;
-var sourceHeight = 128;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-  // Negative coordinates of the source rectangle
-  // The source area is clipped to fit the source image
-  // and the destination area is clipped in the same proportion
-  destCtx.drawImage(sourceImg, -25, -25, 50, 50, 0, 0, 50, 50);
-}
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12_ref.html
deleted file mode 100644
index 5f6f221..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12_ref.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: red;
-  }
-
-  #img {
-    position: relative;
-    top: 0;
-    left: 0;
-    width: 25px;
-    height: 25px;
-    background-color: #FA6FF2;
-  }
-
-</style>
-<body>
-<div id="destination">
-  <div id="img"><div>
-</div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html
deleted file mode 100644
index 1faecc3..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_13_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 128;
-var sourceHeight = 128;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// The source Image doesn't have a src url defined
-// It should throw an exception because the HTMLImageElement is
-// in the broken state
-// https://html.spec.whatwg.org/multipage/scripting.html#check-the-usability-of-the-image-argument
-try {
-    destCtx.drawImage(sourceImg, 0, 0);
-    // It makes the test fail if the exception is not thrown
-    destCtx.fillStyle = "#0000FF";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-}
-catch(err) {
-}
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13_ref.html
deleted file mode 100644
index 9ac306a5..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13_ref.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: red;
-  }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_14.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_14.html
deleted file mode 100644
index 0a28aa4..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_14.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-<html class="reftest-wait">
-<meta charset="utf-8">
-<title>Canvas test: 2d.drawImage.crop.2x4</title>
-<link rel="match" href="drawimage_html_image_14_ref.html">
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 256;
-var sourceHeight = 512;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x4.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-  destCtx.drawImage(sourceImg, 64, 64, 192, 448, 0, 0, 30, 70);
-  document.documentElement.classList.remove('reftest-wait');
-}
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_14_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_14_ref.html
deleted file mode 100644
index f682f87..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_14_ref.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: red;
-    background-image: url("../2x4.png");
-    background-position: -10px -10px;
-    background-size: 40px 80px;
-    background-repeat: no-repeat;
-  }
-
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_15.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_15.html
deleted file mode 100644
index 507ff31e..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_15.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-<html class="reftest-wait">
-<meta charset="utf-8">
-<title>Canvas test: 2d.drawImage.crop.4x2</title>
-<link rel="match" href="drawimage_html_image_15_ref.html">
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 512;
-var sourceHeight = 256;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../4x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-  destCtx.drawImage(sourceImg, 64, 64, 448, 192, 0, 0, 70, 30);
-  document.documentElement.classList.remove('reftest-wait');
-}
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_15_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_15_ref.html
deleted file mode 100644
index a7abc3cb..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_15_ref.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: red;
-    background-image: url("../4x2.png");
-    background-position: -10px -10px;
-    background-size: 80px 40px;
-    background-repeat: no-repeat;
-  }
-
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1_ref.html
deleted file mode 100644
index 60545df1..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1_ref.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-image: url("../2x2.png");
-  }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1_srgb.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1_srgb.html
deleted file mode 100644
index e2e5a63..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1_srgb.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<canvas id="dest" height="100" width="100"></canvas>
-
-<script>
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2-srgb.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-var destCtx = destCanvas.getContext('2d');
-
-function checkPixel(x, y, expected, epsilon) {
-    var actual = destCtx.getImageData(x, y, 1, 1).data;
-    assert_true(actual.length === expected.length);
-    for (var i=0; i < actual.length; i++)
-        assert_approx_equals(actual[i], expected[i], epsilon);
-}
-
-var pixelTests = [
-    ['Pixel Top Left Image', 0, 0, [253, 140, 245, 255], 1],
-    ['Pixel Top Right Image', 0, 99, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Left Image', 99, 0, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Right Image', 99, 99, [253, 140, 245, 255], 1],
-];
-
-function runTest() {
-    destCtx.fillStyle = "#FF0000";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-    destCtx.imageSmoothingEnabled = smoothingEnabled;
-    // 2 arguments, the dest origin is 0,0
-    // The source canvas will copied to the 0,0 position of the destination canvas
-    destCtx.drawImage(sourceImg, 0, 0);
-    generate_tests(checkPixel, pixelTests);
-}
-
-async_test(t => {
-        window.onload = function() {
-            t.step(runTest);
-            t.done();
-        }
-}, 'Draw 100x100 image to 100x100 canvas at 0,0.');
-</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html
deleted file mode 100644
index e20ea97e..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_2_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-  // 2 arguments, the dest origin is not 0,0
-  // The source image will copied to the 25, 25 position of the destination canvas
-  destCtx.drawImage(sourceImg, 25, 25);
-}
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2_ref.html
deleted file mode 100644
index c453528..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2_ref.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: red;
-    background-image: url("../2x2.png");
-    background-position: 25px 25px;
-    background-repeat: no-repeat;
-  }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2_srgb.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2_srgb.html
deleted file mode 100644
index 14c78d1..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2_srgb.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<canvas id="dest" height="100" width="100"></canvas>
-
-<script>
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2-srgb.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-var destCtx = destCanvas.getContext('2d');
-
-function checkPixel(x, y, expected, epsilon) {
-    var actual = destCtx.getImageData(x, y, 1, 1).data;
-    assert_true(actual.length === expected.length);
-    for (var i=0; i < actual.length; i++)
-        assert_approx_equals(actual[i], expected[i], epsilon);
-}
-
-var pixelTests = [
-    ['Pixel Top Left Canvas Background', 0, 0, [255, 0, 0, 255], 1],
-    ['Pixel Middle Middle Canvas Background', 24, 24, [255, 0, 0, 255], 1],
-    ['Pixel Top Middle Canvas Background', 0, 25, [255, 0, 0, 255], 1],
-    ['Pixel Middle Left Canvas Background', 25, 0, [255, 0, 0, 255], 1],
-    ['Pixel Top Right Canvas Background', 0, 99, [255, 0, 0, 255], 1],
-    ['Pixel Bottom Left Canvas Background', 99, 0, [255, 0, 0, 255], 1],
-
-    ['Pixel Top Left Image', 25, 25, [253, 140, 245, 255], 1],
-    ['Pixel Top Right Image', 25, 99, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Left Image', 99, 25, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Right Image', 99, 99, [253, 140, 245, 255], 1],
-];
-
-function runTest() {
-    destCtx.fillStyle = "#FF0000";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-    destCtx.imageSmoothingEnabled = smoothingEnabled;
-    // 2 arguments, the dest origin is not 0,0
-    // The source canvas will copied to the 25,25 position of the destination canvas
-    destCtx.drawImage(sourceImg, 25, 25);
-    generate_tests(checkPixel, pixelTests);
-}
-
-async_test(t => {
-        window.onload = function() {
-            t.step(runTest);
-            t.done();
-        }
-}, 'Draw 100x100 image to 100x100 canvas at 25,25.');
-</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html
deleted file mode 100644
index e09c2ab0..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_3_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = true;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-  // 4 arguments, the source origin is not 0,0, the dest size is provided
-  // The source canvas will copied to the 50, 50 position of the destination canvas and
-  // on an area of 50x50 pixels
-  destCtx.drawImage(sourceImg, 50, 50, 50, 50);
-}
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3_ref.html
deleted file mode 100644
index b72687a..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3_ref.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: red;
-    background-image: url("../2x2.png");
-    background-position: 50px 50px;
-    background-repeat: no-repeat;
-    background-size: 50px 50px;
-  }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3_srgb.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3_srgb.html
deleted file mode 100644
index 0e2c378..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3_srgb.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<canvas id="dest" height="100" width="100"></canvas>
-
-<script>
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2-srgb.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-var destCtx = destCanvas.getContext('2d');
-
-function checkPixel(x, y, expected, epsilon) {
-    var actual = destCtx.getImageData(x, y, 1, 1).data;
-    assert_true(actual.length === expected.length);
-    for (var i=0; i < actual.length; i++)
-        assert_approx_equals(actual[i], expected[i], epsilon);
-}
-
-var pixelTests = [
-    ['Pixel Top Left Canvas Background', 0, 0, [255, 0, 0, 255], 1],
-    ['Pixel Middle Middle Canvas Background', 49, 49, [255, 0, 0, 255], 1],
-    ['Pixel Top Middle Canvas Background', 0, 50, [255, 0, 0, 255], 1],
-    ['Pixel Middle Left Canvas Background', 50, 0, [255, 0, 0, 255], 1],
-    ['Pixel Top Right Canvas Background', 0, 99, [255, 0, 0, 255], 1],
-    ['Pixel Bottom Left Canvas Background', 99, 0, [255, 0, 0, 255], 1],
-
-    ['Pixel Top Left Image', 50, 50, [253, 140, 245, 255], 1],
-    ['Pixel Top Right Image', 50, 99, [41, 122, 115, 255], 1],
-    ['Pixel Bottom Left Image', 99, 50, [41, 122, 115, 255], 1],
-    ['Pixel Bottom Right Image', 99, 99, [253, 140, 245, 255], 1],
-];
-
-function runTest() {
-    destCtx.fillStyle = "#FF0000";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-    destCtx.imageSmoothingEnabled = smoothingEnabled;
-    // 4 arguments, the source origin is not 0,0, the dest size is provided
-    // The source canvas will copied to the 50, 50 position of the destination canvas and
-    // on an area of 50x50 pixels
-    destCtx.drawImage(sourceImg, 50, 50, 50, 50);
-    generate_tests(checkPixel, pixelTests);
-}
-
-async_test(t => {
-        window.onload = function() {
-            t.step(runTest);
-            t.done();
-        }
-}, 'Draw 100x100 image to 100x100 canvas at 50,50 with resize to 50x50.');
-</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html
deleted file mode 100644
index 7f029ab..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_4_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-  // 4 arguments, the dest origin is not 0,0 and the dest size is provided but
-  // does not match the size of the source. The image will be distorted
-  // The source canvas will copied to the 50,50 position of the destination canvas
-  // and it will be shrunk to a and area of 16x16
-  destCtx.drawImage(sourceImg, 50, 50, 16, 16);
-}
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4_ref.html
deleted file mode 100644
index baa6591..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4_ref.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: red;
-  }
-
-  #destination img{
-    position: absolute;
-    top: 50px;
-    left: 50px;
-    width: 16px;
-    height: 16px;
-  }
-</style>
-<body>
-<div id="destination">
-  <img src="../2x2.png" />
-</div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4_srgb.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4_srgb.html
deleted file mode 100644
index 97b671f9..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4_srgb.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<canvas id="dest" height="100" width="100"></canvas>
-
-<script>
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2-srgb.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-var destCtx = destCanvas.getContext('2d');
-
-function checkPixel(x, y, expected, epsilon) {
-    var actual = destCtx.getImageData(x, y, 1, 1).data;
-    assert_true(actual.length === expected.length);
-    for (var i=0; i < actual.length; i++)
-        assert_approx_equals(actual[i], expected[i], epsilon);
-}
-
-var pixelTests = [
-    ['Pixel Top Left Canvas Background', 0, 0, [255, 0, 0, 255], 1],
-    ['Pixel Top Right Canvas Background', 0, 99, [255, 0, 0, 255], 1],
-    ['Pixel Bottom Left Canvas Background', 99, 0, [255, 0, 0, 255], 1],
-    ['Pixel Bottom Right Canvas Background', 99, 99, [255, 0, 0, 255], 1],
-
-    ['Pixel Surrounding Top Left Canvas Background', 49, 49, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Top Right Canvas Background', 49, 66, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Bottom Left Canvas Background', 66, 49, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Bottom Right Canvas Background', 66, 66, [255, 0, 0, 255], 1],
-
-    ['Pixel Top Left Image', 50, 50, [253, 140, 245, 255], 1],
-    ['Pixel Top Right Image', 50, 65, [41, 122, 115, 255], 1],
-    ['Pixel Bottom Left Image', 65, 50, [41, 122, 115, 255], 1],
-    ['Pixel Bottom Right Image', 65, 65, [253, 140, 245, 255], 1],
-];
-
-function runTest() {
-    destCtx.fillStyle = "#FF0000";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-    destCtx.imageSmoothingEnabled = smoothingEnabled;
-    // 4 arguments, the dest origin is not 0,0 and the dest size is provided but
-    // does not match the size of the source. The image will be distorted
-    // The source canvas will copied to the 50,50 position of the destination canvas
-    // and it will be shrunk to a and area of 16x16
-    destCtx.drawImage(sourceImg, 50, 50, 16, 16);
-    generate_tests(checkPixel, pixelTests);
-}
-
-async_test(t => {
-        window.onload = function() {
-            t.step(runTest);
-            t.done();
-        }
-}, 'Draw 100x100 image to 100x100 canvas at 50,50 with resize to 16x16.');
-</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html
deleted file mode 100644
index d221176a..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_5_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-  // The source canvas will copied to the 50,50 position of the destination canvas
-  // over an area of 64x32 pixels
-  // The copied image will be distorted along the x axis
-  destCtx.drawImage(sourceImg, 50, 50, 64, 32);
-}
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5_ref.html
deleted file mode 100644
index 66b7cc19..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5_ref.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: red;
-    overflow: hidden;
-  }
-
-  #destination .img{
-    position: relative;
-    top: 50px;
-    left: 50px;
-    width: 64px;
-    height: 32px;
-    overflow: hidden;
-  }
-
-  #destination .img img{
-    width: 100%;
-    height: 100%;
-  }
-
-</style>
-<body>
-<div id="destination">
-  <div class="img">
-    <img src="../2x2.png" />
-  </div>
-</div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5_srgb.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5_srgb.html
deleted file mode 100644
index 3f3242b..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5_srgb.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<canvas id="dest" height="100" width="100"></canvas>
-
-<script>
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2-srgb.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-var destCtx = destCanvas.getContext('2d');
-
-function checkPixel(x, y, expected, epsilon) {
-    var actual = destCtx.getImageData(x, y, 1, 1).data;
-    assert_true(actual.length === expected.length);
-    for (var i=0; i < actual.length; i++)
-        assert_approx_equals(actual[i], expected[i], epsilon);
-}
-
-var pixelTests = [
-    ['Pixel Top Left Canvas Background', 0, 0, [255, 0, 0, 255], 1],
-    ['Pixel Top Right Canvas Background', 0, 99, [255, 0, 0, 255], 1],
-    ['Pixel Bottom Left Canvas Background', 99, 0, [255, 0, 0, 255], 1],
-    ['Pixel Bottom Right Canvas Background', 99, 99, [255, 0, 0, 255], 1],
-
-    ['Pixel Surrounding Top Left Canvas Background', 49, 49, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Top Right Canvas Background', 49, 82, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Bottom Left Canvas Background', 99, 49, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Bottom Right Canvas Background', 99, 82, [255, 0, 0, 255], 1],
-
-    ['Pixel Top Left Image', 50, 50, [253, 140, 245, 255], 1],
-    ['Pixel Top Right Image', 50, 81, [41, 122, 115, 255], 1],
-    ['Pixel Bottom Left Image', 99, 50, [41, 122, 115, 255], 1],
-    ['Pixel Bottom Right Image', 99, 81, [253, 140, 245, 255], 1],
-];
-
-function runTest() {
-    destCtx.fillStyle = "#FF0000";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-    destCtx.imageSmoothingEnabled = smoothingEnabled;
-    // The source canvas will copied to the 50,50 position of the destination canvas
-    // over an area of 64x32 pixels
-    // The copied image will be distorted along the x axis
-    destCtx.drawImage(sourceImg, 50, 50, 64, 32);
-    generate_tests(checkPixel, pixelTests);
-}
-
-async_test(t => {
-        window.onload = function() {
-            t.step(runTest);
-            t.done();
-        }
-}, 'Draw 100x100 image to 100x100 canvas at 50,50 with resize to 64x32.');
-</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html
deleted file mode 100644
index a32162a4..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_6_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-  // 8 arguments, both destination and source origins are 0, 0
-  // An area of 32x32 pixels of the source image will be copied to
-  // an area of 32x32 pixels of the destination canvas
-  destCtx.drawImage(sourceImg, 0, 0, 32, 32, 0, 0, 32, 32);
-}
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6_ref.html
deleted file mode 100644
index d734337..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6_ref.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: red;
-    background-color: red;
-    background-image: url("../2x2.png");
-    background-position: -32px -32px;
-    background-size: 64px 64px;
-    background-repeat: no-repeat;
-  }
-
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6_srgb.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6_srgb.html
deleted file mode 100644
index 79f9200..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6_srgb.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<canvas id="dest" height="100" width="100"></canvas>
-
-<script>
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2-srgb.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-var destCtx = destCanvas.getContext('2d');
-
-function checkPixel(x, y, expected, epsilon) {
-    var actual = destCtx.getImageData(x, y, 1, 1).data;
-    assert_true(actual.length === expected.length);
-    for (var i=0; i < actual.length; i++)
-        assert_approx_equals(actual[i], expected[i], epsilon);
-}
-
-var pixelTests = [
-    ['Pixel Top Right Canvas Background', 0, 99, [255, 0, 0, 255], 1],
-    ['Pixel Bottom Left Canvas Background', 99, 0, [255, 0, 0, 255], 1],
-    ['Pixel Bottom Right Canvas Background', 99, 99, [255, 0, 0, 255], 1],
-
-    ['Pixel Surrounding Top Left Canvas Background', 0, 32, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Bottom Left Canvas Background', 32, 0, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Orthogonal Canvas Background', 32, 32, [255, 0, 0, 255], 1],
-
-    ['Pixel Top Left Image', 0, 0, [253, 140, 245, 255], 1],
-    ['Pixel Top Right Image', 0, 31, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Left Image', 31, 0, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Right Image', 31, 31, [253, 140, 245, 255], 1],
-];
-
-function runTest() {
-    destCtx.fillStyle = "#FF0000";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-    destCtx.imageSmoothingEnabled = smoothingEnabled;
-    // 8 arguments, both destination and source origins are 0, 0
-    // An area of 32x32 pixels of the source image will be copied to
-    // an area of 32x32 pixels of the destination canvas
-    destCtx.drawImage(sourceImg, 0, 0, 32, 32, 0, 0, 32, 32);
-    generate_tests(checkPixel, pixelTests);
-}
-
-async_test(t => {
-        window.onload = function() {
-            t.step(runTest);
-            t.done();
-        }
-}, 'Draw a 32x32 area of a 100x100 image to a 32x32 area of a 100x100 canvas at 0,0.');
-</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html
deleted file mode 100644
index b902df0..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_7_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-  // 8 arguments the destination origin is not 0,0
-  // An area of 32x32 pixels of the source image will be copied to
-  // an area of 32x32 pixels of the destination canvas in the position 32,32
-  destCtx.drawImage(sourceImg, 0, 0, 32, 32, 32, 32, 32, 32);
-}
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7_ref.html
deleted file mode 100644
index e823ffb..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7_ref.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: red;
-  }
-
-  #img {
-    position: relative;
-    top: 32px;
-    left: 32px;
-    width: 32px;
-    height: 32px;
-    background-image: url("../2x2.png");
-    background-position: -32px -32px;
-    background-size: 64px 64px;
-    background-repeat: no-repeat;
-  }
-
-</style>
-<body>
-<div id="destination">
-  <div id="img"><div>
-</div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7_srgb.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7_srgb.html
deleted file mode 100644
index 2214c20..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7_srgb.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<canvas id="dest" height="100" width="100"></canvas>
-
-<script>
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2-srgb.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-var destCtx = destCanvas.getContext('2d');
-
-function checkPixel(x, y, expected, epsilon) {
-    var actual = destCtx.getImageData(x, y, 1, 1).data;
-    assert_true(actual.length === expected.length);
-    for (var i=0; i < actual.length; i++)
-        assert_approx_equals(actual[i], expected[i], epsilon);
-}
-
-var pixelTests = [
-    ['Pixel Top Left Canvas Background', 0, 0, [255, 0, 0, 255], 1],
-    ['Pixel Top Right Canvas Background', 0, 99, [255, 0, 0, 255], 1],
-    ['Pixel Bottom Left Canvas Background', 99, 0, [255, 0, 0, 255], 1],
-    ['Pixel Bottom Right Canvas Background', 99, 99, [255, 0, 0, 255], 1],
-
-    ['Pixel Surrounding Top Left Canvas Background', 31, 31, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Top Right Canvas Background', 31, 64, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Bottom Left Canvas Background', 64, 31, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Bottom Right Canvas Background', 64, 64, [255, 0, 0, 255], 1],
-
-    ['Pixel Top Left Image', 32, 32, [253, 140, 245, 255], 1],
-    ['Pixel Top Right Image', 32, 63, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Left Image', 63, 32, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Right Image', 63, 63, [253, 140, 245, 255], 1],
-];
-
-function runTest() {
-    destCtx.fillStyle = "#FF0000";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-    destCtx.imageSmoothingEnabled = smoothingEnabled;
-    // 8 arguments the destination origin is not 0,0
-    // An area of 32x32 pixels of the source image will be copied to
-    // an area of 32x32 pixels of the destination canvas in the position 32,32
-    destCtx.drawImage(sourceImg, 0, 0, 32, 32, 32, 32, 32, 32);
-    generate_tests(checkPixel, pixelTests);
-}
-
-async_test(t => {
-        window.onload = function() {
-            t.step(runTest);
-            t.done();
-        }
-}, 'Draw a 32x32 area of a 100x100 image to a 32x32 area of a 100x100 canvas at 32,32.');
-</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html
deleted file mode 100644
index 9b2301e..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_8_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-  // The source rectangle overflows the source image
-  // The source area is clipped to fit the source image
-  // and the destination are is clipped in the same proportion
-  destCtx.drawImage(sourceImg, 32, 32, 32, 32, 0, 0, 32, 32);
-}
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8_ref.html
deleted file mode 100644
index 1a025d2..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8_ref.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: red;
-  }
-
-  #img {
-    position: relative;
-    top: 0px;
-    left: 0px;
-    width: 32px;
-    height: 32px;
-    background-image: url("../2x2.png");
-    background-position: -32px -32px;
-    background-size: 64px 64px;
-    background-repeat: no-repeat;
-  }
-
-</style>
-<body>
-<div id="destination">
-  <div id="img"><div>
-</div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8_srgb.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8_srgb.html
deleted file mode 100644
index 1197c4297..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8_srgb.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<canvas id="dest" height="100" width="100"></canvas>
-
-<script>
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2-srgb.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-var destCtx = destCanvas.getContext('2d');
-
-function checkPixel(x, y, expected, epsilon) {
-    var actual = destCtx.getImageData(x, y, 1, 1).data;
-    assert_true(actual.length === expected.length);
-    for (var i=0; i < actual.length; i++)
-        assert_approx_equals(actual[i], expected[i], epsilon);
-}
-
-var pixelTests = [
-    ['Pixel Top Right Canvas Background', 0, 99, [255, 0, 0, 255], 1],
-    ['Pixel Bottom Left Canvas Background', 99, 0, [255, 0, 0, 255], 1],
-    ['Pixel Bottom Right Canvas Background', 99, 99, [255, 0, 0, 255], 1],
-
-    ['Pixel Surrounding Top Left Canvas Background', 0, 32, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Bottom Left Canvas Background', 32, 0, [255, 0, 0, 255], 1],
-    ['Pixel Surrounding Orthogonal Canvas Background', 32, 32, [255, 0, 0, 255], 1],
-
-    ['Pixel Top Left Image', 0, 0, [253, 140, 245, 255], 1],
-    ['Pixel Top Right Image', 0, 31, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Left Image', 31, 0, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Right Image', 31, 31, [253, 140, 245, 255], 1],
-];
-
-function runTest() {
-    destCtx.fillStyle = "#FF0000";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-    destCtx.imageSmoothingEnabled = smoothingEnabled;
-    // The source rectangle overflows the source image
-    // The source area is clipped to fit the source image
-    // and the destination are is clipped in the same proportion
-    destCtx.drawImage(sourceImg, 32, 32, 32, 32, 0, 0, 32, 32);
-    generate_tests(checkPixel, pixelTests);
-}
-
-async_test(t => {
-        window.onload = function() {
-            t.step(runTest);
-            t.done();
-        }
-}, 'Draw a 32x32 area of a 100x100 image to a 32x32 area of a 100x100 canvas at 32,32 with clipping.');
-</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html
deleted file mode 100644
index 73a872f..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_9_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// The destination rectangle has negative width and height
-// An exception is raised and nothing is drawn
-try {
-    destCtx.drawImage(sourceImg, 25, 50, 50, 0, 0, -100, -100);
-    // It makes the test fail if the exception is not thrown
-    destCtx.fillStyle = "#0000FF";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-}
-catch(err) {
-}
-
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9_ref.html
deleted file mode 100644
index 5341e05c..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9_ref.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-color: red;
-  }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_svg_image_1.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_svg_image_1.html
index 74a00e03..385f1a5 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_svg_image_1.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_svg_image_1.html
@@ -1,14 +1,8 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_svg_image_1_ref.html>
-<style>
-  html, body {
-    margin: 0;
-  }
-</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <canvas id="dest" height="100" width="100"></canvas>
-<script>
 
+<script>
 var sourceWidth = 100;
 var sourceHeight = 100;
 var smoothingEnabled = false;
@@ -17,14 +11,36 @@
 sourceImg.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '../2x2.png');
 sourceImg.width = sourceWidth;
 sourceImg.height = sourceHeight;
+var destCtx = destCanvas.getContext('2d');
 
-sourceImg.onload = function() {
-  var destCtx = destCanvas.getContext('2d');
-  destCtx.fillStyle = "#FF0000";
-  destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-  destCtx.imageSmoothingEnabled = smoothingEnabled;
-  // 2 arguments, the dest origin is 0,0
-  // The source canvas will copied to the 0,0 position of the destination canvas
-  destCtx.drawImage(sourceImg, 0, 0);
+function checkPixel(x, y, expected, epsilon) {
+    var actual = destCtx.getImageData(x, y, 1, 1).data;
+    assert_true(actual.length === expected.length);
+    for (var i=0; i < actual.length; i++)
+        assert_approx_equals(actual[i], expected[i], epsilon);
 }
-</script>
+
+var pixelTests = [
+    ['Pixel Top Left Image', 0, 0, [253, 140, 245, 255], 1],
+    ['Pixel Top Right Image', 0, 99, [253, 140, 245, 255], 1],
+    ['Pixel Bottom Left Image', 99, 0, [253, 140, 245, 255], 1],
+    ['Pixel Bottom Right Image', 99, 99, [253, 140, 245, 255], 1],
+];
+
+function runTest() {
+    destCtx.fillStyle = "#FF0000";
+    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
+    destCtx.imageSmoothingEnabled = smoothingEnabled;
+    // 2 arguments, the dest origin is 0,0
+    // The source canvas will copied to the 0,0 position of the destination canvas
+    destCtx.drawImage(sourceImg, 0, 0);
+    generate_tests(checkPixel, pixelTests);
+}
+
+async_test(t => {
+        window.onload = function() {
+            t.step(runTest);
+            t.done();
+        }
+}, 'Load a 100x100 image to a SVG image and draw it to a 100x100 canvas.');
+</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_svg_image_1_ref.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_svg_image_1_ref.html
deleted file mode 100644
index 60545df1..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_svg_image_1_ref.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-</head>
-<style>
-  html, body {
-    margin: 0;
-  }
-  #destination {
-    width: 100px;
-    height: 100px;
-    background-image: url("../2x2.png");
-  }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_svg_image_1_srgb.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_svg_image_1_srgb.html
deleted file mode 100644
index fbb614d8..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_svg_image_1_srgb.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<canvas id="dest" height="100" width="100"></canvas>
-
-<script>
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElementNS('http://www.w3.org/2000/svg', 'image');
-sourceImg.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '../2x2-srgb.png');
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-var destCtx = destCanvas.getContext('2d');
-
-function checkPixel(x, y, expected, epsilon) {
-    var actual = destCtx.getImageData(x, y, 1, 1).data;
-    assert_true(actual.length === expected.length);
-    for (var i=0; i < actual.length; i++)
-        assert_approx_equals(actual[i], expected[i], epsilon);
-}
-
-var pixelTests = [
-    ['Pixel Top Left Image', 0, 0, [253, 140, 245, 255], 1],
-    ['Pixel Top Right Image', 0, 99, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Left Image', 99, 0, [253, 140, 245, 255], 1],
-    ['Pixel Bottom Right Image', 99, 99, [253, 140, 245, 255], 1],
-];
-
-function runTest() {
-    destCtx.fillStyle = "#FF0000";
-    destCtx.fillRect(0, 0,  destCanvas.width, destCanvas.height);
-    destCtx.imageSmoothingEnabled = smoothingEnabled;
-    // 2 arguments, the dest origin is 0,0
-    // The source canvas will copied to the 0,0 position of the destination canvas
-    destCtx.drawImage(sourceImg, 0, 0);
-    generate_tests(checkPixel, pixelTests);
-}
-
-async_test(t => {
-        window.onload = function() {
-            t.step(runTest);
-            t.done();
-        }
-}, 'Load a 100x100 image to a SVG image and draw it to a 100x100 canvas.');
-</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/abort/general-serviceworker.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/abort/general-serviceworker.https-expected.txt
index b18b8d79..34f2d61 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/abort/general-serviceworker.https-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/abort/general-serviceworker.https-expected.txt
@@ -1,4 +1,51 @@
 This is a testharness.js-based test.
-FAIL General fetch abort tests in a service worker Failed to register a ServiceWorker: The script does not have a MIME type.
+FAIL Aborting rejects with AbortError promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Aborting rejects with AbortError - no-cors promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+PASS TypeError from request constructor takes priority - RequestInit's window is not null
+FAIL TypeError from request constructor takes priority - Input URL is not valid promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL TypeError from request constructor takes priority - Input URL has credentials promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL TypeError from request constructor takes priority - RequestInit's mode is navigate promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL TypeError from request constructor takes priority - RequestInit's referrer is invalid promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL TypeError from request constructor takes priority - RequestInit's method is invalid promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL TypeError from request constructor takes priority - RequestInit's method is forbidden promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL TypeError from request constructor takes priority - RequestInit's mode is no-cors and method is not simple promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+PASS TypeError from request constructor takes priority - RequestInit's cache mode is only-if-cached and mode is not same-origin
+PASS TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode cors
+PASS TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode no-cors
+FAIL TypeError from request constructor takes priority - Bad referrerPolicy init parameter value promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+PASS TypeError from request constructor takes priority - Bad mode init parameter value
+PASS TypeError from request constructor takes priority - Bad credentials init parameter value
+PASS TypeError from request constructor takes priority - Bad cache init parameter value
+PASS TypeError from request constructor takes priority - Bad redirect init parameter value
+FAIL Request objects have a signal property assert_true: Signal member is present & truthy expected true got false
+FAIL Signal on request object promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Signal on request object created from request object promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Signal on request object created from request object, with signal on second request promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Signal on request object created from request object, with signal on second request overriding another promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Signal retained after unrelated properties are overridden by fetch promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Signal removed by setting to null promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Already aborted signal rejects immediately promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Request is still 'used' if signal is aborted before fetching promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL response.arrayBuffer() rejects if already aborted promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL response.blob() rejects if already aborted promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL response.formData() rejects if already aborted promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL response.json() rejects if already aborted promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL response.text() rejects if already aborted promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Already aborted signal does not make request promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Already aborted signal can be used for many fetches promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Signal can be used to abort other fetches, even if another fetch succeeded before aborting promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Underlying connection is closed when aborting after receiving response promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Underlying connection is closed when aborting after receiving response - no-cors promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Fetch aborted & connection closed when aborted after calling response.arrayBuffer() promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Fetch aborted & connection closed when aborted after calling response.blob() promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Fetch aborted & connection closed when aborted after calling response.formData() promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Fetch aborted & connection closed when aborted after calling response.json() promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Fetch aborted & connection closed when aborted after calling response.text() promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Stream errors once aborted. Underlying connection closed. promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Stream errors once aborted, after reading. Underlying connection closed. promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Stream will not error if body is empty. It's closed with an empty queue before it errors. promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Readable stream synchronously cancels with AbortError if aborted before reading promise_test: Unhandled rejection with value: object "ReferenceError: AbortController is not defined"
+FAIL Signal state is cloned AbortController is not defined
+FAIL Clone aborts with original controller AbortController is not defined
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/cors/cors-preflight-star.any-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/cors/cors-preflight-star.any-expected.txt
deleted file mode 100644
index 262978b..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/cors/cors-preflight-star.any-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-This is a testharness.js-based test.
-PASS CORS that succeeds with credentials: false; method: GET (allowed: get); header: X-Test,1 (allowed: x-test)
-PASS CORS that succeeds with credentials: false; method: SUPER (allowed: *); header: X-Test,1 (allowed: x-test)
-FAIL CORS that succeeds with credentials: false; method: OK (allowed: *); header: X-Test,1 (allowed: *) promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch"
-PASS CORS that fails with credentials: true; method: OK (allowed: *); header: X-Test,1 (allowed: *)
-PASS CORS that fails with credentials: true; method: PUT (allowed: *); header:  (allowed: )
-PASS CORS that succeeds with credentials: true; method: PUT (allowed: PUT); header:  (allowed: *)
-PASS CORS that fails with credentials: true; method: PUT (allowed: put); header:  (allowed: *)
-PASS CORS that fails with credentials: true; method: GET (allowed: get); header: X-Test,1 (allowed: *)
-PASS CORS that fails with credentials: true; method: GET (allowed: *); header: X-Test,1 (allowed: *)
-PASS CORS that succeeds with credentials: true; method: * (allowed: *); header: *,1 (allowed: *)
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/cors/cors-preflight-star.any.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/cors/cors-preflight-star.any.worker-expected.txt
deleted file mode 100644
index 262978b..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/cors/cors-preflight-star.any.worker-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-This is a testharness.js-based test.
-PASS CORS that succeeds with credentials: false; method: GET (allowed: get); header: X-Test,1 (allowed: x-test)
-PASS CORS that succeeds with credentials: false; method: SUPER (allowed: *); header: X-Test,1 (allowed: x-test)
-FAIL CORS that succeeds with credentials: false; method: OK (allowed: *); header: X-Test,1 (allowed: *) promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch"
-PASS CORS that fails with credentials: true; method: OK (allowed: *); header: X-Test,1 (allowed: *)
-PASS CORS that fails with credentials: true; method: PUT (allowed: *); header:  (allowed: )
-PASS CORS that succeeds with credentials: true; method: PUT (allowed: PUT); header:  (allowed: *)
-PASS CORS that fails with credentials: true; method: PUT (allowed: put); header:  (allowed: *)
-PASS CORS that fails with credentials: true; method: GET (allowed: get); header: X-Test,1 (allowed: *)
-PASS CORS that fails with credentials: true; method: GET (allowed: *); header: X-Test,1 (allowed: *)
-PASS CORS that succeeds with credentials: true; method: * (allowed: *); header: *,1 (allowed: *)
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-layer-filter-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-layer-filter-expected.png
index 3a67f62..0328d65 100644
--- a/third_party/WebKit/LayoutTests/images/color-profile-layer-filter-expected.png
+++ b/third_party/WebKit/LayoutTests/images/color-profile-layer-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/animations/rotate-transform-equivalent-expected.png b/third_party/WebKit/LayoutTests/platform/linux/animations/rotate-transform-equivalent-expected.png
index 601284d7..6e8a77f5c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/animations/rotate-transform-equivalent-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/animations/rotate-transform-equivalent-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/animations/skew-notsequential-compositor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/animations/skew-notsequential-compositor-expected.png
new file mode 100644
index 0000000..f1fb3b5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/animations/skew-notsequential-compositor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/3d-corners-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/3d-corners-expected.png
new file mode 100644
index 0000000..d0a0cb8b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/3d-corners-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/backface-visibility-transformed-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/backface-visibility-transformed-expected.png
new file mode 100644
index 0000000..bc9a785
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/backface-visibility-transformed-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/backface-visibility/backface-visibility-non3d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/backface-visibility/backface-visibility-non3d-expected.png
new file mode 100644
index 0000000..25e6017
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/backface-visibility/backface-visibility-non3d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/color-matching/image-color-matching-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/color-matching/image-color-matching-expected.png
index b36d906..7ff9f914 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/color-matching/image-color-matching-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/color-matching/image-color-matching-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/composited-scaled-child-with-border-radius-parent-clip-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/composited-scaled-child-with-border-radius-parent-clip-expected.png
new file mode 100644
index 0000000..e606756
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/composited-scaled-child-with-border-radius-parent-clip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/composited-translated-child-with-border-radius-parent-clip-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/composited-translated-child-with-border-radius-parent-clip-expected.png
new file mode 100644
index 0000000..5bfd018
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/composited-translated-child-with-border-radius-parent-clip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/culling/filter-occlusion-blur-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/culling/filter-occlusion-blur-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/compositing/culling/filter-occlusion-blur-expected.png
rename to third_party/WebKit/LayoutTests/platform/linux/compositing/culling/filter-occlusion-blur-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/culling/filter-occlusion-blur-large-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/culling/filter-occlusion-blur-large-expected.png
new file mode 100644
index 0000000..147f72f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/culling/filter-occlusion-blur-large-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/direct-image-compositing-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/direct-image-compositing-expected.png
index 8fe6974..0c46d4069a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/direct-image-compositing-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/direct-image-compositing-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/flat-with-transformed-child-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/flat-with-transformed-child-expected.png
new file mode 100644
index 0000000..ba38a6eb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/flat-with-transformed-child-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/clipping-foreground-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/clipping-foreground-expected.png
index 0bc0909..96bb0b0 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/clipping-foreground-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/clipping-foreground-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/fixed-position-transform-composited-page-scale-down-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/fixed-position-transform-composited-page-scale-down-expected.png
index df09a173..80d70b5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/fixed-position-transform-composited-page-scale-down-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/fixed-position-transform-composited-page-scale-down-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/fixed-position-transform-composited-page-scale-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/fixed-position-transform-composited-page-scale-expected.png
index 49cd3c4..34321ee 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/fixed-position-transform-composited-page-scale-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/fixed-position-transform-composited-page-scale-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-deep-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-deep-expected.png
index 6b346b9..175396f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-deep-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-deep-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-expected.png
index c1a8906..d853ebf 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/vertical-scroll-composited-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/vertical-scroll-composited-expected.png
new file mode 100644
index 0000000..2f459985
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/vertical-scroll-composited-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/video-fixed-scrolling-expected.png
index 7bc93af..99e2a33c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/video-fixed-scrolling-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/video-fixed-scrolling-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/video-opacity-overlay-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/video-opacity-overlay-expected.png
index 860cb96..258709e4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/video-opacity-overlay-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/video-opacity-overlay-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png
index 300b9f3..35e95006 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/gestures/gesture-tapHighlight-pixel-rotated-div-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
index c83cdd6..7a4c0e10 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/gestures/gesture-tapHighlight-pixel-rotated-link-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/layers-inside-overflow-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/layers-inside-overflow-scroll-expected.png
index 9b1e725..1238627 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/layers-inside-overflow-scroll-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/layers-inside-overflow-scroll-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/lots-of-img-layers-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/lots-of-img-layers-expected.png
new file mode 100644
index 0000000..1d5e388
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/lots-of-img-layers-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/lots-of-img-layers-with-opacity-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/lots-of-img-layers-with-opacity-expected.png
new file mode 100644
index 0000000..504660f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/lots-of-img-layers-with-opacity-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/direct-image-mask-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/direct-image-mask-expected.png
index 5d33323..0a42af3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/direct-image-mask-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/direct-image-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/mask-with-added-filters-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/mask-with-added-filters-expected.png
index 5119710..c8800e2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/mask-with-added-filters-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/mask-with-added-filters-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/mask-with-removed-filters-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/mask-with-removed-filters-expected.png
index 2ca7f39..e01f792 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/mask-with-removed-filters-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/mask-with-removed-filters-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/masked-ancestor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/masked-ancestor-expected.png
index 321cc1df..d565ad6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/masked-ancestor-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/masked-ancestor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/multiple-masks-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/multiple-masks-expected.png
index 415fe63b..b55370f2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/multiple-masks-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/multiple-masks-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/simple-composited-mask-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/simple-composited-mask-expected.png
index a624d4cc..7e2a08f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/simple-composited-mask-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/masks/simple-composited-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/opacity-with-mask-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/opacity-with-mask-expected.png
new file mode 100644
index 0000000..7792efb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/opacity-with-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png
new file mode 100644
index 0000000..31ce3d9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/border-radius-on-grandparent-composited-grandchild-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/border-radius-on-grandparent-composited-grandchild-expected.png
new file mode 100644
index 0000000..2cee245
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/border-radius-on-grandparent-composited-grandchild-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/border-radius-on-parent-composited-grandchild-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/border-radius-on-parent-composited-grandchild-expected.png
new file mode 100644
index 0000000..b60254a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/border-radius-on-parent-composited-grandchild-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/border-radius-on-two-ancestors-composited-grandchild-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/border-radius-on-two-ancestors-composited-grandchild-expected.png
new file mode 100644
index 0000000..b9fac482
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/border-radius-on-two-ancestors-composited-grandchild-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/border-radius-styles-with-composited-child-expected.png
new file mode 100644
index 0000000..5fa2b0b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/border-radius-styles-with-composited-child-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/grandchild-composited-with-border-radius-ancestor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/grandchild-composited-with-border-radius-ancestor-expected.png
new file mode 100644
index 0000000..f38a1b2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/grandchild-composited-with-border-radius-ancestor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/grandchild-with-border-radius-ancestor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/grandchild-with-border-radius-ancestor-expected.png
new file mode 100644
index 0000000..f38a1b2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/grandchild-with-border-radius-ancestor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/mask-with-filter-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/mask-with-filter-expected.png
new file mode 100644
index 0000000..fff540df
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/mask-with-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/nested-render-surfaces-with-intervening-clip-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/nested-render-surfaces-with-intervening-clip-expected.png
new file mode 100644
index 0000000..ce412b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/nested-render-surfaces-with-intervening-clip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/nested-render-surfaces-with-rotation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/nested-render-surfaces-with-rotation-expected.png
new file mode 100644
index 0000000..7e616b7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/nested-render-surfaces-with-rotation-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/overflow-compositing-descendant-expected.png
index f5d9cd3..1e09c67 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/overflow-compositing-descendant-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/overflow-compositing-descendant-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-mask-expected.png
index f9d24e27..c98959e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-mask-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-overflow-expected.png
new file mode 100644
index 0000000..c1c4d7ff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-overflow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scroll-ancestor-update-expected.png
index 5d5a44a..8916901 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scroll-ancestor-update-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scroll-ancestor-update-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/siblings-composited-with-border-radius-ancestor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/siblings-composited-with-border-radius-ancestor-expected.png
new file mode 100644
index 0000000..f38a1b2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/siblings-composited-with-border-radius-ancestor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/siblings-composited-with-border-radius-ancestor-one-clipped-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/siblings-composited-with-border-radius-ancestor-one-clipped-expected.png
new file mode 100644
index 0000000..00fa2b9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/siblings-composited-with-border-radius-ancestor-one-clipped-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/siblings-with-border-radius-ancestor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/siblings-with-border-radius-ancestor-expected.png
new file mode 100644
index 0000000..ff3a0270
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/siblings-with-border-radius-ancestor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/tiled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/tiled-mask-expected.png
new file mode 100644
index 0000000..ba320740
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/tiled-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overlap-blending/children-opacity-huge-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overlap-blending/children-opacity-huge-expected.png
index 16ba49f6..769cd76b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overlap-blending/children-opacity-huge-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overlap-blending/children-opacity-huge-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overlap-blending/children-opacity-no-overlap-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overlap-blending/children-opacity-no-overlap-expected.png
index 0cca7cab..eda3ec7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overlap-blending/children-opacity-no-overlap-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overlap-blending/children-opacity-no-overlap-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overlap-blending/reflection-opacity-huge-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/overlap-blending/reflection-opacity-huge-expected.png
index e00a249..5188682d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overlap-blending/reflection-opacity-huge-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overlap-blending/reflection-opacity-huge-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/perpendicular-layer-sorting-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/perpendicular-layer-sorting-expected.png
new file mode 100644
index 0000000..f6472ac
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/perpendicular-layer-sorting-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/animation-inside-reflection-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/animation-inside-reflection-expected.png
index ca973d1..e738eac 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/animation-inside-reflection-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/animation-inside-reflection-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/load-video-in-reflection-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/load-video-in-reflection-expected.png
index 31cc698..62dcc8f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/load-video-in-reflection-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/load-video-in-reflection-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/nested-reflection-mask-change-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/nested-reflection-mask-change-expected.png
index b69a73e..2c2cc64 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/nested-reflection-mask-change-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/nested-reflection-mask-change-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/nested-reflection-opacity-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/nested-reflection-opacity-expected.png
index 0cd09ec..6bc5112 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/nested-reflection-opacity-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/nested-reflection-opacity-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/reflection-opacity-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/reflection-opacity-expected.png
index c4f4808..95bb35b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/reflection-opacity-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/reflection-opacity-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/transform-inside-reflection-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/transform-inside-reflection-expected.png
index c603bb9..d0f0e23 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/transform-inside-reflection-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/transform-inside-reflection-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/scaling/tiled-layer-recursion-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/scaling/tiled-layer-recursion-expected.png
new file mode 100644
index 0000000..c2c43072
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/scaling/tiled-layer-recursion-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/self-painting-layers-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/self-painting-layers-expected.png
index 6c0d622e..2d921e07 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/self-painting-layers-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/self-painting-layers-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/transitions/scale-transition-no-start-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/transitions/scale-transition-no-start-expected.png
index ed9d6db..a6b62787 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/transitions/scale-transition-no-start-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/transitions/scale-transition-no-start-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/video-frame-size-change-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/video-frame-size-change-expected.png
index 667f5187..ad074ba 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/video-frame-size-change-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/video-frame-size-change-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/video/video-reflection-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/video/video-reflection-expected.png
new file mode 100644
index 0000000..635d07ac
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/video/video-reflection-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/visibility/visibility-image-layers-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/visibility/visibility-image-layers-expected.png
new file mode 100644
index 0000000..365ad04
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/visibility/visibility-image-layers-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/visibility/visibility-simple-video-layer-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/visibility/visibility-simple-video-layer-expected.png
new file mode 100644
index 0000000..3d2a91a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/visibility/visibility-simple-video-layer-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/webgl/webgl-reflection-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/webgl/webgl-reflection-expected.png
index 5b050023..f90d16e5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/webgl/webgl-reflection-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/webgl/webgl-reflection-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/float_elements_in_series-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/float_elements_in_series-expected.png
index a6d4d61..f0c1277 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/float_elements_in_series-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/float_elements_in_series-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/padding_inline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/padding_inline-expected.png
index 1901a6c..4d33f7d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/padding_inline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css1/box_properties/padding_inline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css1/pseudo/firstline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css1/pseudo/firstline-expected.png
index a867f30b..8fb0e49 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css1/pseudo/firstline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css1/pseudo/firstline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css1/pseudo/pseudo_elements_in_selectors-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css1/pseudo/pseudo_elements_in_selectors-expected.png
index e780cc7..33e24d83 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css1/pseudo/pseudo_elements_in_selectors-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css1/pseudo/pseudo_elements_in_selectors-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css1/units/percentage_units-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css1/units/percentage_units-expected.png
index 5f2ae23..05f2895 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css1/units/percentage_units-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css1/units/percentage_units-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0803-c5502-mrgn-r-02-c-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0803-c5502-mrgn-r-02-c-expected.png
index 102546dd..ac5b49c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0803-c5502-mrgn-r-02-c-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0803-c5502-mrgn-r-02-c-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0803-c5505-mrgn-02-c-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0803-c5505-mrgn-02-c-expected.png
index 570392e..f6036bc2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0803-c5505-mrgn-02-c-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t0803-c5505-mrgn-02-c-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t1002-c5523-width-02-b-g-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t1002-c5523-width-02-b-g-expected.png
index 6d3dca24..65621b133 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css2.1/t1002-c5523-width-02-b-g-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css2.1/t1002-c5523-width-02-b-g-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.png
index bea958b..43b6d39 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/filters/effect-blur-hw-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-blur-hw-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/css3/filters/effect-blur-hw-expected.png
rename to third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-blur-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-brightness-clamping-hw-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-brightness-clamping-hw-expected.png
new file mode 100644
index 0000000..359468a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-brightness-clamping-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-brightness-hw-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-brightness-hw-expected.png
new file mode 100644
index 0000000..4d27e489d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-brightness-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-combined-hw-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-combined-hw-expected.png
new file mode 100644
index 0000000..c42e028
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-combined-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-drop-shadow-hw-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-drop-shadow-hw-expected.png
new file mode 100644
index 0000000..91f798b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-drop-shadow-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-grayscale-hw-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-grayscale-hw-expected.png
new file mode 100644
index 0000000..b5667035
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-grayscale-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-hue-rotate-hw-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-hue-rotate-hw-expected.png
new file mode 100644
index 0000000..a090534
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-hue-rotate-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-saturate-hw-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-saturate-hw-expected.png
new file mode 100644
index 0000000..94d27c6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-saturate-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-sepia-hw-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-sepia-hw-expected.png
new file mode 100644
index 0000000..61e3630
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-sepia-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/filter-change-repaint-composited-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/filter-change-repaint-composited-expected.png
new file mode 100644
index 0000000..3e6040d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/filter-change-repaint-composited-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/filter-change-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/filter-change-repaint-expected.png
new file mode 100644
index 0000000..8495c55
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/filter-change-repaint-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/filters/filter-repaint-composited-fallback-crash-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/filter-repaint-composited-fallback-crash-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/css3/filters/filter-repaint-composited-fallback-crash-expected.png
rename to third_party/WebKit/LayoutTests/platform/linux/css3/filters/filter-repaint-composited-fallback-crash-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/filters/filter-repaint-composited-fallback-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/filter-repaint-composited-fallback-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/css3/filters/filter-repaint-composited-fallback-expected.png
rename to third_party/WebKit/LayoutTests/platform/linux/css3/filters/filter-repaint-composited-fallback-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-luminance-gradient-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-luminance-gradient-expected.png
new file mode 100644
index 0000000..1f638319
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-luminance-gradient-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-luminance-svg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-luminance-svg-expected.png
new file mode 100644
index 0000000..8540526
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-luminance-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-repeat-round-content-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-repeat-round-content-expected.png
new file mode 100644
index 0000000..6cfcdcf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-repeat-round-content-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-repeat-space-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-repeat-space-border-expected.png
new file mode 100644
index 0000000..a6775fa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-repeat-space-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-repeat-space-content-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-repeat-space-content-expected.png
new file mode 100644
index 0000000..de6fac53
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-repeat-space-content-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-repeat-space-padding-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-repeat-space-padding-expected.png
new file mode 100644
index 0000000..816d714
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/masking/mask-repeat-space-padding-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.getcontext-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.getcontext-expected.txt
new file mode 100644
index 0000000..d1c9562
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/external/wpt/offscreen-canvas/the-offscreen-canvas/offscreencanvas.getcontext-expected.txt
@@ -0,0 +1,11 @@
+This is a testharness.js-based test.
+PASS Test that getContext with un-supported string throws a TypeError.
+FAIL Test that getContext with supported string returns correct results assert_true: expected true got false
+PASS Test that getContext twice with different context type returns null the second time
+PASS Test that 2dcontext.canvas should return the original OffscreenCanvas
+PASS Test that webglcontext.canvas should return the original OffscreenCanvas
+FAIL Test that OffscreenCanvasRenderingContext2D with alpha disabled makes the OffscreenCanvas opaque assert_approx_equals: Green channel of the pixel at (5, 5) expected 127 +/- 2 but got 255
+PASS Test that OffscreenCanvasRenderingContext2D with alpha enabled preserves the alpha
+PASS Test that 'alpha' context creation attribute is true by default
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/008-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/008-expected.png
new file mode 100644
index 0000000..54121bed
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/008-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/021-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/021-expected.png
index 821d7c4e..fa04624 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/021-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/float/021-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/104-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/104-expected.png
index e5a96215..25d3074 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/104-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/margin-collapse/104-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/relative-overflow-block-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/relative-overflow-block-expected.png
index 0ef9c38..0a2c60b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/relative-overflow-block-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/relative-overflow-block-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/relative-overflow-replaced-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/relative-overflow-replaced-expected.png
index 0ad16d59..b0e8180c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/relative-overflow-replaced-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/relative-overflow-replaced-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/relative-overflow-replaced-float-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/relative-overflow-replaced-float-expected.png
index 263be7f..b026343 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/relative-overflow-replaced-float-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/relative-overflow-replaced-float-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/vertical-lr/002-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/vertical-lr/002-expected.png
new file mode 100644
index 0000000..b592b4df
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/vertical-lr/002-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/vertical-rl/002-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/vertical-rl/002-expected.png
new file mode 100644
index 0000000..7ab4b2b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/block/positioning/vertical-rl/002-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/001-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/001-expected.png
index af48641..81f3f975 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/001-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/001-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/001-xhtml-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/001-xhtml-expected.png
index af48641..81f3f975 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/001-xhtml-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/001-xhtml-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/005-declarative-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/005-declarative-expected.png
index bb2ac67..ea8ac8c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/005-declarative-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/005-declarative-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/005-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/005-expected.png
index bb2ac67..ea8ac8c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/005-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/005-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/005-xhtml-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/005-xhtml-expected.png
index bb2ac67..ea8ac8c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/005-xhtml-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/body-propagation/overflow/005-xhtml-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-canvas-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-canvas-border-expected.png
index 2349e40..bbe9bc26 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-canvas-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-canvas-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-canvas-expected.png
index 9da43fee..1bb76e9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-canvas-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-canvas-with-mask-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-canvas-with-mask-expected.png
index b593f70e..fe95cd4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-canvas-with-mask-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-canvas-with-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-video-expected.png
index b98e15b..5fd3df6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-video-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-video-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-video-ratio-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-video-ratio-expected.png
index 6ea3eb3..c2adc3cd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-video-ratio-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-video-ratio-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-video-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-video-shadow-expected.png
index 957b8fc9..5e17ebf 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-video-shadow-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-mask-video-shadow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-with-composited-child-expected.png
index 84c3456..f840e14 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-with-composited-child-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/border-radius-with-composited-child-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/rtl-border-01-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/rtl-border-01-expected.png
index 43ebf48..6a8899c2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/rtl-border-01-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/rtl-border-01-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/rtl-border-02-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/rtl-border-02-expected.png
index 302086d..c6d6c7d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/rtl-border-02-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/rtl-border-02-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/rtl-border-03-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/rtl-border-03-expected.png
index 4bfc994..f688ebc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/borders/rtl-border-03-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/borders/rtl-border-03-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-composite-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-composite-video-expected.png
index a39e5ac..55b60e3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-composite-video-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-composite-video-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-composite-video-shadow-expected.png
index ee72053..ebe81ec 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-composite-video-shadow-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-composite-video-shadow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-drawImage-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-drawImage-video-expected.png
deleted file mode 100644
index a58254b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-drawImage-video-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-pattern-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-pattern-video-expected.png
deleted file mode 100644
index 71553edf..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-pattern-video-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/yuv-video-on-accelerated-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/yuv-video-on-accelerated-canvas-expected.png
deleted file mode 100644
index f0411d4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/yuv-video-on-accelerated-canvas-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/clip/overflow-border-radius-composited-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/clip/overflow-border-radius-composited-expected.png
index 178c76c..fb12501b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/clip/overflow-border-radius-composited-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/clip/overflow-border-radius-composited-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/clip/overflow-border-radius-composited-parent-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/clip/overflow-border-radius-composited-parent-expected.png
index 34d1fcf..77ee9f3d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/clip/overflow-border-radius-composited-parent-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/clip/overflow-border-radius-composited-parent-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
index 2fa1145c..3c90c3f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/button-default-title-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/button-default-title-expected.png
index 641bf6a1..dba06e5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/button-default-title-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/button-default-title-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/huge-mac-input-clamped-width-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/huge-mac-input-clamped-width-expected.png
new file mode 100644
index 0000000..ab190136
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/huge-mac-input-clamped-width-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-appearance-selection-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-appearance-selection-expected.png
index 8868061..87b158a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-appearance-selection-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-appearance-selection-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-table-expected.png
index 34bd499803..b65c1ee 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/input-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/frames/iframe-scrolling-attribute-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/frames/iframe-scrolling-attribute-expected.png
index 9861b1f..0fd08c9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/frames/iframe-scrolling-attribute-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/frames/iframe-scrolling-attribute-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/gradients/css3-color-stop-units-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/gradients/css3-color-stop-units-expected.png
index 904e2f20..d53ba47 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/gradients/css3-color-stop-units-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/gradients/css3-color-stop-units-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/hidpi/scrollbar-appearance-increase-device-scale-factor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/hidpi/scrollbar-appearance-increase-device-scale-factor-expected.png
index ed91b7c..68b79b06 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/hidpi/scrollbar-appearance-increase-device-scale-factor-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/hidpi/scrollbar-appearance-increase-device-scale-factor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-borders-with-bidi-override-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-borders-with-bidi-override-expected.png
index 0660b531..4abc6cc5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-borders-with-bidi-override-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/inline-borders-with-bidi-override-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/olstart-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/olstart-expected.png
index b7d6af0..ab03c8b3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/olstart-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/olstart-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/media/mq-color-gamut-picture-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/media/mq-color-gamut-picture-expected.png
new file mode 100644
index 0000000..32968d8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/media/mq-color-gamut-picture-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/006-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/006-expected.png
index 1e6159b8..6edcdb9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/006-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/overflow/006-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/sub-pixel/transformed-iframe-copy-on-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/sub-pixel/transformed-iframe-copy-on-scroll-expected.png
index 7bcef702..6522f71 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/sub-pixel/transformed-iframe-copy-on-scroll-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/sub-pixel/transformed-iframe-copy-on-scroll-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/023-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/023-expected.png
index 1030ac3..a007f79 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/023-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/023-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/040-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/040-expected.png
index 4b9c6716..0ff5526 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/040-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/040-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-expected.png
index 84513c6..a6ef896 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-collapsed-border-expected.png
index 4bd727e..6034610 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-expected.png
index 010ec78..05883dc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-expected.png
index 29c64ac15..66c969a4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-collapsed-border-expected.png
index 707b7f0..3cb3102 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-expected.png
index 535f451..8aa6930 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_border-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-expected.png
index 4f8ea7b4..449a74d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-hide-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-show-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-show-collapsed-border-expected.png
index 690b06a..59728f5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-show-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-show-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-show-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-show-expected.png
index 718169d..6fd0aba 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-show-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_layers-show-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-expected.png
index 0bc70bc..8c39206 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-expected.png
index e18d8ac6..4008f02 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-collapsed-border-expected.png
index 93165f4..0e3a429 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-expected.png
index 97293ab7..61e56fc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_position-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-expected.png
index 6d2f3e12..4996351 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-collapsed-border-expected.png
index 78bdac9..2c9ea75e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-expected.png
index aaeb391..43c8a66 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-expected.png
index 6f613657..d6976ec7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-collapsed-border-expected.png
index ca82511..bd65d9e7c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/backgr_simple-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/empty-cells-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/table/empty-cells-expected.png
index 8d98f0a..9af691d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/empty-cells-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/empty-cells-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/font-stretch-variant-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/font-stretch-variant-expected.png
index d44170f4..1118fa4f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/font-stretch-variant-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/font-stretch-variant-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/vertical-text-glyph-test-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/vertical-text-glyph-test-expected.png
index 1b71028..bfbf484 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/vertical-text-glyph-test-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/vertical-text-glyph-test-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/webgl/pixelated-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/webgl/pixelated-expected.png
new file mode 100644
index 0000000..4c356a19
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/webgl/pixelated-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/webgl/webgl-composite-modes-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/webgl/webgl-composite-modes-expected.png
new file mode 100644
index 0000000..22c1698
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/webgl/webgl-composite-modes-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/webgl/webgl-composite-modes-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/webgl/webgl-composite-modes-repaint-expected.png
new file mode 100644
index 0000000..1ead635
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/webgl/webgl-composite-modes-repaint-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/webgl/webgl-composite-modes-tabswitching-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/webgl/webgl-composite-modes-tabswitching-expected.png
new file mode 100644
index 0000000..329a790
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/webgl/webgl-composite-modes-tabswitching-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/border-radius-clipping-vertical-lr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/border-radius-clipping-vertical-lr-expected.png
index f1037c1..670713d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/border-radius-clipping-vertical-lr-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/border-radius-clipping-vertical-lr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/hdr/color-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/hdr/color-jpeg-with-color-profile-expected.png
new file mode 100644
index 0000000..dc798e6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/hdr/color-jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/hdr/color-profile-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/hdr/color-profile-video-expected.png
new file mode 100644
index 0000000..85f7439
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/hdr/color-profile-video-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/hdr/video-canvas-alpha-expected.png b/third_party/WebKit/LayoutTests/platform/linux/hdr/video-canvas-alpha-expected.png
index f4230b7..1d92b9de 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/hdr/video-canvas-alpha-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/hdr/video-canvas-alpha-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-expected.png
new file mode 100644
index 0000000..52b7c89
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/http/tests/misc/object-embedding-svg-delayed-size-negotiation-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-layer-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-layer-expected.png
new file mode 100644
index 0000000..966445d7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-layer-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-layer-filter-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-layer-filter-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/images/color-profile-layer-filter-expected.png
rename to third_party/WebKit/LayoutTests/platform/linux/images/color-profile-layer-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-0px-images-quirk-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-0px-images-quirk-expected.png
index 9e28c435..4814771d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-0px-images-quirk-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-0px-images-quirk-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-block-flow-images-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-block-flow-images-expected.png
index 3cf5565..b8622059 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-block-flow-images-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-block-flow-images-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-expected.png
new file mode 100644
index 0000000..132ad68c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-seek-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-seek-expected.png
new file mode 100644
index 0000000..5b24f3e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-seek-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-seek-filter-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-seek-filter-expected.png
new file mode 100644
index 0000000..2b5e0b3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-seek-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-seek-object-fit-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-seek-object-fit-expected.png
new file mode 100644
index 0000000..c4a1a2f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-seek-object-fit-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index 95cc3b8..c0d1ed9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.png
index f020e908..a7d8a8d2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.png
index c760087..6f1b9b4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-dark-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-dark-rendering-expected.png
index 6881c87..21c7372e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-dark-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-dark-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-light-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-light-rendering-expected.png
index 6f50ab8..f0f58639 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-light-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-light-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/track/track-cue-rendering-horizontal-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/track/track-cue-rendering-horizontal-expected.png
index 3df7c7c..7008413b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/track/track-cue-rendering-horizontal-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/track/track-cue-rendering-horizontal-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/track/track-cue-rendering-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/track/track-cue-rendering-vertical-expected.png
index 6c505bc..1511e75e8 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/track/track-cue-rendering-vertical-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/track/track-cue-rendering-vertical-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-aspect-ratio-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-aspect-ratio-expected.png
index 3cf5d65..8524387 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-aspect-ratio-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-aspect-ratio-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-canvas-alpha-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-canvas-alpha-expected.png
index 15149966..6af9546 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-canvas-alpha-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-canvas-alpha-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-canvas-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-canvas-expected.txt
deleted file mode 100644
index 1540aa9..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-canvas-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Test "video" as a source for "canvas". assert_equals: expected 9 but got 8
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-colorspace-yuv420-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-colorspace-yuv420-expected.png
index 910ad86..ee15730 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-colorspace-yuv420-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-colorspace-yuv420-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-colorspace-yuv422-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-colorspace-yuv422-expected.png
index da7b082..e3dd67f4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-colorspace-yuv422-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-colorspace-yuv422-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.png
index 74ec71a..9381506 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-remove-insert-repaints-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-remove-insert-repaints-expected.png
new file mode 100644
index 0000000..47efc6a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-remove-insert-repaints-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-replaces-poster-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-replaces-poster-expected.png
index 06015ec..f3cbb0b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-replaces-poster-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-replaces-poster-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-transformed-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-transformed-expected.png
index 4cd0d6a..0f92355 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-transformed-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-transformed-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.png
index a8f4e32..d2673f5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-expected.png
index 484c5b1..ae5b2dc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/overflow/overflow-transform-perspective-expected.png b/third_party/WebKit/LayoutTests/platform/linux/overflow/overflow-transform-perspective-expected.png
index 799fdd2fb..9b31940b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/overflow/overflow-transform-perspective-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/overflow/overflow-transform-perspective-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/new-stacking-context-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/new-stacking-context-expected.png
new file mode 100644
index 0000000..dc85ee8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/new-stacking-context-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/document-flipped-blocks-writing-mode-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/document-flipped-blocks-writing-mode-scroll-expected.png
new file mode 100644
index 0000000..068ca5d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/document-flipped-blocks-writing-mode-scroll-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-style-change-in-scrolled-view-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-style-change-in-scrolled-view-expected.png
index 14644fad..c48d3b52 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-style-change-in-scrolled-view-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-style-change-in-scrolled-view-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-move-after-scroll-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-move-after-scroll-expected.png
index 4c8528e..ffb212d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-move-after-scroll-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-move-after-scroll-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-scroll-body-appear-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-scroll-body-appear-expected.png
index ad3f31c..a55b4c5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-scroll-body-appear-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-scroll-body-appear-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.png
index c59fdf3..bfcc558 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/repaint-in-scrolled-view-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/repaint-in-scrolled-view-expected.png
new file mode 100644
index 0000000..3e6b0b62
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/repaint-in-scrolled-view-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
index cf11911..b547e78 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-xy-updates-SVGList-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-xy-updates-SVGList-expected.png
index 3b126dbb..991085e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-xy-updates-SVGList-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-xy-updates-SVGList-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-expected.png
index dab4196..7b758b0 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.png
index dab4196..7b758b0 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-expected.png
index cfbd431..37ed9c1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.png
index cfbd431..37ed9c1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/printing/return-from-printing-mode-expected.png b/third_party/WebKit/LayoutTests/platform/linux/printing/return-from-printing-mode-expected.png
index a634b4002..773e4cf 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/printing/return-from-printing-mode-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/printing/return-from-printing-mode-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/bug45331-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/bug45331-expected.png
index f6241b28..f222469d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/bug45331-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/bug45331-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/object-sizing-no-width-height-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/object-sizing-no-width-height-expected.png
new file mode 100644
index 0000000..52b7c89
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/object-sizing-no-width-height-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-objectBoundingBox-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-objectBoundingBox-expected.png
new file mode 100644
index 0000000..bf174b54
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-objectBoundingBox-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-userSpaceOnUse-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-userSpaceOnUse-expected.png
new file mode 100644
index 0000000..65d6380
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-userSpaceOnUse-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-objectBoundingBox-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-objectBoundingBox-expected.png
new file mode 100644
index 0000000..bf174b54
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-objectBoundingBox-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-userSpaceOnUse-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-userSpaceOnUse-expected.png
new file mode 100644
index 0000000..65d6380
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-userSpaceOnUse-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/overflow/overflow-on-outermost-svg-element-defaults-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/overflow/overflow-on-outermost-svg-element-defaults-expected.png
new file mode 100644
index 0000000..5c73f57
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/overflow/overflow-on-outermost-svg-element-defaults-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-2-expected.png
new file mode 100644
index 0000000..5c73f57
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-3-expected.png
new file mode 100644
index 0000000..5c73f57
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-3-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-defaults-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-defaults-expected.png
new file mode 100644
index 0000000..0c0220f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-defaults-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/transformed-text-fill-pattern-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/transformed-text-fill-pattern-expected.png
new file mode 100644
index 0000000..edafde3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/transformed-text-fill-pattern-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/wicd/test-scalable-background-image1-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/wicd/test-scalable-background-image1-expected.png
index d4feca9..91d8f01 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/wicd/test-scalable-background-image1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/wicd/test-scalable-background-image1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/absolute-sized-document-scrollbars-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/absolute-sized-document-scrollbars-expected.png
new file mode 100644
index 0000000..7d88073
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/absolute-sized-document-scrollbars-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-mask-with-percentages-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-mask-with-percentages-expected.png
index 3a82b908..eb576f0 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-mask-with-percentages-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-mask-with-percentages-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-float-border-padding-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-float-border-padding-expected.png
index 543d529e..935371c2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-float-border-padding-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-float-border-padding-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/text/zoom-svg-float-border-padding-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/text/zoom-svg-float-border-padding-expected.png
index bd55409..3b3895a0 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/text/zoom-svg-float-border-padding-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/text/zoom-svg-float-border-padding-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug11944-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug11944-expected.png
index ae671af..06cf6c4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug11944-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug11944-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug137388-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug137388-2-expected.png
index 782abb8d3..01c17c7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug137388-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug137388-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug22019-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug22019-expected.png
index 5107ea7..88634f44 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug22019-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug22019-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2479-3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2479-3-expected.png
index 4b028b4..aecdbbd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2479-3-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug2479-3-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug46480-1-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug46480-1-expected.png
index 8bdc814..7654882 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug46480-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug46480-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug50695-1-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug50695-1-expected.png
index 852d61c..0bd343b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug50695-1-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/bugs/bug50695-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/core/bloomberg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/core/bloomberg-expected.png
index 17eaac7..c33a7dd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/core/bloomberg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/core/bloomberg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/other/nestedTables-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/other/nestedTables-expected.png
index ec9435e..cec8542 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/other/nestedTables-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla/other/nestedTables-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug10216-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug10216-expected.png
index 48d0d28..4e48cfd2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug10216-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/bugs/bug10216-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
index 3bbbf80..d6babf1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/backgr_fixed-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/table_overflow_dirty_reflow_tbody-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/table_overflow_dirty_reflow_tbody-expected.png
index 90e75f8..f6ba996 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/table_overflow_dirty_reflow_tbody-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/table_overflow_dirty_reflow_tbody-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/table_overflow_style_reflow_tbody_sibling-expected.png b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/table_overflow_style_reflow_tbody_sibling-expected.png
index ffec628..d0e01fa 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/table_overflow_style_reflow_tbody_sibling-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/tables/mozilla_expected_failures/marvin/table_overflow_style_reflow_tbody_sibling-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/2d/hindi-rotated-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/2d/hindi-rotated-expected.png
index e2d31db..dbef225 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/transforms/2d/hindi-rotated-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/2d/hindi-rotated-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/general/cssmatrix-3d-zoom-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/general/cssmatrix-3d-zoom-expected.png
new file mode 100644
index 0000000..ba6d122
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/general/cssmatrix-3d-zoom-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/general/perspective-units-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/general/perspective-units-expected.png
index f616e7d..ee8ae7a9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/general/perspective-units-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/general/perspective-units-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/general/transform-origin-z-change-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/general/transform-origin-z-change-expected.png
new file mode 100644
index 0000000..d761571
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/general/transform-origin-z-change-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-2-expected.png
index a72f9457..204fb52 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-3-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-3-expected.png
index 1387a47..728737e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-3-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-3-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-coplanar-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-coplanar-expected.png
index 25b2ffa..d951566 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-coplanar-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-coplanar-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png
index 4043e9f..d30d202 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-expected.png
index af5c408..dc77e554 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-origins-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-origins-expected.png
index bbe385a..277e6100f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-origins-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-origins-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.png
index e745925..f7653ee 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.png
index df0605e..63ab0ef 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transitions/opacity-transform-transitions-inside-iframe-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transitions/opacity-transform-transitions-inside-iframe-expected.png
new file mode 100644
index 0000000..65d5a58
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/transitions/opacity-transform-transitions-inside-iframe-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transitions/opacity-transition-zindex-expected.png b/third_party/WebKit/LayoutTests/platform/linux/transitions/opacity-transition-zindex-expected.png
new file mode 100644
index 0000000..43c5d9c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/transitions/opacity-transition-zindex-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/full-screen-iframe-allowed-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/full-screen-iframe-allowed-video-expected.png
index be759256..abfb363 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/full-screen-iframe-allowed-video-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/full-screen-iframe-allowed-video-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-controls-timeline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-controls-timeline-expected.png
index be759256..abfb363 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-controls-timeline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-controls-timeline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-scrolled-iframe-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-scrolled-iframe-expected.png
index be759256..abfb363 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-scrolled-iframe-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/android/fullscreen/video-scrolled-iframe-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-video-expected.png
index a39e5ac..55b60e3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-video-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-video-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-video-shadow-expected.png
index ee72053..ebe81ec 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-video-shadow-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-video-shadow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-drawImage-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-drawImage-video-expected.png
deleted file mode 100644
index a58254b..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-drawImage-video-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-pattern-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-pattern-video-expected.png
index 71553edf..f31bb59 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-pattern-video-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-pattern-video-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/webgl/pixelated-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/webgl/pixelated-expected.png
new file mode 100644
index 0000000..4c356a19
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/webgl/pixelated-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-composite-modes-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-composite-modes-expected.png
new file mode 100644
index 0000000..22c1698
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-composite-modes-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-composite-modes-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-composite-modes-repaint-expected.png
new file mode 100644
index 0000000..1ead635
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-composite-modes-repaint-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-composite-modes-tabswitching-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-composite-modes-tabswitching-expected.png
new file mode 100644
index 0000000..329a790
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/webgl/webgl-composite-modes-tabswitching-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/yuv-video-on-accelerated-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/yuv-video-on-accelerated-canvas-expected.png
deleted file mode 100644
index f0411d4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/yuv-video-on-accelerated-canvas-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/12-55-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/12-55-expected.png
index 36618e9..72c2990 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/12-55-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/12-55-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/182-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/182-expected.png
index 87fc45e7..ebb07cef 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/182-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/182-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/2-comp-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/2-comp-expected.png
new file mode 100644
index 0000000..02dde9f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/2-comp-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/2-dht-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/2-dht-expected.png
index db69097b..1cd57312 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/2-dht-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/2-dht-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/23-55-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/23-55-expected.png
index 0bba402..178e3905 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/23-55-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/23-55-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/55-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/55-expected.png
index 3ef5d582..66273619 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/55-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/55-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cHRM_color_spin-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cHRM_color_spin-expected.png
new file mode 100644
index 0000000..4c304cbc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cHRM_color_spin-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-jpeg-with-color-profile-expected.png
new file mode 100644
index 0000000..c10cd0b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-animate-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-animate-expected.png
new file mode 100644
index 0000000..874c69a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-animate-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-animate-rotate-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-animate-rotate-expected.png
new file mode 100644
index 0000000..9623b7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-animate-rotate-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-clip-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-clip-text-expected.png
new file mode 100644
index 0000000..8ec4a0d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-clip-text-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-cover-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-cover-expected.png
new file mode 100644
index 0000000..dc931ce
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-cover-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.png
new file mode 100644
index 0000000..2a47876
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.png
new file mode 100644
index 0000000..2a47876
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-repeat-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-repeat-expected.png
new file mode 100644
index 0000000..6de6b5545
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-repeat-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-space-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-space-expected.png
new file mode 100644
index 0000000..9e5603dc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-background-image-space-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-border-fade-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-border-fade-expected.png
new file mode 100644
index 0000000..2202536
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-border-fade-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-border-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-border-image-expected.png
new file mode 100644
index 0000000..e27948c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-border-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-border-image-source-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-border-image-source-expected.png
new file mode 100644
index 0000000..51f8501
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-border-image-source-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-border-radius-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-border-radius-expected.png
new file mode 100644
index 0000000..ef3128d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-border-radius-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-clip-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-clip-expected.png
new file mode 100644
index 0000000..b208b128
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-clip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-filter-expected.png
new file mode 100644
index 0000000..695d466
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-group-expected.png
new file mode 100644
index 0000000..f32fb4b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-iframe-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-iframe-expected.png
new file mode 100644
index 0000000..3814e41
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-iframe-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png
new file mode 100644
index 0000000..ab7bb2da
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png
new file mode 100644
index 0000000..6e84da6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png
new file mode 100644
index 0000000..4f0b1ca
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-expected.png
new file mode 100644
index 0000000..7ac8cac
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
index cbebdf2..930406a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-object-fit-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-object-fit-expected.png
new file mode 100644
index 0000000..56bf0512
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-object-fit-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-profile-match-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-profile-match-expected.png
new file mode 100644
index 0000000..356bfef07a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-profile-match-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-pseudo-content-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-pseudo-content-expected.png
new file mode 100644
index 0000000..a931591
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-pseudo-content-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-shape-expected.png
index fe02a6b1..951b57f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-shape-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-shape-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-svg-resource-url-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-svg-resource-url-expected.png
new file mode 100644
index 0000000..28870ea
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-svg-resource-url-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-layer-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-layer-expected.png
new file mode 100644
index 0000000..0cd64e5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-layer-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png
new file mode 100644
index 0000000..56c7926
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-mask-image-svg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-mask-image-svg-expected.png
new file mode 100644
index 0000000..a03e7cd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-mask-image-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png
index 535922d..c5c3efb7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png
index 4669db6c..6f42dc9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-object-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-object-expected.png
new file mode 100644
index 0000000..3c32c5a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-object-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-expected.png
new file mode 100644
index 0000000..9ee60756
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png
index 66498a7..4be12c1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-foreign-object-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-foreign-object-expected.png
new file mode 100644
index 0000000..1d78a19
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-foreign-object-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cross-fade-background-size-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cross-fade-background-size-expected.png
new file mode 100644
index 0000000..392819d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cross-fade-background-size-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cross-fade-svg-size-diff-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cross-fade-svg-size-diff-expected.png
index d53d4c6b..374cbae 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cross-fade-svg-size-diff-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cross-fade-svg-size-diff-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cross-fade-svg-size-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cross-fade-svg-size-expected.png
index 7f1965e..6b147f2c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cross-fade-svg-size-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/cross-fade-svg-size-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-css-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-css-expected.png
index 17b41b6..ed78fd1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-css-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-css-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-expected.png
index e74ca10..529f7bb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-height-image-document-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-height-image-document-expected.png
new file mode 100644
index 0000000..6366d72
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-height-image-document-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png
index 84a95e1..bdefba6fe 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/icon-0colors-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/icon-0colors-expected.png
new file mode 100644
index 0000000..e51659c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/icon-0colors-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/icon-decoding-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/icon-decoding-expected.png
new file mode 100644
index 0000000..07ff309
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/icon-decoding-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/image-map-anchor-children-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/image-map-anchor-children-expected.png
index 0232d9ef..39f9010e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/image-map-anchor-children-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/image-map-anchor-children-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png
index 94279e8..d5a6a16 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png
index 9271b93..e1b87ee6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-in-positioned-container-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
index e405907..e479ae1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png
index f92650c..3f0744b7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-paint-root-offset-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png
index f780c29..c11b9d4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-with-scale-transform-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png
index cf6ce28..5880f18 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png
index 2f3eff0..d42a2dbc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-overflowing-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png
index a30781b..f3a0d48f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png
index 5b9db4ac9..64c5248 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png
index 9322a516..41d34c5f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-progressive-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-progressive-canvas-expected.png
new file mode 100644
index 0000000..5eaf3fc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-progressive-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png
new file mode 100644
index 0000000..d717325
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/motion-jpeg-single-frame-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/motion-jpeg-single-frame-expected.png
new file mode 100644
index 0000000..5f3feea
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/motion-jpeg-single-frame-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/optimize-contrast-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/optimize-contrast-canvas-expected.png
new file mode 100644
index 0000000..e934c35
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/optimize-contrast-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/optimize-contrast-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/optimize-contrast-image-expected.png
new file mode 100644
index 0000000..c183378
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/optimize-contrast-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/paint-subrect-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/paint-subrect-expected.png
new file mode 100644
index 0000000..e7d8dd3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/paint-subrect-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/paletted-png-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/paletted-png-with-color-profile-expected.png
new file mode 100644
index 0000000..3789e07
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/paletted-png-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pdf-as-background-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pdf-as-background-expected.png
new file mode 100644
index 0000000..7abc7f6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pdf-as-background-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pdf-as-tiled-background-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pdf-as-tiled-background-expected.png
new file mode 100644
index 0000000..7abc7f6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pdf-as-tiled-background-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pixelated-background-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pixelated-background-image-expected.png
new file mode 100644
index 0000000..20448ec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pixelated-background-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pixelated-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pixelated-canvas-expected.png
new file mode 100644
index 0000000..f9f84b5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pixelated-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pixelated-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pixelated-image-expected.png
new file mode 100644
index 0000000..2764b3a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pixelated-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pixelated-svg-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pixelated-svg-image-expected.png
new file mode 100644
index 0000000..2764b3a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/pixelated-svg-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png-suite/test-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png-suite/test-expected.png
new file mode 100644
index 0000000..f44fe3b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png-suite/test-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png-with-color-profile-expected.png
index 5b9db4ac9..64c5248 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png-with-color-profile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png_per_row_alpha_decoding-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png_per_row_alpha_decoding-expected.png
new file mode 100644
index 0000000..2a18e29
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png_per_row_alpha_decoding-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png
index 6bfe8c2..da0be55 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png
index 3fe7b5a..6d14458a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rgb-jpeg-with-adobe-marker-only-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rgb-jpeg-with-adobe-marker-only-expected.png
new file mode 100644
index 0000000..f8eb0237
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rgb-jpeg-with-adobe-marker-only-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rgb-png-with-cmyk-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rgb-png-with-cmyk-color-profile-expected.png
new file mode 100644
index 0000000..2a330d9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rgb-png-with-cmyk-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/sprite-no-bleed-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/sprite-no-bleed-expected.png
new file mode 100644
index 0000000..7cf8f27
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/sprite-no-bleed-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/webp-color-profile-lossless-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/webp-color-profile-lossless-expected.png
new file mode 100644
index 0000000..032e35e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/webp-color-profile-lossless-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/webp-color-profile-lossy-alpha-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/webp-color-profile-lossy-alpha-expected.png
new file mode 100644
index 0000000..cf8d19f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/webp-color-profile-lossy-alpha-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/webp-color-profile-lossy-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/webp-color-profile-lossy-expected.png
new file mode 100644
index 0000000..ccbd467
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/webp-color-profile-lossy-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/ycbcr-with-cmyk-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/ycbcr-with-cmyk-color-profile-expected.png
new file mode 100644
index 0000000..5609d55
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/ycbcr-with-cmyk-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/12-55-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/12-55-expected.png
index b13a651b..69c864e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/12-55-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/12-55-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/182-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/182-expected.png
index 9712bd9..44823062 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/182-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/182-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/2-dht-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/2-dht-expected.png
index f2cc835f..37bd5e1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/2-dht-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/2-dht-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/23-55-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/23-55-expected.png
index cf48d29..0925e715 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/23-55-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/23-55-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/55-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/55-expected.png
index cc72599..01b56ff 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/55-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/55-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/cHRM_color_spin-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/cHRM_color_spin-expected.png
new file mode 100644
index 0000000..23ed1e4c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/cHRM_color_spin-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-jpeg-with-color-profile-expected.png
new file mode 100644
index 0000000..1d56780
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-animate-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-animate-expected.png
new file mode 100644
index 0000000..d25115f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-animate-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-animate-rotate-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-animate-rotate-expected.png
new file mode 100644
index 0000000..8a079e3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-animate-rotate-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-background-image-cover-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-background-image-cover-expected.png
new file mode 100644
index 0000000..22dbbdf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-background-image-cover-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-expected.png
new file mode 100644
index 0000000..29613cd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-png-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-png-expected.png
new file mode 100644
index 0000000..29613cd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-background-image-cross-fade-png-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-background-image-repeat-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-background-image-repeat-expected.png
new file mode 100644
index 0000000..17cda7d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-background-image-repeat-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-border-fade-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-border-fade-expected.png
new file mode 100644
index 0000000..7407960
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-border-fade-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-border-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-border-image-expected.png
new file mode 100644
index 0000000..e523275
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-border-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-border-image-source-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-border-image-source-expected.png
new file mode 100644
index 0000000..a1f66eb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-border-image-source-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-border-radius-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-border-radius-expected.png
new file mode 100644
index 0000000..a91be93
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-border-radius-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-clip-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-clip-expected.png
new file mode 100644
index 0000000..e433f51
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-clip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-filter-expected.png
new file mode 100644
index 0000000..476e395b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-iframe-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-iframe-expected.png
new file mode 100644
index 0000000..268c768
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-iframe-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
new file mode 100644
index 0000000..c164551
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
new file mode 100644
index 0000000..181b748
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png
new file mode 100644
index 0000000..cbefd899
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-expected.png
new file mode 100644
index 0000000..669869dd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png
index 5953f52..02f1d5f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-object-fit-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-object-fit-expected.png
new file mode 100644
index 0000000..9398e0a4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-object-fit-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-profile-match-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-profile-match-expected.png
new file mode 100644
index 0000000..1cf0831
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-profile-match-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-pseudo-content-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-pseudo-content-expected.png
new file mode 100644
index 0000000..cb38667
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-pseudo-content-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-shape-expected.png
index 2e9b32ce..49b5989 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-shape-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-shape-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-svg-resource-url-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-svg-resource-url-expected.png
new file mode 100644
index 0000000..33cf925
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-image-svg-resource-url-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
rename to third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png
index a0aee0a..5d6ebd9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-srgb-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-srgb-to-srgb-expected.png
index 9dd17226..f82f529 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-srgb-to-srgb-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-srgb-to-srgb-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-object-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-object-expected.png
new file mode 100644
index 0000000..c6d91224
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-object-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-svg-foreign-object-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-svg-foreign-object-expected.png
new file mode 100644
index 0000000..66548d51
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-svg-foreign-object-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/cross-fade-background-size-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/cross-fade-background-size-expected.png
new file mode 100644
index 0000000..31ff33d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/cross-fade-background-size-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/cross-fade-invalidation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/cross-fade-invalidation-expected.png
new file mode 100644
index 0000000..03e8eef
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/cross-fade-invalidation-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/cross-fade-overflow-position-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/cross-fade-overflow-position-expected.png
new file mode 100644
index 0000000..e49d2e89
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/cross-fade-overflow-position-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/exif-orientation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/exif-orientation-expected.png
index cf791fa6..421d50f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/exif-orientation-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/exif-orientation-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/exif-orientation-height-image-document-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/exif-orientation-height-image-document-expected.png
new file mode 100644
index 0000000..e2fc9cae
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/exif-orientation-height-image-document-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/exif-orientation-image-document-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/exif-orientation-image-document-expected.png
index 181028f7..9b89d38 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/exif-orientation-image-document-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/exif-orientation-image-document-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/gray-scale-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/gray-scale-jpeg-with-color-profile-expected.png
new file mode 100644
index 0000000..8caaa7bd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/gray-scale-jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png
index d4f7e79..9947e82 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png
index 0f4ff2a6..120c622 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png
index 2eeb5d0..17b62cf9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-in-positioned-container-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png
index cca3649..54b9fca 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
index 5e6d6ac..2ebf6b2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
index 7e3d20d..1751c4b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-outline-color-not-inherited-from-map-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png
index 9498a91..c77dc5fa 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-paint-root-offset-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png
index 0ad634a..b046dba 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-with-scale-transform-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-zero-outline-width-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-zero-outline-width-expected.png
index d2b8d51..51ccf93 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-zero-outline-width-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-zero-outline-width-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
index d052bbc..d4d0a98 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-focus-ring-zoom-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png
index 75afe18..c6223975 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-circle-focus-ring-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png
index 2c9e772..ed41a17 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png
index cc4da1a..232540fc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/jpeg-with-color-profile-expected.png
index dacadc04..8443216 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/jpeg-with-color-profile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/jpeg-yuv-progressive-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/jpeg-yuv-progressive-image-expected.png
new file mode 100644
index 0000000..fec0280a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/jpeg-yuv-progressive-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/motion-jpeg-single-frame-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/motion-jpeg-single-frame-expected.png
new file mode 100644
index 0000000..9dda35f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/motion-jpeg-single-frame-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/optimize-contrast-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/optimize-contrast-canvas-expected.png
new file mode 100644
index 0000000..c15e7eb2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/optimize-contrast-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/optimize-contrast-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/optimize-contrast-image-expected.png
new file mode 100644
index 0000000..c15e7eb2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/optimize-contrast-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/pixel-crack-image-background-webkit-transform-scale-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/pixel-crack-image-background-webkit-transform-scale-expected.png
index 97ac605..460e5d9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/pixel-crack-image-background-webkit-transform-scale-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/pixel-crack-image-background-webkit-transform-scale-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/png-suite/test-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/png-suite/test-expected.png
new file mode 100644
index 0000000..7eccc40
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/png-suite/test-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/png-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/png-with-color-profile-expected.png
index dacadc04..8443216 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/png-with-color-profile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/png-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-0px-images-quirk-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-0px-images-quirk-expected.png
index acc5324..7f290eb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-0px-images-quirk-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-0px-images-quirk-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-block-flow-images-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-block-flow-images-expected.png
index a661f82..41a9d19 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-block-flow-images-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-block-flow-images-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rgb-png-with-cmyk-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rgb-png-with-cmyk-color-profile-expected.png
new file mode 100644
index 0000000..8025909
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rgb-png-with-cmyk-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/sprite-no-bleed-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/sprite-no-bleed-expected.png
new file mode 100644
index 0000000..80de5a89
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/sprite-no-bleed-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/webp-color-profile-lossless-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/webp-color-profile-lossless-expected.png
new file mode 100644
index 0000000..920523b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/webp-color-profile-lossless-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/webp-color-profile-lossy-alpha-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/webp-color-profile-lossy-alpha-expected.png
new file mode 100644
index 0000000..ef294951
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/webp-color-profile-lossy-alpha-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/webp-color-profile-lossy-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/webp-color-profile-lossy-expected.png
new file mode 100644
index 0000000..b896e672
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/webp-color-profile-lossy-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/ycbcr-with-cmyk-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/ycbcr-with-cmyk-color-profile-expected.png
new file mode 100644
index 0000000..d7efc45
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/ycbcr-with-cmyk-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-arc-circumference-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-arc-circumference-expected.png
new file mode 100644
index 0000000..61f628a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-arc-circumference-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-arc-circumference-fill-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-arc-circumference-fill-expected.png
new file mode 100644
index 0000000..0ce8cd4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-arc-circumference-fill-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-expected.png
index d810784f..60043c2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-shadow-expected.png
index 24a9022..f9dbdb3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-shadow-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-shadow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-transformclip-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-transformclip-expected.png
new file mode 100644
index 0000000..dae93154
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-transformclip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-video-expected.png
index dc6b5f8..1311c4d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-video-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-video-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png
new file mode 100644
index 0000000..502b853
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-drawImage-antiAlias-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-drawImage-antiAlias-expected.png
new file mode 100644
index 0000000..408324c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-drawImage-antiAlias-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-drawImage-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-drawImage-video-expected.png
new file mode 100644
index 0000000..564b4dc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-drawImage-video-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-ellipse-circumference-fill-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-ellipse-circumference-fill-expected.png
new file mode 100644
index 0000000..4801274
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-ellipse-circumference-fill-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-imageSmoothingEnabled-patterns-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-imageSmoothingEnabled-patterns-expected.png
new file mode 100644
index 0000000..9f4d81b0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-imageSmoothingEnabled-patterns-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-incremental-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-incremental-repaint-expected.png
index 736ddc8..1b78a18 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-incremental-repaint-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-incremental-repaint-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-pattern-no-repeat-with-transformations-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-pattern-no-repeat-with-transformations-expected.png
new file mode 100644
index 0000000..d8fdd0c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-pattern-no-repeat-with-transformations-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-pattern-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-pattern-video-expected.png
index 71553edf..f31bb59 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-pattern-video-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-pattern-video-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-shadow-source-in-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-shadow-source-in-expected.png
index 233086c43..9f1f528a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-shadow-source-in-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-shadow-source-in-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-text-alignment-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-text-alignment-expected.png
index 6c38c2a..bc5c79f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-text-alignment-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-text-alignment-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-text-baseline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-text-baseline-expected.png
index 89cbb593..f8e9716 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-text-baseline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-text-baseline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-text-baseline-tiny-fonts-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-text-baseline-tiny-fonts-expected.png
index 1875c53f..cc18a7df 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-text-baseline-tiny-fonts-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-text-baseline-tiny-fonts-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-toDataURL-jpeg-maximum-quality-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-toDataURL-jpeg-maximum-quality-expected.png
index 46a7bff..be38e06 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-toDataURL-jpeg-maximum-quality-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-toDataURL-jpeg-maximum-quality-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-toDataURL-webp-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-toDataURL-webp-expected.png
new file mode 100644
index 0000000..159962c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-toDataURL-webp-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-transforms-during-path-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-transforms-during-path-expected.png
index 416fcc5..ed697ce 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-transforms-during-path-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-transforms-during-path-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-zero-length-lineCap-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-zero-length-lineCap-expected.png
new file mode 100644
index 0000000..adf0a6d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-zero-length-lineCap-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/fillrect_gradient-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/fillrect_gradient-expected.png
index 049947f..064078d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/fillrect_gradient-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/fillrect_gradient-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/image-object-in-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/image-object-in-canvas-expected.png
index 7bc4765..030291a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/image-object-in-canvas-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/image-object-in-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/pixelated-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/pixelated-expected.png
new file mode 100644
index 0000000..e1e0e2d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/pixelated-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/quadraticCurveTo-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/quadraticCurveTo-expected.png
index a962931..59111ac 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/quadraticCurveTo-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/quadraticCurveTo-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/webgl/pixelated-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/webgl/pixelated-expected.png
new file mode 100644
index 0000000..4c356a19
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/webgl/pixelated-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/webgl/webgl-composite-modes-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/webgl/webgl-composite-modes-expected.png
new file mode 100644
index 0000000..22c1698
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/webgl/webgl-composite-modes-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/webgl/webgl-composite-modes-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/webgl/webgl-composite-modes-repaint-expected.png
new file mode 100644
index 0000000..1ead635
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/webgl/webgl-composite-modes-repaint-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/webgl/webgl-composite-modes-tabswitching-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/webgl/webgl-composite-modes-tabswitching-expected.png
new file mode 100644
index 0000000..329a790
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/webgl/webgl-composite-modes-tabswitching-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/yuv-video-on-accelerated-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/yuv-video-on-accelerated-canvas-expected.png
index f0411d4..a23bd9d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/yuv-video-on-accelerated-canvas-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/yuv-video-on-accelerated-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/float/008-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/float/008-expected.png
new file mode 100644
index 0000000..54121bed
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/float/008-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/float/021-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/float/021-expected.png
index 821d7c4e..fa04624 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/float/021-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/float/021-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/104-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/104-expected.png
index e5a96215..25d3074 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/104-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/fast/block/margin-collapse/104-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/overflow/overflow-transform-perspective-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/overflow/overflow-transform-perspective-expected.png
index 799fdd2fb..9b31940b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/overflow/overflow-transform-perspective-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/layout_ng/overflow/overflow-transform-perspective-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/float_elements_in_series-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/float_elements_in_series-expected.png
index a6d4d61..f0c1277 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/float_elements_in_series-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/float_elements_in_series-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/padding_inline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/padding_inline-expected.png
index 1901a6c..4d33f7d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/padding_inline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/box_properties/padding_inline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/pseudo/firstline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/pseudo/firstline-expected.png
index a867f30b..8fb0e49 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/pseudo/firstline-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/pseudo/firstline-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/pseudo/pseudo_elements_in_selectors-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/pseudo/pseudo_elements_in_selectors-expected.png
index e780cc7..33e24d83 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/pseudo/pseudo_elements_in_selectors-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/pseudo/pseudo_elements_in_selectors-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/units/percentage_units-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/units/percentage_units-expected.png
index 5f2ae23..05f2895 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/units/percentage_units-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/css1/units/percentage_units-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/023-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/023-expected.png
index 1030ac3..a007f79 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/023-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/023-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/040-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/040-expected.png
index 4b9c6716..0ff5526 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/040-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/040-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-cell-expected.png
index 84513c6..a6ef896 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-column-collapsed-border-expected.png
index 4bd727e..6034610 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-column-group-expected.png
index 010ec78..05883dc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-expected.png
deleted file mode 100644
index 29c64ac15..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-row-collapsed-border-expected.png
index 707b7f0..3cb3102 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-row-expected.png
index 535f451..8aa6930 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-row-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_border-table-row-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_layers-hide-expected.png
index 4f8ea7b4..449a74d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_layers-hide-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_layers-hide-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_layers-show-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_layers-show-collapsed-border-expected.png
index 690b06a..59728f5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_layers-show-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_layers-show-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_layers-show-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_layers-show-expected.png
index 718169d..6fd0aba 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_layers-show-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_layers-show-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-column-group-expected.png
index 0bc70bc..8c39206 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-expected.png
index e18d8ac6..4008f02 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-row-collapsed-border-expected.png
index 93165f4..0e3a429 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-row-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-row-group-expected.png
index 97293ab7..61e56fc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-row-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_position-table-row-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-cell-expected.png
index 6d2f3e12..4996351 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-cell-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-cell-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-column-collapsed-border-expected.png
index 78bdac9..2c9ea75e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-column-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-column-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-column-group-expected.png
index aaeb391..43c8a66 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-expected.png
index 6f613657..d6976ec7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-row-collapsed-border-expected.png
index ca82511..bd65d9e7c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-row-collapsed-border-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/backgr_simple-table-row-collapsed-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/empty-cells-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/empty-cells-expected.png
index 8d98f0a..9af691d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/empty-cells-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/fast/table/empty-cells-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-expected.png
new file mode 100644
index 0000000..52b7c89
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-loading/http/tests/misc/object-embedding-svg-delayed-size-negotiation-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index 95cc3b8..c0d1ed9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.png
index f020e908..a7d8a8d2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.png
index c760087..6f1b9b4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering-expected.png
index 6881c87..21c7372e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering-expected.png
index 6f50ab8..f0f58639 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png
new file mode 100644
index 0000000..31ce3d9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-scrolling-with-clip-path-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-on-grandparent-composited-grandchild-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-on-grandparent-composited-grandchild-expected.png
new file mode 100644
index 0000000..2cee245
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-on-grandparent-composited-grandchild-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-on-parent-composited-grandchild-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-on-parent-composited-grandchild-expected.png
new file mode 100644
index 0000000..b60254a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-on-parent-composited-grandchild-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-on-two-ancestors-composited-grandchild-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-on-two-ancestors-composited-grandchild-expected.png
new file mode 100644
index 0000000..b9fac482
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-on-two-ancestors-composited-grandchild-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png
new file mode 100644
index 0000000..5fa2b0b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/border-radius-styles-with-composited-child-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/grandchild-composited-with-border-radius-ancestor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/grandchild-composited-with-border-radius-ancestor-expected.png
new file mode 100644
index 0000000..f38a1b2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/grandchild-composited-with-border-radius-ancestor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/grandchild-with-border-radius-ancestor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/grandchild-with-border-radius-ancestor-expected.png
new file mode 100644
index 0000000..f38a1b2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/grandchild-with-border-radius-ancestor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/mask-with-filter-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/mask-with-filter-expected.png
new file mode 100644
index 0000000..fff540df
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/mask-with-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-expected.png
new file mode 100644
index 0000000..df1e8d1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-with-intervening-clip-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-with-intervening-clip-expected.png
new file mode 100644
index 0000000..ce412b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-with-intervening-clip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-with-rotation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-with-rotation-expected.png
new file mode 100644
index 0000000..b474717
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-with-rotation-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png
index f5d9cd3..1e09c67 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.png
index f9d24e27..c98959e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-overflow-expected.png
new file mode 100644
index 0000000..c1c4d7ff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-overflow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png
index 5d5a44a..8916901 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/siblings-composited-with-border-radius-ancestor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/siblings-composited-with-border-radius-ancestor-expected.png
new file mode 100644
index 0000000..f38a1b2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/siblings-composited-with-border-radius-ancestor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/siblings-composited-with-border-radius-ancestor-one-clipped-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/siblings-composited-with-border-radius-ancestor-one-clipped-expected.png
new file mode 100644
index 0000000..00fa2b9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/siblings-composited-with-border-radius-ancestor-one-clipped-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/siblings-with-border-radius-ancestor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/siblings-with-border-radius-ancestor-expected.png
new file mode 100644
index 0000000..ff3a0270
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/siblings-with-border-radius-ancestor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.png
new file mode 100644
index 0000000..ba320740
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbars-on-positioned-content-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbars-on-positioned-content-expected.png
index d559c37..1f5c550 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbars-on-positioned-content-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/scrollbars/scrollbars-on-positioned-content-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
index 3fa71a05..1fee21c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor150/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor200/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor200/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
index 3669d2a..1864cbd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor200/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor200/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
index 3669d2a..1864cbd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor200withzoom/fast/hidpi/static/validation-bubble-appearance-hidpi-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/animations/rotate-transform-equivalent-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/animations/rotate-transform-equivalent-expected.png
index 0a3a04a..867a086 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/animations/rotate-transform-equivalent-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/animations/rotate-transform-equivalent-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/animations/skew-notsequential-compositor-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/animations/skew-notsequential-compositor-expected.png
new file mode 100644
index 0000000..7fdff4b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/animations/skew-notsequential-compositor-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/visibility/visibility-image-layers-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/visibility/visibility-image-layers-expected.png
new file mode 100644
index 0000000..365ad04
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/visibility/visibility-image-layers-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/visibility/visibility-simple-video-layer-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/visibility/visibility-simple-video-layer-expected.png
new file mode 100644
index 0000000..3d2a91a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/visibility/visibility-simple-video-layer-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/webgl/webgl-reflection-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/webgl/webgl-reflection-expected.png
index 5b050023..f90d16e5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/webgl/webgl-reflection-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/webgl/webgl-reflection-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/return-from-printing-mode-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/return-from-printing-mode-expected.png
index a634b4002..773e4cf 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/return-from-printing-mode-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/return-from-printing-mode-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/transitions/opacity-transform-transitions-inside-iframe-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/transitions/opacity-transform-transitions-inside-iframe-expected.png
new file mode 100644
index 0000000..70fc03d6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/transitions/opacity-transform-transitions-inside-iframe-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/transitions/opacity-transition-zindex-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/transitions/opacity-transition-zindex-expected.png
new file mode 100644
index 0000000..43c5d9c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/transitions/opacity-transition-zindex-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5-expected.txt
deleted file mode 100644
index 7df452b1..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Test that loading a graph in which a module is already errored results in that module's error. assert_array_equals: property 2, expected object "SyntaxError: The requested module does not provide an export named 'something'" but got object "SyntaxError: The requested module does not provide an export named 'something'"
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5-expected.txt
deleted file mode 100644
index 7df452b1..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Test that loading a graph in which a module is already errored results in that module's error. assert_array_equals: property 2, expected object "SyntaxError: The requested module does not provide an export named 'something'" but got object "SyntaxError: The requested module does not provide an export named 'something'"
-Harness: the test ran to completion.
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/culling/filter-occlusion-blur-expected.png b/third_party/WebKit/LayoutTests/platform/win/compositing/culling/filter-occlusion-blur-expected.png
new file mode 100644
index 0000000..46428a3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/culling/filter-occlusion-blur-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-blur-hw-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-blur-hw-expected.png
new file mode 100644
index 0000000..c0ab7c9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-blur-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/css3/filters/effect-brightness-clamping-hw-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-brightness-clamping-hw-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/css3/filters/effect-brightness-clamping-hw-expected.png
rename to third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-brightness-clamping-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/css3/filters/effect-combined-hw-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-combined-hw-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/css3/filters/effect-combined-hw-expected.png
rename to third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-combined-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/css3/filters/effect-drop-shadow-hw-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-drop-shadow-hw-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/css3/filters/effect-drop-shadow-hw-expected.png
rename to third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-drop-shadow-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/filters/filter-repaint-composited-fallback-crash-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/filters/filter-repaint-composited-fallback-crash-expected.png
new file mode 100644
index 0000000..85fde79
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/css3/filters/filter-repaint-composited-fallback-crash-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/filters/filter-repaint-composited-fallback-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/filters/filter-repaint-composited-fallback-expected.png
new file mode 100644
index 0000000..85fde79
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/css3/filters/filter-repaint-composited-fallback-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-filter-expected.png
new file mode 100644
index 0000000..3a67f62
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png
rename to third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
new file mode 100644
index 0000000..fffa76b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png
new file mode 100644
index 0000000..748d85e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
index fffa76b..589b7dd 100644
--- a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
+++ b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/WebKit/LayoutTests/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png
deleted file mode 100644
index 89065d6..0000000
--- a/third_party/WebKit/LayoutTests/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8AbstractEventListener.cpp b/third_party/WebKit/Source/bindings/core/v8/V8AbstractEventListener.cpp
index dca66e2..a9cf21a 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8AbstractEventListener.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8AbstractEventListener.cpp
@@ -52,7 +52,7 @@
     : EventListener(kJSEventListenerType),
       listener_(nullptr),
       is_attribute_(is_attribute),
-      world_(world),
+      world_(&world),
       isolate_(isolate),
       worker_global_scope_(nullptr) {
   if (IsMainThread())
diff --git a/third_party/WebKit/Source/core/dom/ModulatorImplBase.cpp b/third_party/WebKit/Source/core/dom/ModulatorImplBase.cpp
index 160518a..6fbe2121 100644
--- a/third_party/WebKit/Source/core/dom/ModulatorImplBase.cpp
+++ b/third_party/WebKit/Source/core/dom/ModulatorImplBase.cpp
@@ -4,6 +4,7 @@
 
 #include "core/dom/ModulatorImplBase.h"
 
+#include "core/dom/DynamicModuleResolver.h"
 #include "core/dom/ExecutionContext.h"
 #include "core/dom/ModuleMap.h"
 #include "core/dom/ModuleScript.h"
@@ -29,7 +30,8 @@
       tree_linker_registry_(ModuleTreeLinkerRegistry::Create()),
       script_module_resolver_(ScriptModuleResolverImpl::Create(
           this,
-          ExecutionContext::From(script_state_.Get()))) {
+          ExecutionContext::From(script_state_.Get()))),
+      dynamic_module_resolver_(DynamicModuleResolver::Create(this)) {
   DCHECK(script_state_);
   DCHECK(task_runner_);
 }
@@ -104,11 +106,13 @@
   return script_state_->ContextIsValid();
 }
 
-void ModulatorImplBase::ResolveDynamically(const String& specifier,
-                                           const String& referrer_url,
-                                           const ReferrerScriptInfo&,
-                                           ScriptPromiseResolver*) {
-  NOTIMPLEMENTED();
+void ModulatorImplBase::ResolveDynamically(
+    const String& specifier,
+    const String& referrer_url,
+    const ReferrerScriptInfo& referrer_info,
+    ScriptPromiseResolver* resolver) {
+  dynamic_module_resolver_->ResolveDynamically(specifier, referrer_url,
+                                               referrer_info, resolver);
 }
 
 ScriptModule ModulatorImplBase::CompileModule(
@@ -246,6 +250,7 @@
   visitor->Trace(loader_registry_);
   visitor->Trace(tree_linker_registry_);
   visitor->Trace(script_module_resolver_);
+  visitor->Trace(dynamic_module_resolver_);
 }
 
 DEFINE_TRACE_WRAPPERS(ModulatorImplBase) {
diff --git a/third_party/WebKit/Source/core/dom/ModulatorImplBase.h b/third_party/WebKit/Source/core/dom/ModulatorImplBase.h
index 8070b18..1b873445 100644
--- a/third_party/WebKit/Source/core/dom/ModulatorImplBase.h
+++ b/third_party/WebKit/Source/core/dom/ModulatorImplBase.h
@@ -14,6 +14,7 @@
 
 namespace blink {
 
+class DynamicModuleResolver;
 class ExecutionContext;
 class ModuleMap;
 class ModuleScriptLoaderRegistry;
@@ -82,6 +83,7 @@
   Member<ModuleScriptLoaderRegistry> loader_registry_;
   TraceWrapperMember<ModuleTreeLinkerRegistry> tree_linker_registry_;
   Member<ScriptModuleResolver> script_module_resolver_;
+  Member<DynamicModuleResolver> dynamic_module_resolver_;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/events/CustomEvent.cpp b/third_party/WebKit/Source/core/dom/events/CustomEvent.cpp
index 97c1d2e..5fd80896 100644
--- a/third_party/WebKit/Source/core/dom/events/CustomEvent.cpp
+++ b/third_party/WebKit/Source/core/dom/events/CustomEvent.cpp
@@ -36,7 +36,7 @@
                          const AtomicString& type,
                          const CustomEventInit& initializer)
     : Event(type, initializer), detail_(this) {
-  world_ = RefPtr<DOMWrapperWorld>(script_state->World());
+  world_ = WrapRefPtr(&script_state->World());
   if (initializer.hasDetail()) {
     detail_.Set(initializer.detail().GetIsolate(),
                 initializer.detail().V8Value());
@@ -51,7 +51,7 @@
                                   bool cancelable,
                                   const ScriptValue& script_value) {
   initEvent(type, can_bubble, cancelable);
-  world_ = RefPtr<DOMWrapperWorld>(script_state->World());
+  world_ = WrapRefPtr(&script_state->World());
   if (!IsBeingDispatched() && !script_value.IsEmpty())
     detail_.Set(script_value.GetIsolate(), script_value.V8Value());
 }
diff --git a/third_party/WebKit/Source/core/events/ErrorEvent.cpp b/third_party/WebKit/Source/core/events/ErrorEvent.cpp
index b27b021e..8737109 100644
--- a/third_party/WebKit/Source/core/events/ErrorEvent.cpp
+++ b/third_party/WebKit/Source/core/events/ErrorEvent.cpp
@@ -41,7 +41,7 @@
     : sanitized_message_(),
       location_(SourceLocation::Create(String(), 0, 0, nullptr)),
       error_(this),
-      world_(DOMWrapperWorld::Current(v8::Isolate::GetCurrent())) {}
+      world_(&DOMWrapperWorld::Current(v8::Isolate::GetCurrent())) {}
 
 ErrorEvent::ErrorEvent(ScriptState* script_state,
                        const AtomicString& type,
@@ -49,7 +49,7 @@
     : Event(type, initializer),
       sanitized_message_(),
       error_(this),
-      world_(script_state->World()) {
+      world_(&script_state->World()) {
   if (initializer.hasMessage())
     sanitized_message_ = initializer.message();
   location_ = SourceLocation::Create(
diff --git a/third_party/WebKit/Source/core/events/PopStateEvent.cpp b/third_party/WebKit/Source/core/events/PopStateEvent.cpp
index d4e0ef5..d329df8 100644
--- a/third_party/WebKit/Source/core/events/PopStateEvent.cpp
+++ b/third_party/WebKit/Source/core/events/PopStateEvent.cpp
@@ -39,7 +39,7 @@
                              const PopStateEventInit& initializer)
     : Event(type, initializer), state_(this), history_(nullptr) {
   if (initializer.hasState()) {
-    world_ = RefPtr<DOMWrapperWorld>(script_state->World());
+    world_ = WrapRefPtr(&script_state->World());
     state_.Set(initializer.state().GetIsolate(), initializer.state().V8Value());
   }
 }
diff --git a/third_party/WebKit/Source/core/events/PromiseRejectionEvent.cpp b/third_party/WebKit/Source/core/events/PromiseRejectionEvent.cpp
index 253046d..de4e73ad 100644
--- a/third_party/WebKit/Source/core/events/PromiseRejectionEvent.cpp
+++ b/third_party/WebKit/Source/core/events/PromiseRejectionEvent.cpp
@@ -13,7 +13,7 @@
     const AtomicString& type,
     const PromiseRejectionEventInit& initializer)
     : Event(type, initializer),
-      world_(state->World()),
+      world_(&state->World()),
       promise_(this),
       reason_(this) {
   DCHECK(initializer.hasPromise());
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp b/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp
index 120e5204..1714bd6 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp
@@ -62,8 +62,8 @@
                                   node,
                                   sample_rate),
       buffer_(nullptr),
-      playback_rate_(playback_rate),
-      detune_(detune),
+      playback_rate_(&playback_rate),
+      detune_(&detune),
       is_looping_(false),
       did_set_looping_(false),
       loop_start_(0),
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioSummingJunction.cpp b/third_party/WebKit/Source/modules/webaudio/AudioSummingJunction.cpp
index 5162fe9..86b4c9c 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioSummingJunction.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioSummingJunction.cpp
@@ -30,7 +30,7 @@
 namespace blink {
 
 AudioSummingJunction::AudioSummingJunction(DeferredTaskHandler& handler)
-    : deferred_task_handler_(handler), rendering_state_need_updating_(false) {}
+    : deferred_task_handler_(&handler), rendering_state_need_updating_(false) {}
 
 AudioSummingJunction::~AudioSummingJunction() {
   GetDeferredTaskHandler().RemoveMarkedSummingJunction(this);
diff --git a/third_party/WebKit/Source/modules/webaudio/BiquadProcessor.cpp b/third_party/WebKit/Source/modules/webaudio/BiquadProcessor.cpp
index 628289c..e567721 100644
--- a/third_party/WebKit/Source/modules/webaudio/BiquadProcessor.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/BiquadProcessor.cpp
@@ -39,10 +39,10 @@
                                  AudioParamHandler& detune)
     : AudioDSPKernelProcessor(sample_rate, number_of_channels),
       type_(kLowPass),
-      parameter1_(frequency),
-      parameter2_(q),
-      parameter3_(gain),
-      parameter4_(detune),
+      parameter1_(&frequency),
+      parameter2_(&q),
+      parameter3_(&gain),
+      parameter4_(&detune),
       filter_coefficients_dirty_(true),
       has_sample_accurate_values_(false) {}
 
diff --git a/third_party/WebKit/Source/modules/webaudio/ConstantSourceNode.cpp b/third_party/WebKit/Source/modules/webaudio/ConstantSourceNode.cpp
index 34352f2..e85d7f68 100644
--- a/third_party/WebKit/Source/modules/webaudio/ConstantSourceNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/ConstantSourceNode.cpp
@@ -20,7 +20,7 @@
                                              float sample_rate,
                                              AudioParamHandler& offset)
     : AudioScheduledSourceHandler(kNodeTypeConstantSource, node, sample_rate),
-      offset_(offset),
+      offset_(&offset),
       sample_accurate_values_(AudioUtilities::kRenderQuantumFrames) {
   // A ConstantSource is always mono.
   AddOutput(1);
diff --git a/third_party/WebKit/Source/modules/webaudio/DelayProcessor.cpp b/third_party/WebKit/Source/modules/webaudio/DelayProcessor.cpp
index 93058da..52629b52 100644
--- a/third_party/WebKit/Source/modules/webaudio/DelayProcessor.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/DelayProcessor.cpp
@@ -36,7 +36,7 @@
                                AudioParamHandler& delay_time,
                                double max_delay_time)
     : AudioDSPKernelProcessor(sample_rate, number_of_channels),
-      delay_time_(delay_time),
+      delay_time_(&delay_time),
       max_delay_time_(max_delay_time) {}
 
 DelayProcessor::~DelayProcessor() {
diff --git a/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNode.cpp b/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNode.cpp
index d647e6c..f27c549 100644
--- a/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNode.cpp
@@ -47,12 +47,12 @@
     AudioParamHandler& attack,
     AudioParamHandler& release)
     : AudioHandler(kNodeTypeDynamicsCompressor, node, sample_rate),
-      threshold_(threshold),
-      knee_(knee),
-      ratio_(ratio),
+      threshold_(&threshold),
+      knee_(&knee),
+      ratio_(&ratio),
       reduction_(0),
-      attack_(attack),
-      release_(release) {
+      attack_(&attack),
+      release_(&release) {
   AddInput();
   AddOutput(defaultNumberOfOutputChannels);
   Initialize();
diff --git a/third_party/WebKit/Source/modules/webaudio/GainNode.cpp b/third_party/WebKit/Source/modules/webaudio/GainNode.cpp
index c7f3f3d..89886ca 100644
--- a/third_party/WebKit/Source/modules/webaudio/GainNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/GainNode.cpp
@@ -37,7 +37,7 @@
                          AudioParamHandler& gain)
     : AudioHandler(kNodeTypeGain, node, sample_rate),
       last_gain_(1.0),
-      gain_(gain),
+      gain_(&gain),
       sample_accurate_gain_values_(
           AudioUtilities::kRenderQuantumFrames)  // FIXME: can probably
                                                  // share temp buffer
diff --git a/third_party/WebKit/Source/modules/webaudio/OscillatorNode.cpp b/third_party/WebKit/Source/modules/webaudio/OscillatorNode.cpp
index e7dce5e5..d01e5b93 100644
--- a/third_party/WebKit/Source/modules/webaudio/OscillatorNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/OscillatorNode.cpp
@@ -46,8 +46,8 @@
                                      AudioParamHandler& frequency,
                                      AudioParamHandler& detune)
     : AudioScheduledSourceHandler(kNodeTypeOscillator, node, sample_rate),
-      frequency_(frequency),
-      detune_(detune),
+      frequency_(&frequency),
+      detune_(&detune),
       first_render_(true),
       virtual_read_index_(0),
       phase_increments_(AudioUtilities::kRenderQuantumFrames),
diff --git a/third_party/WebKit/Source/modules/webaudio/PannerNode.cpp b/third_party/WebKit/Source/modules/webaudio/PannerNode.cpp
index 0501046..4859c43 100644
--- a/third_party/WebKit/Source/modules/webaudio/PannerNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/PannerNode.cpp
@@ -61,12 +61,12 @@
       cached_azimuth_(0),
       cached_elevation_(0),
       cached_distance_cone_gain_(1.0f),
-      position_x_(position_x),
-      position_y_(position_y),
-      position_z_(position_z),
-      orientation_x_(orientation_x),
-      orientation_y_(orientation_y),
-      orientation_z_(orientation_z) {
+      position_x_(&position_x),
+      position_y_(&position_y),
+      position_z_(&position_z),
+      orientation_x_(&orientation_x),
+      orientation_y_(&orientation_y),
+      orientation_z_(&orientation_z) {
   AddInput();
   AddOutput(2);
 
diff --git a/third_party/WebKit/Source/modules/webaudio/StereoPannerNode.cpp b/third_party/WebKit/Source/modules/webaudio/StereoPannerNode.cpp
index 9c7f2fbb..d992528 100644
--- a/third_party/WebKit/Source/modules/webaudio/StereoPannerNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/StereoPannerNode.cpp
@@ -20,7 +20,7 @@
                                          float sample_rate,
                                          AudioParamHandler& pan)
     : AudioHandler(kNodeTypeStereoPanner, node, sample_rate),
-      pan_(pan),
+      pan_(&pan),
       sample_accurate_pan_values_(AudioUtilities::kRenderQuantumFrames) {
   AddInput();
   AddOutput(2);
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIPort.cpp b/third_party/WebKit/Source/modules/webmidi/MIDIPort.cpp
index 8a617f731..29aef64 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIPort.cpp
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIPort.cpp
@@ -195,6 +195,11 @@
 }
 
 void MIDIPort::OpenAsynchronously(ScriptPromiseResolver* resolver) {
+  // The frame should exist, but it may be already detached and the execution
+  // context may be lost here.
+  if (!GetExecutionContext())
+    return;
+
   UseCounter::Count(*ToDocument(GetExecutionContext()),
                     WebFeature::kMIDIPortOpen);
   DCHECK_NE(0u, running_open_count_);
@@ -219,6 +224,11 @@
 }
 
 void MIDIPort::CloseAsynchronously(ScriptPromiseResolver* resolver) {
+  // The frame should exist, but it may be already detached and the execution
+  // context may be lost here.
+  if (!GetExecutionContext())
+    return;
+
   DCHECK(resolver);
   // TODO(toyoshim): Do clear() operation on MIDIOutput.
   // TODO(toyoshim): Add blink API to perform a real close operation.
diff --git a/third_party/WebKit/Source/platform/exported/WebCORSPreflightResultCache.cpp b/third_party/WebKit/Source/platform/exported/WebCORSPreflightResultCache.cpp
index 43d894c..86220d0 100644
--- a/third_party/WebKit/Source/platform/exported/WebCORSPreflightResultCache.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebCORSPreflightResultCache.cpp
@@ -185,6 +185,9 @@
 bool WebCORSPreflightResultCacheItem::AllowsCrossOriginHeaders(
     const WebHTTPHeaderMap& request_headers,
     WebString& error_description) const {
+  if (!credentials_ && headers_.find("*") != headers_.end())
+    return true;
+
   for (const auto& header : request_headers.GetHTTPHeaderMap()) {
     if (headers_.find(header.key.Ascii().data()) == headers_.end() &&
         !FetchUtils::IsCORSSafelistedHeader(header.key, header.value) &&
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadSchedulerTest.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadSchedulerTest.cpp
index 26762098..9fff5b4d 100644
--- a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadSchedulerTest.cpp
+++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoadSchedulerTest.cpp
@@ -33,17 +33,13 @@
 class ResourceLoadSchedulerTest : public ::testing::Test {
  public:
   void SetUp() override {
-    // TODO(toyoshim): blink_platform_unittests should enable experimental
-    // runtime features by default.
-    DCHECK(!RuntimeEnabledFeatures::ResourceLoadSchedulerEnabled());
-    RuntimeEnabledFeatures::SetResourceLoadSchedulerEnabled(true);
+    DCHECK(RuntimeEnabledFeatures::ResourceLoadSchedulerEnabled());
     scheduler_ = ResourceLoadScheduler::Create(
         MockFetchContext::Create(MockFetchContext::kShouldNotLoadNewResource));
     scheduler()->SetOutstandingLimitForTesting(1);
   }
   void TearDown() override {
     scheduler()->Shutdown();
-    RuntimeEnabledFeatures::SetResourceLoadSchedulerEnabled(false);
   }
 
   ResourceLoadScheduler* scheduler() { return scheduler_; }
diff --git a/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.cpp b/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.cpp
index 4f0493f5..8149613 100644
--- a/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.cpp
+++ b/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.cpp
@@ -63,6 +63,7 @@
 #include "public/platform/WebContentLayer.h"
 #include "public/platform/WebExternalTextureLayer.h"
 #include "public/platform/WebImageLayer.h"
+#include "public/platform/WebRuntimeFeatures.h"
 #include "public/platform/WebScrollbarLayer.h"
 
 namespace blink {
@@ -370,6 +371,8 @@
 
   InitializePlatformLanguage();
   FontFamilyNames::init();
+  WebRuntimeFeatures::EnableExperimentalFeatures(true);
+  WebRuntimeFeatures::EnableTestOnlyFeatures(true);
 }
 
 ScopedUnittestsEnvironmentSetup::~ScopedUnittestsEnvironmentSetup() {}
diff --git a/third_party/WebKit/Source/platform/wtf/RefPtr.h b/third_party/WebKit/Source/platform/wtf/RefPtr.h
index 980b0ed..8b18772e 100644
--- a/third_party/WebKit/Source/platform/wtf/RefPtr.h
+++ b/third_party/WebKit/Source/platform/wtf/RefPtr.h
@@ -70,7 +70,6 @@
   ALWAYS_INLINE RefPtr() : ptr_(nullptr) {}
   ALWAYS_INLINE RefPtr(std::nullptr_t) : ptr_(nullptr) {}
   ALWAYS_INLINE RefPtr(T* ptr) : ptr_(ptr) { RefIfNotNull(ptr); }
-  ALWAYS_INLINE explicit RefPtr(T& ref) : ptr_(&ref) { ptr_->Ref(); }
   ALWAYS_INLINE RefPtr(const RefPtr& o) : ptr_(o.ptr_) { RefIfNotNull(ptr_); }
   template <typename U>
   RefPtr(const RefPtr<U>& o, EnsurePtrConvertibleArgDecl(U, T))
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/wptserve.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/wptserve.py
index 776171c..8d0d378 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/wptserve.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/wptserve.py
@@ -40,9 +40,9 @@
         path_to_wpt_config = fs.join(path_to_wpt_support, 'wpt.config.json')
         path_to_wpt_tests = fs.abspath(fs.join(self._port_obj.layout_tests_dir(), 'external', 'wpt'))
         path_to_ws_handlers = fs.join(path_to_wpt_tests, 'websockets', 'handlers')
-        serve_script = fs.join(path_to_wpt_root, 'serve')
+        wpt_script = fs.join(path_to_wpt_root, 'wpt')
         start_cmd = [self._port_obj.host.executable,
-                     '-u', serve_script,
+                     '-u', wpt_script, 'serve',
                      '--config', path_to_wpt_config,
                      '--doc_root', path_to_wpt_tests]
 
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/wptserve_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/wptserve_unittest.py
index ad3c736..62233f82 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/wptserve_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/servers/wptserve_unittest.py
@@ -22,7 +22,8 @@
             [
                 'python',
                 '-u',
-                '/mock-checkout/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/serve',
+                '/mock-checkout/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/wpt',
+                'serve',
                 '--config',
                 '/mock-checkout/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt.config.json',
                 '--doc_root',
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/README.chromium b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/README.chromium
index 7877c8e..3f6152b 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/README.chromium
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/README.chromium
@@ -51,9 +51,9 @@
 Name: web-platform-tests - Test Suites for Web Platform specifications
 Short Name: wpt
 URL: https://github.com/w3c/web-platform-tests/
-Version: 32aa301b33136f71b1e15594f07ea5345a6305db
+Version: 53008fece70040f1886d2ba5ff92a97eed1e4037
 License: LICENSES FOR W3C TEST SUITES (http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html)
-License File: wpt/wpt/LICENSE
+License File: wpt/wpt/LICENSE.md
 Security Critical: no
 Description: This includes code for the manifest tool, lint tool, and wptserve.
     Used to run all supported web-platform-tests as part of Blink
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/WPTWhiteList b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/WPTWhiteList
index bece23fa..73c8fd4 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/WPTWhiteList
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/WPTWhiteList
@@ -1,15 +1,18 @@
 ./.gitignore
-./__init__.py
-./config.default.json
 ./CONTRIBUTING.md
 ./LICENSE.md
-./lint
-./manifest
-./serve
+./config.default.json
 ./serve.py
+./wpt
+./wpt.py
+./tools
 ./tools/__init__.py
+./tools/gitignore
 ./tools/gitignore/__init__.py
 ./tools/gitignore/gitignore.py
+./tools/html5lib
+./tools/html5lib/LICENSE
+./tools/html5lib/README.rst
 ./tools/html5lib/html5lib
 ./tools/html5lib/html5lib/__init__.py
 ./tools/html5lib/html5lib/constants.py
@@ -53,38 +56,57 @@
 ./tools/html5lib/html5lib/trie/datrie.py
 ./tools/html5lib/html5lib/trie/py.py
 ./tools/html5lib/html5lib/utils.py
-./tools/html5lib/LICENSE
-./tools/html5lib/README.rst
-./tools/LICENSE
+./tools/lint
 ./tools/lint/__init__.py
+./tools/lint/commands.json
 ./tools/lint/fnmatch.py
 ./tools/lint/lint.py
 ./tools/localpaths.py
+./tools/manifest
+./tools/manifest/XMLParser.py
 ./tools/manifest/__init__.py
+./tools/manifest/catalog
 ./tools/manifest/catalog/xhtml.dtd
+./tools/manifest/commands.json
 ./tools/manifest/item.py
 ./tools/manifest/log.py
 ./tools/manifest/manifest.py
 ./tools/manifest/sourcefile.py
-./tools/manifest/tests
 ./tools/manifest/update.py
 ./tools/manifest/utils.py
 ./tools/manifest/vcs.py
-./tools/manifest/XMLParser.py
+./tools/serve
 ./tools/serve/__init__.py
+./tools/serve/commands.json
 ./tools/serve/serve.py
+./tools/six
 ./tools/six/CHANGES
 ./tools/six/CONTRIBUTORS
 ./tools/six/LICENSE
 ./tools/six/README
 ./tools/six/six.py
+./tools/sslutils
 ./tools/sslutils/__init__.py
 ./tools/sslutils/base.py
 ./tools/sslutils/openssl.py
 ./tools/sslutils/pregenerated.py
-./tools/wptserve/.gitignore
+./tools/wpt
+./tools/wpt/__init__.py
+./tools/wpt/browser.py
+./tools/wpt/commands.json
+./tools/wpt/install.py
+./tools/wpt/markdown.py
+./tools/wpt/paths
+./tools/wpt/run.py
+./tools/wpt/stability.py
+./tools/wpt/testfiles.py
+./tools/wpt/utils.py
+./tools/wpt/virtualenv.py
+./tools/wpt/wpt.py
+./tools/wptserve
 ./tools/wptserve/LICENSE
 ./tools/wptserve/README.md
+./tools/wptserve/wptserve
 ./tools/wptserve/wptserve/__init__.py
 ./tools/wptserve/wptserve/constants.py
 ./tools/wptserve/wptserve/handlers.py
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/checkout.sh b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/checkout.sh
index 10d57ba..fc763e8 100755
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/checkout.sh
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/checkout.sh
@@ -9,7 +9,7 @@
 
 TARGET_DIR=$DIR/wpt
 REMOTE_REPO="https://chromium.googlesource.com/external/w3c/web-platform-tests.git"
-WPT_HEAD=32aa301b33136f71b1e15594f07ea5345a6305db
+WPT_HEAD=53008fece70040f1886d2ba5ff92a97eed1e4037
 
 function clone {
   # Remove existing repo if already exists.
@@ -19,6 +19,11 @@
   git clone $REMOTE_REPO $TARGET_DIR
   cd $TARGET_DIR && git checkout $WPT_HEAD
   echo "WPTHead: " `git rev-parse HEAD`
+
+  # Apply local changes.
+  cd $DIR && git apply chromium.patch
+  # Chromium presubmit requires scripts with shebang to be executable.
+  chmod 755 $TARGET_DIR/tools/manifest/update.py
 }
 
 function reduce {
@@ -39,7 +44,4 @@
   $action
 done
 
-# Chromium presubmit requires scripts with shebang to be executable.
-chmod 755 $TARGET_DIR/tools/manifest/update.py
-
 # TODO(burnik): Handle the SSL certs and other configuration.
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/chromium.patch b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/chromium.patch
new file mode 100644
index 0000000..9ad1c2c
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/chromium.patch
@@ -0,0 +1,43 @@
+diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/lint/lint.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/lint/lint.py
+--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/lint/lint.py
++++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/lint/lint.py
+@@ -725,6 +725,7 @@ def create_parser():
+                         help="Run CSS testsuite specific lints")
+     parser.add_argument("--repo-root", help="The WPT directory. Use this"
+                         "option if the lint script exists outside the repository")
++    parser.add_argument("--ignore-glob", help="Additional file glob to ignore.")
+     parser.add_argument("--all", action="store_true", help="If no paths are passed, try to lint the whole "
+                         "working directory, not just files that changed")
+     return parser
+@@ -746,16 +747,21 @@ def main(**kwargs):
+ 
+     paths = lint_paths(kwargs, repo_root)
+ 
+-    return lint(repo_root, paths, output_format, kwargs.get("css_mode", False))
++    ignore_glob = kwargs.get("ignore_glob")
+ 
++    return lint(repo_root, paths, output_format, kwargs.get("css_mode", False), ignore_glob)
+ 
+-def lint(repo_root, paths, output_format, css_mode):
++
++def lint(repo_root, paths, output_format, css_mode, ignore_glob):
+     error_count = defaultdict(int)
+     last = None
+ 
+     with open(os.path.join(repo_root, "lint.whitelist")) as f:
+         whitelist, ignored_files = parse_whitelist(f)
+ 
++    if ignore_glob:
++        ignored_files.add(ignore_glob)
++
+     output_errors = {"json": output_errors_json,
+                      "markdown": output_errors_markdown,
+                      "normal": output_errors_text}[output_format]
+diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/paths b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/paths
+--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/paths
++++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/paths
+@@ -1,4 +1,3 @@
+-tools/ci/
+ tools/lint/
+ tools/manifest/
+ tools/serve/
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/.gitignore b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/.gitignore
index e92e080..ad1e88e 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/.gitignore
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/.gitignore
@@ -15,3 +15,4 @@
 .DS_Store
 *.rej
 _venv
+webdriver/.cache
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/config.default.json b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/config.default.json
index 47ad74b..a55b17c 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/config.default.json
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/config.default.json
@@ -9,7 +9,7 @@
  "check_subdomains": true,
  "log_level":"debug",
  "bind_hostname": true,
- "ssl": {"type": "openssl",
+ "ssl": {"type": "pregenerated",
          "encrypt_after_connect": false,
          "openssl": {
              "openssl_binary": "openssl",
@@ -18,8 +18,8 @@
              "base_conf_path": null
          },
          "pregenerated": {
-             "host_key_path": null,
-             "host_cert_path": null
+             "host_key_path": "tools/certs/web-platform.test.key",
+             "host_cert_path": "tools/certs/web-platform.test.pem"
          },
          "none": {}
         },
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/lint b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/lint
deleted file mode 100755
index 388db4f7..0000000
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/lint
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-import sys
-
-try:
-    from tools.lint import lint
-except ImportError:
-    print("tools.lint not found.")
-    sys.exit(2)
-
-args = lint.parse_args()
-sys.exit(0 if lint.main(**vars(args)) == 0 else 1)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/manifest b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/manifest
deleted file mode 100755
index edebae6..0000000
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/manifest
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env python
-import os
-import sys
-
-from tools.manifest import update
-
-update.main(default_tests_root=
-            os.path.abspath(os.path.dirname(__file__)))
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/serve b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/serve
deleted file mode 100755
index 51761b0..0000000
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/serve
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/env python
-import serve
-
-if __name__ == "__main__":
-    serve.main()
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/lint/commands.json b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/lint/commands.json
new file mode 100644
index 0000000..a8e9844f
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/lint/commands.json
@@ -0,0 +1,3 @@
+{"lint":
+ {"path": "lint.py", "script": "main", "parser": "create_parser", "help": "Run the lint",
+  "virtualenv": false}}
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/lint/lint.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/lint/lint.py
index 1871b12..1381fa25 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/lint/lint.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/lint/lint.py
@@ -12,9 +12,10 @@
 
 from collections import defaultdict
 
-from .. import localpaths
 from . import fnmatch
+from .. import localpaths
 from ..gitignore.gitignore import PathFilter
+from ..wpt import testfiles
 
 from manifest.sourcefile import SourceFile, js_meta_re, python_meta_re
 from six import binary_type, iteritems, itervalues
@@ -126,6 +127,13 @@
     return []
 
 
+def check_ahem_copy(repo_root, path, css_mode):
+    lpath = path.lower()
+    if "ahem" in lpath and lpath.endswith(".ttf"):
+        return [("AHEM COPY", "Don't add extra copies of Ahem, use /fonts/Ahem.ttf", path, None)]
+    return []
+
+
 drafts_csswg_re = re.compile(r"https?\:\/\/drafts\.csswg\.org\/([^/?#]+)")
 w3c_tr_re = re.compile(r"https?\:\/\/www\.w3c?\.org\/TR\/([^/?#]+)")
 w3c_dev_re = re.compile(r"https?\:\/\/dev\.w3c?\.org\/[^/?#]+\/([^/?#]+)")
@@ -335,6 +343,12 @@
     file_extensions = [".html", ".htm", ".js", ".xht", ".xhtml", ".svg"]
     description = "Console logging API used"
 
+class GenerateTestsRegexp(Regexp):
+    pattern = b"generate_tests\s*\("
+    error = "GENERATE_TESTS"
+    file_extensions = [".html", ".htm", ".js", ".xht", ".xhtml", ".svg"]
+    description = "generate_tests used"
+
 class PrintRegexp(Regexp):
     pattern = b"print(?:\s|\s*\()"
     error = "PRINT STATEMENT"
@@ -349,6 +363,7 @@
             W3CTestOrgRegexp,
             Webidl2Regexp,
             ConsoleRegexp,
+            GenerateTestsRegexp,
             PrintRegexp]]
 
 def check_regexp_line(repo_root, path, f, css_mode):
@@ -636,6 +651,7 @@
             pos_string += ":%s" % line_number
         logger.error("%s: %s (%s)" % (pos_string, description, error_type))
 
+
 def output_errors_markdown(errors):
     if not errors:
         return
@@ -651,6 +667,7 @@
             pos_string += ":%s" % line_number
         logger.error("%s | %s | %s |" % (error_type, pos_string, description))
 
+
 def output_errors_json(errors):
     for error_type, error, path, line_number in errors:
         print(json.dumps({"path": path, "lineno": line_number,
@@ -669,7 +686,34 @@
     else:
         logger.info("There were %d errors (%s)" % (count, by_type))
 
-def parse_args():
+
+def changed_files(wpt_root):
+    revish = testfiles.get_revish(revish=None)
+    changed, _ = testfiles.files_changed(revish, set(), include_uncommitted=True, include_new=True)
+    return [os.path.relpath(item, wpt_root) for item in changed]
+
+
+def lint_paths(kwargs, wpt_root):
+    if kwargs.get("paths"):
+        paths = kwargs["paths"]
+    elif kwargs["all"]:
+        paths = list(all_filesystem_paths(wpt_root))
+    else:
+        changed_paths = changed_files(wpt_root)
+        force_all = False
+        # If we changed the lint itself ensure that we retest everything
+        for path in changed_paths:
+            path = path.replace(os.path.sep, "/")
+            if path == "lint.whitelist" or path.startswith("tools/lint/"):
+                force_all = True
+                break
+        paths = (list(changed_paths) if not force_all
+                 else list(all_filesystem_paths(wpt_root)))
+
+    return paths
+
+
+def create_parser():
     parser = argparse.ArgumentParser()
     parser.add_argument("paths", nargs="*",
                         help="List of paths to lint")
@@ -679,10 +723,12 @@
                         help="Output markdown")
     parser.add_argument("--css-mode", action="store_true",
                         help="Run CSS testsuite specific lints")
-    parser.add_argument("--repo-root", help="This is the root of the WPT directory tree. Use this"
+    parser.add_argument("--repo-root", help="The WPT directory. Use this"
                         "option if the lint script exists outside the repository")
     parser.add_argument("--ignore-glob", help="Additional file glob to ignore.")
-    return parser.parse_args()
+    parser.add_argument("--all", action="store_true", help="If no paths are passed, try to lint the whole "
+                        "working directory, not just files that changed")
+    return parser
 
 
 def main(**kwargs):
@@ -691,16 +737,16 @@
         sys.exit(2)
 
     repo_root = kwargs.get('repo_root') or localpaths.repo_root
-
     output_format = {(True, False): "json",
                      (False, True): "markdown",
                      (False, False): "normal"}[(kwargs.get("json", False),
                                                 kwargs.get("markdown", False))]
 
-    paths = list(kwargs.get("paths") if kwargs.get("paths") else all_filesystem_paths(repo_root))
     if output_format == "markdown":
         setup_logging(True)
 
+    paths = lint_paths(kwargs, repo_root)
+
     ignore_glob = kwargs.get("ignore_glob")
 
     return lint(repo_root, paths, output_format, kwargs.get("css_mode", False), ignore_glob)
@@ -768,12 +814,12 @@
                 logger.info(line)
     return sum(itervalues(error_count))
 
-path_lints = [check_path_length, check_worker_collision]
+path_lints = [check_path_length, check_worker_collision, check_ahem_copy]
 all_paths_lints = [check_css_globally_unique]
 file_lints = [check_regexp_line, check_parsed, check_python_ast, check_script_metadata]
 
 if __name__ == "__main__":
-    args = parse_args()
+    args = create_parser().parse_args()
     error_count = main(**vars(args))
     if error_count > 0:
         sys.exit(1)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/localpaths.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/localpaths.py
index c932ef4b..9d59cf81 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/localpaths.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/localpaths.py
@@ -5,7 +5,6 @@
 repo_root = os.path.abspath(os.path.join(here, os.pardir))
 
 sys.path.insert(0, os.path.join(here))
-sys.path.insert(0, os.path.join(here, "browserutils"))
 sys.path.insert(0, os.path.join(here, "six"))
 sys.path.insert(0, os.path.join(here, "html5lib"))
 sys.path.insert(0, os.path.join(here, "wptserve"))
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/commands.json b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/commands.json
new file mode 100644
index 0000000..322cc598
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/commands.json
@@ -0,0 +1,3 @@
+{"manifest":
+ {"path": "update.py", "script": "run", "parser": "create_parser", "help": "Update the MANIFEST.json file",
+  "virtualenv": false}}
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/log.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/log.py
index 671154b..55ff6e8 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/log.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/log.py
@@ -2,11 +2,13 @@
 import sys
 
 logger = logging.getLogger("manifest")
-logger.setLevel(logging.DEBUG)
-handler = logging.StreamHandler(sys.stdout)
-formatter = logging.Formatter(logging.BASIC_FORMAT, None)
-handler.setFormatter(formatter)
-logger.addHandler(handler)
+
+def setup():
+    logger.setLevel(logging.DEBUG)
+    handler = logging.StreamHandler(sys.stdout)
+    formatter = logging.Formatter(logging.BASIC_FORMAT, None)
+    handler.setFormatter(formatter)
+    logger.addHandler(handler)
 
 def get_logger():
     return logger
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/manifest.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/manifest.py
index b510006b..b153798 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/manifest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/manifest.py
@@ -51,6 +51,15 @@
             for test in type_tests.get(path, set()):
                 yield test
 
+    def iterdir(self, dir_name):
+        if not dir_name.endswith(os.path.sep):
+            dir_name = dir_name + os.path.sep
+        for type_tests in self._data.values():
+            for path, tests in type_tests.iteritems():
+                if path.startswith(dir_name):
+                    for test in tests:
+                        yield test
+
     @property
     def reftest_nodes_by_url(self):
         if self._reftest_nodes_by_url is None:
@@ -228,6 +237,9 @@
 
 
 def write(manifest, manifest_path):
+    dir_name = os.path.dirname(manifest_path)
+    if not os.path.exists(dir_name):
+        os.makedirs(dir_name)
     with open(manifest_path, "wb") as f:
         json.dump(manifest.to_json(), f, sort_keys=True, indent=1, separators=(',', ': '))
         f.write("\n")
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/sourcefile.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/sourcefile.py
index 0798c44..758da81 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/sourcefile.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/sourcefile.py
@@ -227,7 +227,7 @@
         rel_dir_tree = self.rel_path.split(os.path.sep)
         return (rel_dir_tree[0] == "webdriver" and
                 len(rel_dir_tree) > 1 and
-                self.filename != "__init__.py" and
+                self.filename not in ("__init__.py", "conftest.py") and
                 fnmatch(self.filename, wd_pattern))
 
     @property
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/update.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/update.py
index be34441..0bbbefb 100755
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/update.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/update.py
@@ -10,6 +10,8 @@
 
 here = os.path.dirname(__file__)
 
+wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir))
+
 
 def update(tests_root, manifest, working_copy=False):
     tree = None
@@ -57,7 +59,7 @@
     parser.add_argument(
         "-p", "--path", type=abs_path, help="Path to manifest file.")
     parser.add_argument(
-        "--tests-root", type=abs_path, help="Path to root of tests.")
+        "--tests-root", type=abs_path, default=wpt_root, help="Path to root of tests.")
     parser.add_argument(
         "-r", "--rebuild", action="store_true", default=False,
         help="Force a full rebuild of the manifest.")
@@ -81,24 +83,14 @@
     return rv
 
 
-def main(default_tests_root=None):
+def run(**kwargs):
+    if kwargs["path"] is None:
+        kwargs["path"] = os.path.join(kwargs["tests_root"], "MANIFEST.json")
+
+    update_from_cli(**kwargs)
+
+
+def main():
     opts = create_parser().parse_args()
 
-    if opts.tests_root is None:
-        tests_root = None
-        if default_tests_root is not None:
-            tests_root = default_tests_root
-        else:
-            tests_root = find_top_repo()
-
-        if tests_root is None:
-            print >> sys.stderr, """No git repo found; could not determine test root.
-Run again with --test-root"""
-            sys.exit(1)
-
-        opts.tests_root = tests_root
-
-    if opts.path is None:
-        opts.path = os.path.join(opts.tests_root, "MANIFEST.json")
-
-    update_from_cli(**vars(opts))
+    run(**vars(opts))
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/serve/commands.json b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/serve/commands.json
new file mode 100644
index 0000000..abcb297
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/serve/commands.json
@@ -0,0 +1,2 @@
+{"serve": {"path": "serve.py", "script": "run", "parser": "get_parser", "help": "Run wptserve server",
+             "virtualenv": false}}
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/serve/serve.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/serve/serve.py
index c099136..96417c32 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/serve/serve.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/serve/serve.py
@@ -40,6 +40,8 @@
 
     __meta__ = abc.ABCMeta
 
+    headers = []
+
     def __init__(self, base_path=None, url_base="/"):
         self.base_path = base_path
         self.url_base = url_base
@@ -49,6 +51,9 @@
         self.handler(request, response)
 
     def handle_request(self, request, response):
+        for header_name, header_value in self.headers:
+            response.headers.set(header_name, header_value)
+
         path = self._get_path(request.url_parts.path, True)
         meta = "\n".join(self._get_meta(request))
         response.content = self.wrapper % {"meta": meta, "path": path}
@@ -169,6 +174,7 @@
 
 
 class AnyWorkerHandler(WrapperHandler):
+    headers = [('Content-Type', 'text/javascript')]
     path_replace = [(".any.worker.js", ".any.js")]
     wrapper = """%(meta)s
 self.GLOBAL = {
@@ -762,10 +768,9 @@
     return parser
 
 
-def main():
-    kwargs = vars(get_parser().parse_args())
-    config = load_config("config.default.json",
-                         "config.json",
+def run(**kwargs):
+    config = load_config(os.path.join(repo_root, "config.default.json"),
+                         os.path.join(repo_root, "config.json"),
                          **kwargs)
 
     setup_logger(config["log_level"])
@@ -784,3 +789,8 @@
                         item.join(1)
             except KeyboardInterrupt:
                 logger.info("Shutting down")
+
+
+def main():
+    kwargs = vars(get_parser().parse_args())
+    return run(**kwargs)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/__init__.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/__init__.py
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/browser.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/browser.py
new file mode 100644
index 0000000..68ffb2a
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/browser.py
@@ -0,0 +1,374 @@
+import logging
+import os
+import platform
+import re
+import stat
+from abc import ABCMeta, abstractmethod
+from ConfigParser import RawConfigParser
+from distutils.spawn import find_executable
+
+from utils import call, get, untar, unzip
+
+logger = logging.getLogger(__name__)
+
+uname = platform.uname()
+
+def path(path, exe):
+    path = path.replace("/", os.path.sep)
+    if exe and uname[0] == "Windows":
+        path += ".exe"
+    return path
+
+
+class Browser(object):
+    __metaclass__ = ABCMeta
+
+    @abstractmethod
+    def install(self, dest=None):
+        return NotImplemented
+
+    @abstractmethod
+    def install_webdriver(self):
+        return NotImplemented
+
+    @abstractmethod
+    def version(self):
+        return NotImplemented
+
+    @abstractmethod
+    def requirements(self):
+        """Name of the browser-specific wptrunner requirements file"""
+        return NotImplemented
+
+    def prepare_environment(self):
+        """Do any additional setup of the environment required to start the
+           browser successfully
+        """
+        pass
+
+
+class Firefox(Browser):
+    """Firefox-specific interface.
+
+    Includes installation, webdriver installation, and wptrunner setup methods.
+    """
+
+    product = "firefox"
+    binary = "firefox/firefox"
+    platform_ini = "firefox/platform.ini"
+    requirements = "requirements_firefox.txt"
+
+
+    def platform_string(self):
+        platform = {
+            "Linux": "linux",
+            "Windows": "win",
+            "Darwin": "mac"
+        }.get(uname[0])
+
+        if platform is None:
+            raise ValueError("Unable to construct a valid Firefox package name for current platform")
+
+        if platform == "linux":
+            bits = "-%s" % uname[-1]
+        elif platform == "win":
+            bits = "64" if uname[-1] == "x86_64" else "32"
+        else:
+            bits = ""
+
+        return "%s%s" % (platform, bits)
+
+    def platform_string_geckodriver(self):
+        platform = {
+            "Linux": "linux",
+            "Windows": "win",
+            "Darwin": "macos"
+        }.get(uname[0])
+
+        if platform is None:
+            raise ValueError("Unable to construct a valid Geckodriver package name for current platform")
+
+        if platform in ("linux", "win"):
+            bits = "64" if uname[-1] == "x86_64" else "32"
+        else:
+            bits = ""
+
+        return "%s%s" % (platform, bits)
+
+    def latest_nightly_listing(self):
+        return get("https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/")
+
+    def get_from_nightly(self, pattern):
+        index = self.latest_nightly_listing()
+        filename = re.compile(pattern).search(index.text).group(1)
+        return get("https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/%s" %
+                   filename)
+
+    def install(self, dest=None):
+        """Install Firefox."""
+        if dest is None:
+            dest = os.getcwd()
+
+        resp = self.get_from_nightly("<a[^>]*>(firefox-\d+\.\d(?:\w\d)?.en-US.%s\.tar\.bz2)" % self.platform_string())
+        untar(resp.raw, dest=dest)
+        return find_executable("firefox", os.path.join(dest, "firefox"))
+
+    def find_binary(self, path=None):
+        return find_executable("firefox", path)
+
+    def find_certutil(self):
+        path = find_executable("certutil")
+        if path is None:
+            return None
+        if os.path.splitdrive(path)[1].split(os.path.sep) == ["", "Windows", "system32", "certutil.exe"]:
+            return None
+        return path
+
+    def find_webdriver(self):
+        return find_executable("geckodriver")
+
+    def install_certutil(self, dest=None):
+        # TODO: this doesn't really work because it just gets the binary, and is missing the
+        # libnss3 library. Getting that means either downloading the corresponding Firefox
+        # and extracting the library (which is hard on mac becase DMG), or maybe downloading from
+        # nss's treeherder builds?
+        if dest is None:
+            dest = os.pwd
+
+        # Don't create a path like bin/bin/certutil
+        split = os.path.split(dest)
+        if split[1] == "bin":
+            dest = split[0]
+
+        resp = self.get_from_nightly(
+            "<a[^>]*>(firefox-\d+\.\d(?:\w\d)?.en-US.%s\.common\.tests.zip)</a>" % self.platform_string())
+        bin_path = path("bin/certutil", exe=True)
+        unzip(resp.raw, dest=dest, limit=[bin_path])
+
+        return os.path.join(dest, bin_path)
+
+    def install_prefs(self, dest=None):
+        if dest is None:
+            dest = os.pwd
+
+        dest = os.path.join(dest, "profiles")
+        if not os.path.exists(dest):
+            os.makedirs(dest)
+        with open(os.path.join(dest, "prefs_general.js"), "wb") as f:
+            resp = get("https://hg.mozilla.org/mozilla-central/raw-file/tip/testing/profiles/prefs_general.js")
+            f.write(resp.content)
+
+        return dest
+
+    def _latest_geckodriver_version(self):
+        """Get and return latest version number for geckodriver."""
+        # This is used rather than an API call to avoid rate limits
+        tags = call("git", "ls-remote", "--tags", "--refs",
+                    "https://github.com/mozilla/geckodriver.git")
+        release_re = re.compile(".*refs/tags/v(\d+)\.(\d+)\.(\d+)")
+        latest_release = 0
+        for item in tags.split("\n"):
+            m = release_re.match(item)
+            if m:
+                version = [int(item) for item in m.groups()]
+                if version > latest_release:
+                    latest_release = version
+        assert latest_release != 0
+        return "v%s.%s.%s" % tuple(str(item) for item in latest_release)
+
+    def install_webdriver(self, dest=None):
+        """Install latest Geckodriver."""
+        if dest is None:
+            dest = os.getcwd()
+
+        version = self._latest_geckodriver_version()
+        format = "zip" if uname[0] == "Windows" else "tar.gz"
+        logger.debug("Latest geckodriver release %s" % version)
+        url = ("https://github.com/mozilla/geckodriver/releases/download/%s/geckodriver-%s-%s.%s" %
+               (version, version, self.platform_string_geckodriver(), format))
+        if format == "zip":
+            unzip(get(url).raw, dest=dest)
+        else:
+            untar(get(url).raw, dest=dest)
+        return find_executable(os.path.join(dest, "geckodriver"))
+
+    def version(self, root):
+        """Retrieve the release version of the installed browser."""
+        platform_info = RawConfigParser()
+
+        with open(os.path.join(root, self.platform_ini), "r") as fp:
+            platform_info.readfp(BytesIO(fp.read()))
+            return "BuildID %s; SourceStamp %s" % (
+                platform_info.get("Build", "BuildID"),
+                platform_info.get("Build", "SourceStamp"))
+
+
+class Chrome(Browser):
+    """Chrome-specific interface.
+
+    Includes installation, webdriver installation, and wptrunner setup methods.
+    """
+
+    product = "chrome"
+    binary = "/usr/bin/google-chrome"
+    requirements = "requirements_chrome.txt"
+
+    def install(self, dest=None):
+        raise NotImplementedError
+
+    def platform_string(self):
+        platform = {
+            "Linux": "linux",
+            "Windows": "win",
+            "Darwin": "mac"
+        }.get(uname[0])
+
+        if platform is None:
+            raise ValueError("Unable to construct a valid Chrome package name for current platform")
+
+        if platform == "linux":
+            bits = "64" if uname[-1] == "x86_64" else "32"
+        elif platform == "mac":
+            bits = "64"
+        elif platform == "win":
+            bits = "32"
+
+        return "%s%s" % (platform, bits)
+
+    def find_webdriver(self):
+        return find_executable("chromedriver")
+
+    def install_webdriver(self, dest=None):
+        """Install latest Webdriver."""
+        if dest is None:
+            dest = os.pwd
+        latest = get("http://chromedriver.storage.googleapis.com/LATEST_RELEASE").text.strip()
+        url = "http://chromedriver.storage.googleapis.com/%s/chromedriver_%s.zip" % (latest,
+                                                                                     self.platform_string())
+        unzip(get(url).raw, dest)
+
+        path = find_executable("chromedriver", dest)
+        st = os.stat(path)
+        os.chmod(path, st.st_mode | stat.S_IEXEC)
+        return path
+
+    def version(self, root):
+        """Retrieve the release version of the installed browser."""
+        output = call(self.binary, "--version")
+        return re.search(r"[0-9\.]+( [a-z]+)?$", output.strip()).group(0)
+
+    def prepare_environment(self):
+        # https://bugs.chromium.org/p/chromium/issues/detail?id=713947
+        logger.debug("DBUS_SESSION_BUS_ADDRESS %s" % os.environ.get("DBUS_SESSION_BUS_ADDRESS"))
+        if "DBUS_SESSION_BUS_ADDRESS" not in os.environ:
+            if find_executable("dbus-launch"):
+                logger.debug("Attempting to start dbus")
+                dbus_conf = subprocess.check_output(["dbus-launch"])
+                logger.debug(dbus_conf)
+
+                # From dbus-launch(1):
+                #
+                # > When dbus-launch prints bus information to standard output,
+                # > by default it is in a simple key-value pairs format.
+                for line in dbus_conf.strip().split("\n"):
+                    key, _, value = line.partition("=")
+                    os.environ[key] = value
+            else:
+                logger.critical("dbus not running and can't be started")
+                sys.exit(1)
+
+
+class Edge(Browser):
+    """Edge-specific interface.
+
+    Includes installation, webdriver installation, and wptrunner setup methods.
+    """
+
+    product = "edge"
+    requirements = "requirements_edge.txt"
+
+    def install(self, dest=None):
+        raise NotImplementedError
+
+    def find_webdriver(self):
+        return find_executable("MicrosoftWebDriver")
+
+    def install_webdriver(self, dest=None):
+        """Install latest Webdriver."""
+        raise NotImplementedError
+
+    def version(self):
+        raise NotImplementedError
+
+
+class InternetExplorer(Browser):
+    """Internet Explorer-specific interface.
+
+    Includes installation, webdriver installation, and wptrunner setup methods.
+    """
+
+    product = "ie"
+    requirements = "requirements_ie.txt"
+
+    def install(self, dest=None):
+        raise NotImplementedError
+
+    def find_webdriver(self):
+        return find_executable("IEDriverServer.exe")
+
+    def install_webdriver(self, dest=None):
+        """Install latest Webdriver."""
+        raise NotImplementedError
+
+    def version(self):
+        raise NotImplementedError
+
+
+class Servo(Browser):
+    """Servo-specific interface.
+
+    Includes installation, webdriver installation, and wptrunner setup methods.
+    """
+
+    product = "servo"
+    requirements = "requirements_servo.txt"
+
+    def install(self, dest=None):
+        raise NotImplementedError
+
+    def find_binary(self, path=None):
+        return find_executable("servo")
+
+    def find_webdriver(self):
+        return None
+
+    def install_webdriver(self):
+        raise NotImplementedError
+
+    def version(self, root):
+        return None
+
+
+class Sauce(Browser):
+    """Sauce-specific interface.
+
+    Includes installation, webdriver installation, and wptrunner setup methods.
+    """
+
+    product = "sauce"
+    requirements = "requirements_sauce.txt"
+
+    def install(self, dest=None):
+        raise NotImplementedError
+
+    def find_binary(self, path=None):
+        return None
+
+    def find_webdriver(self):
+        return None
+
+    def install_webdriver(self):
+        raise NotImplementedError
+
+    def version(self, root):
+        return None
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/commands.json b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/commands.json
new file mode 100644
index 0000000..1ab767fe
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/commands.json
@@ -0,0 +1,9 @@
+{
+    "run": {"path": "run.py", "script": "run", "parser": "create_parser", "help": "Run tests in a browser",
+            "virtualenv": true, "install": ["requests"], "requirements": ["../wptrunner/requirements.txt"]},
+    "files-changed": {"path": "testfiles.py", "script": "run_changed_files", "parser": "get_parser",
+                      "help": "Get a list of files that have changed", "virtualenv": false},
+    "tests-affected": {"path": "testfiles.py", "script": "run_tests_affected", "parser": "get_parser_affected",
+                       "help": "Get a list of tests affected by changes", "virtualenv": false},
+    "install": {"path": "install.py", "script": "run", "parser": "get_parser", "help": "Install browser components"}
+}
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/install.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/install.py
new file mode 100644
index 0000000..408744a
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/install.py
@@ -0,0 +1,46 @@
+import argparse
+import browser
+import sys
+
+def get_parser():
+    parser = argparse.ArgumentParser()
+    parser.add_argument('browser', choices=['firefox', 'chrome'],
+                        help='name of web browser product')
+    parser.add_argument('component', choices=['browser', 'webdriver'],
+                        help='name of component')
+    parser.add_argument('-d', '--destination',
+                        help='filesystem directory to place the component')
+    return parser
+
+
+def run(venv, **kwargs):
+    browser = kwargs["browser"]
+    destination = kwargs["destination"]
+
+    if destination is None:
+        if venv:
+            if kwargs["component"] == "browser":
+                destination = venv.path
+            else:
+                destination = venv.bin_path
+        else:
+            raise argparse.ArgumentError(None,
+                                         "No --destination argument, and no default for the environment")
+
+    install(browser, kwargs["component"], destination)
+
+
+def install(name, component, destination):
+    if component == 'webdriver':
+        method = 'install_webdriver'
+    else:
+        method = 'install'
+
+    subclass = getattr(browser, name.title())
+    sys.stdout.write('Now installing %s %s...\n' % (name, component))
+    getattr(subclass(), method)(dest=destination)
+
+
+if __name__ == '__main__':
+    args = parser.parse_args()
+    run(None, **vars(args))
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/markdown.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/markdown.py
new file mode 100644
index 0000000..8701891
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/markdown.py
@@ -0,0 +1,55 @@
+def format_comment_title(product):
+    """Produce a Markdown-formatted string based on a given "product"--a string
+    containing a browser identifier optionally followed by a colon and a
+    release channel. (For example: "firefox" or "chrome:dev".) The generated
+    title string is used both to create new comments and to locate (and
+    subsequently update) previously-submitted comments."""
+    parts = product.split(":")
+    title = parts[0].title()
+
+    if len(parts) > 1:
+        title += " (%s)" % parts[1]
+
+    return "# %s #" % title
+
+
+def markdown_adjust(s):
+    """Escape problematic markdown sequences."""
+    s = s.replace('\t', u'\\t')
+    s = s.replace('\n', u'\\n')
+    s = s.replace('\r', u'\\r')
+    s = s.replace('`', u'')
+    s = s.replace('|', u'\\|')
+    return s
+
+
+def table(headings, data, log):
+    """Create and log data to specified logger in tabular format."""
+    cols = range(len(headings))
+    assert all(len(item) == len(cols) for item in data)
+    max_widths = reduce(lambda prev, cur: [(len(cur[i]) + 2)
+                                           if (len(cur[i]) + 2) > prev[i]
+                                           else prev[i]
+                                           for i in cols],
+                        data,
+                        [len(item) + 2 for item in headings])
+    log("|%s|" % "|".join(item.center(max_widths[i]) for i, item in enumerate(headings)))
+    log("|%s|" % "|".join("-" * max_widths[i] for i in cols))
+    for row in data:
+        log("|%s|" % "|".join(" %s" % row[i].ljust(max_widths[i] - 1) for i in cols))
+    log("")
+
+
+def err_string(results_dict, iterations):
+    """Create and return string with errors from test run."""
+    rv = []
+    total_results = sum(results_dict.values())
+    for key, value in sorted(results_dict.items()):
+        rv.append("%s%s" %
+                  (key, ": %s/%s" % (value, iterations) if value != iterations else ""))
+    if total_results < iterations:
+        rv.append("MISSING: %s/%s" % (iterations - total_results, iterations))
+    rv = ", ".join(rv)
+    if is_inconsistent(results_dict, iterations):
+        rv = "**%s**" % rv
+    return rv
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/paths b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/paths
new file mode 100644
index 0000000..93c97dc
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/paths
@@ -0,0 +1,4 @@
+tools/lint/
+tools/manifest/
+tools/serve/
+tools/wpt/
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/run.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/run.py
new file mode 100644
index 0000000..1567a72
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/run.py
@@ -0,0 +1,419 @@
+import argparse
+import os
+import platform
+import shutil
+import subprocess
+import sys
+import tarfile
+from distutils.spawn import find_executable
+
+wpt_root = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))
+sys.path.insert(0, os.path.abspath(os.path.join(wpt_root, "tools")))
+
+from . import browser, utils, virtualenv
+logger = None
+
+
+class WptrunError(Exception):
+    pass
+
+
+class WptrunnerHelpAction(argparse.Action):
+    def __init__(self,
+                 option_strings,
+                 dest=argparse.SUPPRESS,
+                 default=argparse.SUPPRESS,
+                 help=None):
+        super(WptrunnerHelpAction, self).__init__(
+            option_strings=option_strings,
+            dest=dest,
+            default=default,
+            nargs=0,
+            help=help)
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        from wptrunner import wptcommandline
+        wptparser = wptcommandline.create_parser()
+        wptparser.usage = parser.usage
+        wptparser.print_help()
+        parser.exit()
+
+
+def create_parser():
+    from wptrunner import wptcommandline
+
+    parser = argparse.ArgumentParser(add_help=False)
+    parser.add_argument("product", action="store",
+                        help="Browser to run tests in")
+    parser.add_argument("--yes", "-y", dest="prompt", action="store_false", default=True,
+                        help="Don't prompt before installing components")
+    parser.add_argument("--stability", action="store_true",
+                        help="Stability check tests")
+    parser.add_argument("--install-browser", action="store_true",
+                        help="Install the latest development version of the browser")
+    parser._add_container_actions(wptcommandline.create_parser())
+    return parser
+
+
+def exit(msg):
+    logger.error(msg)
+    sys.exit(1)
+
+
+def args_general(kwargs):
+    kwargs.set_if_none("tests_root", wpt_root)
+    kwargs.set_if_none("metadata_root", wpt_root)
+    kwargs.set_if_none("manifest_update", True)
+
+    if kwargs["ssl_type"] in (None, "pregenerated"):
+        cert_root = os.path.join(wpt_root, "tools", "certs")
+        if kwargs["ca_cert_path"] is None:
+            kwargs["ca_cert_path"] = os.path.join(cert_root, "cacert.pem")
+
+        if kwargs["host_key_path"] is None:
+            kwargs["host_key_path"] = os.path.join(cert_root, "web-platform.test.key")
+
+        if kwargs["host_cert_path"] is None:
+            kwargs["host_cert_path"] = os.path.join(cert_root, "web-platform.test.pem")
+    elif kwargs["ssl_type"] == "openssl":
+        if not find_executable(kwargs["openssl_binary"]):
+            if os.uname()[0] == "Windows":
+                raise WptrunError("""OpenSSL binary not found. If you need HTTPS tests, install OpenSSL from
+
+https://slproweb.com/products/Win32OpenSSL.html
+
+Ensuring that libraries are added to /bin and add the resulting bin directory to
+your PATH.
+
+Otherwise run with --ssl-type=none""")
+            else:
+                raise WptrunError("""OpenSSL not found. If you don't need HTTPS support run with --ssl-type=none,
+otherwise install OpenSSL and ensure that it's on your $PATH.""")
+
+
+def check_environ(product):
+    if product not in ("firefox", "servo"):
+        expected_hosts = ["web-platform.test",
+                          "www.web-platform.test",
+                          "www1.web-platform.test",
+                          "www2.web-platform.test",
+                          "xn--n8j6ds53lwwkrqhv28a.web-platform.test",
+                          "xn--lve-6lad.web-platform.test",
+                          "nonexistent-origin.web-platform.test"]
+        missing_hosts = set(expected_hosts)
+        if platform.uname()[0] != "Windows":
+            hosts_path = "/etc/hosts"
+        else:
+            hosts_path = "C:\Windows\System32\drivers\etc\hosts"
+        with open(hosts_path, "r") as f:
+            for line in f:
+                line = line.split("#", 1)[0].strip()
+                parts = line.split()
+                if len(parts) == 2:
+                    host = parts[1]
+                    missing_hosts.discard(host)
+            if missing_hosts:
+                raise WptrunError("""Missing hosts file configuration. Expected entries like:
+
+%s
+
+See README.md for more details.""" % "\n".join("%s\t%s" %
+                                               ("127.0.0.1" if "nonexistent" not in host else "0.0.0.0", host)
+                                               for host in expected_hosts))
+
+
+class BrowserSetup(object):
+    name = None
+    browser_cls = None
+
+    def __init__(self, venv, prompt=True, sub_product=None):
+        self.browser = self.browser_cls()
+        self.venv = venv
+        self.prompt = prompt
+        self.sub_product = sub_product
+
+    def prompt_install(self, component):
+        if not self.prompt:
+            return True
+        while True:
+            resp = raw_input("Download and install %s [Y/n]? " % component).strip().lower()
+            if not resp or resp == "y":
+                return True
+            elif resp == "n":
+                return False
+
+    def install(self, venv):
+        if self.prompt_install(self.name):
+            return self.browser.install(venv.path)
+
+    def setup(self, kwargs):
+        self.venv.install_requirements(os.path.join(wpt_root, "tools", "wptrunner", self.browser.requirements))
+        self.setup_kwargs(kwargs)
+
+
+class Firefox(BrowserSetup):
+    name = "firefox"
+    browser_cls = browser.Firefox
+
+    def setup_kwargs(self, kwargs):
+        if kwargs["binary"] is None:
+            binary = self.browser.find_binary()
+            if binary is None:
+                raise WptrunError("""Firefox binary not found on $PATH.
+
+Install Firefox or use --binary to set the binary path""")
+            kwargs["binary"] = binary
+
+        if kwargs["certutil_binary"] is None and kwargs["ssl_type"] != "none":
+            certutil = self.browser.find_certutil()
+
+            if certutil is None:
+                # Can't download this for now because it's missing the libnss3 library
+                raise WptrunError("""Can't find certutil.
+
+This must be installed using your OS package manager or directly e.g.
+
+Debian/Ubuntu:
+    sudo apt install libnss3-tools
+
+macOS/Homebrew:
+    brew install nss
+
+Others:
+    Download the firefox archive and common.tests.zip archive for your platform
+    from https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/
+
+   Then extract certutil[.exe] from the tests.zip package and
+   libnss3[.so|.dll|.dynlib] and but the former on your path and the latter on
+   your library path.
+""")
+            else:
+                print("Using certutil %s" % certutil)
+
+            if certutil is not None:
+                kwargs["certutil_binary"] = certutil
+            else:
+                print("Unable to find or install certutil, setting ssl-type to none")
+                kwargs["ssl_type"] = "none"
+
+        if kwargs["webdriver_binary"] is None and "wdspec" in kwargs["test_types"]:
+            webdriver_binary = self.browser.find_webdriver()
+
+            if webdriver_binary is None:
+                install = self.prompt_install("geckodriver")
+
+                if install:
+                    print("Downloading geckodriver")
+                    webdriver_binary = self.browser.install_webdriver(dest=self.venv.bin_path)
+            else:
+                print("Using webdriver binary %s" % webdriver_binary)
+
+            if webdriver_binary:
+                kwargs["webdriver_binary"] = webdriver_binary
+            else:
+                print("Unable to find or install geckodriver, skipping wdspec tests")
+                kwargs["test_types"].remove("wdspec")
+
+        if kwargs["prefs_root"] is None:
+            print("Downloading gecko prefs")
+            prefs_root = self.browser.install_prefs(self.venv.path)
+            kwargs["prefs_root"] = prefs_root
+
+
+class Chrome(BrowserSetup):
+    name = "chrome"
+    browser_cls = browser.Chrome
+
+    def setup_kwargs(self, kwargs):
+        if kwargs["webdriver_binary"] is None:
+            webdriver_binary = self.browser.find_webdriver()
+
+            if webdriver_binary is None:
+                install = self.prompt_install("chromedriver")
+
+                if install:
+                    print("Downloading chromedriver")
+                    webdriver_binary = self.browser.install_webdriver(dest=self.venv.bin_path)
+            else:
+                print("Using webdriver binary %s" % webdriver_binary)
+
+            if webdriver_binary:
+                kwargs["webdriver_binary"] = webdriver_binary
+            else:
+                raise WptrunError("Unable to locate or install chromedriver binary")
+
+
+class Edge(BrowserSetup):
+    name = "edge"
+    browser_cls = browser.Edge
+
+    def install(self, venv):
+        raise NotImplementedError
+
+    def setup_kwargs(self, kwargs):
+        if kwargs["webdriver_binary"] is None:
+            webdriver_binary = self.browser.find_webdriver()
+
+            if webdriver_binary is None:
+                raise WptrunError("""Unable to find WebDriver and we aren't yet clever enough to work out which
+version to download. Please go to the following URL and install the correct
+version for your Edge/Windows release somewhere on the %PATH%:
+
+https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
+""")
+            kwargs["webdriver_binary"] = webdriver_binary
+
+
+class InternetExplorer(BrowserSetup):
+    name = "ie"
+    browser_cls = browser.InternetExplorer
+
+    def install(self, venv):
+        raise NotImplementedError
+
+    def setup_kwargs(self, kwargs):
+        if kwargs["webdriver_binary"] is None:
+            webdriver_binary = self.browser.find_webdriver()
+
+            if webdriver_binary is None:
+                raise WptrunError("""Unable to find WebDriver and we aren't yet clever enough to work out which
+version to download. Please go to the following URL and install the driver for Internet Explorer
+somewhere on the %PATH%:
+
+https://selenium-release.storage.googleapis.com/index.html
+""")
+            kwargs["webdriver_binary"] = webdriver_binary
+
+
+class Sauce(BrowserSetup):
+    name = "sauce"
+    browser_cls = browser.Sauce
+
+    def install(self, venv):
+        raise NotImplementedError
+
+    def setup_kwargs(self, kwargs):
+        kwargs.set_if_none("sauce_browser", self.sub_product[0])
+        kwargs.set_if_none("sauce_version", self.sub_product[1])
+        kwargs["test_types"] = ["testharness", "reftest"]
+
+
+class Servo(BrowserSetup):
+    name = "servo"
+    browser_cls = browser.Servo
+
+    def install(self, venv):
+        raise NotImplementedError
+
+    def setup_kwargs(self, kwargs):
+        if kwargs["binary"] is None:
+            binary = self.browser.find_binary()
+
+            if binary is None:
+                raise WptrunError("Unable to find servo binary on the PATH")
+            kwargs["binary"] = binary
+
+
+product_setup = {
+    "firefox": Firefox,
+    "chrome": Chrome,
+    "edge": Edge,
+    "ie": InternetExplorer,
+    "servo": Servo,
+    "sauce": Sauce,
+}
+
+
+def setup_wptrunner(venv, prompt=True, install=False, **kwargs):
+    from wptrunner import wptrunner, wptcommandline
+
+    global logger
+
+    kwargs = utils.Kwargs(kwargs.iteritems())
+
+    product_parts = kwargs["product"].split(":")
+    kwargs["product"] = product_parts[0]
+    sub_product = product_parts[1:]
+
+    wptrunner.setup_logging(kwargs, {"mach": sys.stdout})
+    logger = wptrunner.logger
+
+    check_environ(kwargs["product"])
+    args_general(kwargs)
+
+    if kwargs["product"] not in product_setup:
+        raise WptrunError("Unsupported product %s" % kwargs["product"])
+
+    setup_cls = product_setup[kwargs["product"]](venv, prompt, sub_product)
+
+    if install:
+        logger.info("Installing browser")
+        kwargs["binary"] = setup_cls.install(venv)
+
+    setup_cls.setup(kwargs)
+
+    wptcommandline.check_args(kwargs)
+
+    wptrunner_path = os.path.join(wpt_root, "tools", "wptrunner")
+
+    venv.install_requirements(os.path.join(wptrunner_path, "requirements.txt"))
+
+    return kwargs
+
+
+def run(venv, **kwargs):
+    #Remove arguments that aren't passed to wptrunner
+    prompt = kwargs.pop("prompt", True)
+    stability = kwargs.pop("stability", True)
+    install_browser = kwargs.pop("install_browser", False)
+
+    kwargs = setup_wptrunner(venv,
+                             prompt=prompt,
+                             install=install_browser,
+                             **kwargs)
+
+    if stability:
+        import stability
+        iterations, results, inconsistent = stability.run(venv, logger, **kwargs)
+
+        def log(x):
+            print(x)
+
+        if inconsistent:
+            stability.write_inconsistent(log, inconsistent, iterations)
+        else:
+            log("All tests stable")
+        rv = len(inconsistent) > 0
+    else:
+        rv = run_single(venv, **kwargs) > 0
+
+    return rv
+
+
+def run_single(venv, **kwargs):
+    from wptrunner import wptrunner
+    return wptrunner.start(**kwargs)
+
+
+def main():
+    try:
+        parser = create_parser()
+        args = parser.parse_args()
+
+        venv = virtualenv.Virtualenv(os.path.join(wpt_root, "_venv_%s") % platform.uname()[0])
+        venv.start()
+        venv.install_requirements(os.path.join(wpt_root, "tools", "wptrunner", "requirements.txt"))
+        venv.install("requests")
+
+        return run(venv, vars(args))
+    except WptrunError as e:
+        exit(e.message)
+
+
+if __name__ == "__main__":
+    import pdb
+    from tools import localpaths
+    try:
+        main()
+    except:
+        pdb.post_mortem()
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/stability.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/stability.py
new file mode 100644
index 0000000..b3c8570
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/stability.py
@@ -0,0 +1,195 @@
+import os
+import sys
+from collections import OrderedDict, defaultdict
+
+from mozlog import reader
+from mozlog.formatters import JSONFormatter, TbplFormatter
+from mozlog.handlers import BaseHandler, LogLevelFilter, StreamHandler
+
+from markdown import markdown_adjust, table
+from wptrunner import wptrunner
+
+
+class LogActionFilter(BaseHandler):
+
+    """Handler that filters out messages not of a given set of actions.
+
+    Subclasses BaseHandler.
+
+    :param inner: Handler to use for messages that pass this filter
+    :param actions: List of actions for which to fire the handler
+    """
+
+    def __init__(self, inner, actions):
+        """Extend BaseHandler and set inner and actions props on self."""
+        BaseHandler.__init__(self, inner)
+        self.inner = inner
+        self.actions = actions
+
+    def __call__(self, item):
+        """Invoke handler if action is in list passed as constructor param."""
+        if item["action"] in self.actions:
+            return self.inner(item)
+
+
+class LogHandler(reader.LogHandler):
+
+    """Handle updating test and subtest status in log.
+
+    Subclasses reader.LogHandler.
+    """
+    def __init__(self):
+        self.results = OrderedDict()
+
+    def find_or_create_test(self, data):
+        test_name = data["test"]
+        if self.results.get(test_name):
+            return self.results[test_name]
+
+        test = {
+            "subtests": OrderedDict(),
+            "status": defaultdict(int)
+        }
+        self.results[test_name] = test
+        return test
+
+    def find_or_create_subtest(self, data):
+        test = self.find_or_create_test(data)
+        subtest_name = data["subtest"]
+
+        if test["subtests"].get(subtest_name):
+            return test["subtests"][subtest_name]
+
+        subtest = {
+            "status": defaultdict(int),
+            "messages": set()
+        }
+        test["subtests"][subtest_name] = subtest
+
+        return subtest
+
+    def test_status(self, data):
+        subtest = self.find_or_create_subtest(data)
+        subtest["status"][data["status"]] += 1
+        if data.get("message"):
+            subtest["messages"].add(data["message"])
+
+    def test_end(self, data):
+        test = self.find_or_create_test(data)
+        test["status"][data["status"]] += 1
+
+
+def is_inconsistent(results_dict, iterations):
+    """Return whether or not a single test is inconsistent."""
+    return len(results_dict) > 1 or sum(results_dict.values()) != iterations
+
+
+def process_results(log, iterations):
+    """Process test log and return overall results and list of inconsistent tests."""
+    inconsistent = []
+    handler = LogHandler()
+    reader.handle_log(reader.read(log), handler)
+    results = handler.results
+    for test_name, test in results.iteritems():
+        if is_inconsistent(test["status"], iterations):
+            inconsistent.append((test_name, None, test["status"], []))
+        for subtest_name, subtest in test["subtests"].iteritems():
+            if is_inconsistent(subtest["status"], iterations):
+                inconsistent.append((test_name, subtest_name, subtest["status"], subtest["messages"]))
+    return results, inconsistent
+
+
+def err_string(results_dict, iterations):
+    """Create and return string with errors from test run."""
+    rv = []
+    total_results = sum(results_dict.values())
+    for key, value in sorted(results_dict.items()):
+        rv.append("%s%s" %
+                  (key, ": %s/%s" % (value, iterations) if value != iterations else ""))
+    if total_results < iterations:
+        rv.append("MISSING: %s/%s" % (iterations - total_results, iterations))
+    rv = ", ".join(rv)
+    if is_inconsistent(results_dict, iterations):
+        rv = "**%s**" % rv
+    return rv
+
+
+def write_inconsistent(log, inconsistent, iterations):
+    """Output inconsistent tests to logger.error."""
+    log("## Unstable results ##\n")
+    strings = [(
+        "`%s`" % markdown_adjust(test),
+        ("`%s`" % markdown_adjust(subtest)) if subtest else "",
+        err_string(results, iterations),
+        ("`%s`" % markdown_adjust(";".join(messages))) if len(messages) else "")
+        for test, subtest, results, messages in inconsistent]
+    table(["Test", "Subtest", "Results", "Messages"], strings, log)
+
+
+def write_results(log, results, iterations, pr_number=None, use_details=False):
+    log("## All results ##\n")
+    if use_details:
+        log("<details>\n")
+        log("<summary>%i %s ran</summary>\n\n" % (len(results),
+                                                  "tests" if len(results) > 1
+                                                  else "test"))
+
+    for test_name, test in results.iteritems():
+        baseurl = "http://w3c-test.org/submissions"
+        if "https" in os.path.splitext(test_name)[0].split(".")[1:]:
+            baseurl = "https://w3c-test.org/submissions"
+        title = test_name
+        if use_details:
+            log("<details>\n")
+            if pr_number:
+                title = "<a href=\"%s/%s%s\">%s</a>" % (baseurl, pr_number, test_name, title)
+            log('<summary>%s</summary>\n\n' % title)
+        else:
+            log("### %s ###" % title)
+        strings = [("", err_string(test["status"], iterations), "")]
+
+        strings.extend(((
+            ("`%s`" % markdown_adjust(subtest_name)) if subtest else "",
+            err_string(subtest["status"], iterations),
+            ("`%s`" % markdown_adjust(';'.join(subtest["messages"]))) if len(subtest["messages"]) else "")
+            for subtest_name, subtest in test["subtests"].items()))
+        table(["Subtest", "Results", "Messages"], strings, log)
+        if use_details:
+            log("</details>\n")
+
+    if use_details:
+        log("</details>\n")
+
+
+def run(venv, logger, **kwargs):
+    kwargs["pause_after_test"] = False
+    if kwargs["repeat"] == 1:
+        kwargs["repeat"] = 10
+
+    handler = LogActionFilter(
+        LogLevelFilter(
+            StreamHandler(
+                sys.stdout,
+                TbplFormatter()
+            ),
+            "WARNING"),
+        ["log", "process_output"])
+
+    # There is a public API for this in the next mozlog
+    initial_handlers = logger._state.handlers
+    logger._state.handlers = []
+
+    with open("raw.log", "wb") as log:
+        # Setup logging for wptrunner that keeps process output and
+        # warning+ level logs only
+        logger.add_handler(handler)
+        logger.add_handler(StreamHandler(log, JSONFormatter()))
+
+        wptrunner.run_tests(**kwargs)
+
+    logger._state.handlers = initial_handlers
+
+    with open("raw.log", "rb") as log:
+        results, inconsistent = process_results(log, kwargs["repeat"])
+
+    return kwargs["repeat"], results, inconsistent
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/testfiles.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/testfiles.py
new file mode 100644
index 0000000..89e6e276
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/testfiles.py
@@ -0,0 +1,286 @@
+import argparse
+import itertools
+import logging
+import os
+import subprocess
+import sys
+
+from ..manifest import manifest, update
+
+here = os.path.dirname(__file__)
+wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir))
+
+logger = logging.getLogger()
+
+
+def get_git_cmd(repo_path):
+    """Create a function for invoking git commands as a subprocess."""
+    def git(cmd, *args):
+        full_cmd = ["git", cmd] + list(item.decode("utf8") if isinstance(item, bytes) else item for item in args)
+        try:
+            logger.debug(" ".join(full_cmd))
+            return subprocess.check_output(full_cmd, cwd=repo_path, stderr=subprocess.STDOUT).decode("utf8").strip()
+        except subprocess.CalledProcessError as e:
+            logger.error("Git command exited with status %i" % e.returncode)
+            logger.error(e.output)
+            sys.exit(1)
+    return git
+
+
+def branch_point():
+    git = get_git_cmd(wpt_root)
+    if os.environ.get("TRAVIS_PULL_REQUEST", "false") != "false":
+        # This is a PR, so the base branch is in TRAVIS_BRANCH
+        travis_branch = os.environ.get("TRAVIS_BRANCH")
+        assert travis_branch, "TRAVIS_BRANCH environment variable is defined"
+        branch_point = git("rev-parse", travis_branch)
+    else:
+        # Otherwise we aren't on a PR, so we try to find commits that are only in the
+        # current branch c.f.
+        # http://stackoverflow.com/questions/13460152/find-first-ancestor-commit-in-another-branch
+        head = git("rev-parse", "HEAD")
+        not_heads = [item for item in git("rev-parse", "--not", "--all").split("\n")
+                     if item.strip() and head not in item]
+        commits = git("rev-list", "HEAD", *not_heads).split("\n")
+        branch_point = None
+        if len(commits):
+            first_commit = commits[-1]
+            if first_commit:
+                branch_point = git("rev-parse", first_commit + "^")
+
+        # The above heuristic will fail in the following cases:
+        #
+        # - The current branch has fallen behind the version retrieved via the above
+        #   `fetch` invocation
+        # - Changes on the current branch were rebased and therefore do not exist on any
+        #   other branch. This will result in the selection of a commit that is earlier
+        #   in the history than desired (as determined by calculating the later of the
+        #   branch point and the merge base)
+        #
+        # In either case, fall back to using the merge base as the branch point.
+        merge_base = git("merge-base", "HEAD", "origin/master")
+        if (branch_point is None or
+            (branch_point != merge_base and
+             not git("log", "--oneline", "%s..%s" % (merge_base, branch_point)).strip())):
+            logger.debug("Using merge-base as the branch point")
+            branch_point = merge_base
+        else:
+            logger.debug("Using first commit on another branch as the branch point")
+
+    logger.debug("Branch point from master: %s" % branch_point)
+    return branch_point
+
+
+def files_changed(revish, ignore_dirs=None, include_uncommitted=False, include_new=False):
+    """Get and return files changed since current branch diverged from master,
+    excluding those that are located within any directory specifed by
+    `ignore_changes`."""
+    if ignore_dirs is None:
+        ignore_dirs = []
+
+    git = get_git_cmd(wpt_root)
+    files = git("diff", "--name-only", "-z", revish).split("\0")
+    assert not files[-1]
+    files = set(files[:-1])
+
+    if include_uncommitted:
+        entries = git("status", "-z").split("\0")
+        assert not entries[-1]
+        entries = entries[:-1]
+        for item in entries:
+            status, path = item.split()
+            if status == "??" and not include_new:
+                continue
+            else:
+                if not os.path.isdir(path):
+                    files.add(path)
+                else:
+                    for dirpath, dirnames, filenames in os.walk(path):
+                        for filename in filenames:
+                            files.add(os.path.join(dirpath, filename))
+
+    if not files:
+        return [], []
+
+    changed = []
+    ignored = []
+    for item in sorted(files):
+        fullpath = os.path.join(wpt_root, item)
+        topmost_dir = item.split(os.sep, 1)[0]
+        if topmost_dir in ignore_dirs:
+            ignored.append(fullpath)
+        else:
+            changed.append(fullpath)
+
+    return changed, ignored
+
+
+def _in_repo_root(full_path):
+    rel_path = os.path.relpath(full_path, wpt_root)
+    path_components = rel_path.split(os.sep)
+    return len(path_components) < 2
+
+def _init_manifest_cache():
+    c = {}
+
+    def load(manifest_path=None):
+        if manifest_path is None:
+            manifest_path = os.path.join(wpt_root, "MANIFEST.json")
+        if c.get(manifest_path):
+            return c[manifest_path]
+        # cache at most one path:manifest
+        c.clear()
+        wpt_manifest = manifest.load(wpt_root, manifest_path)
+        if wpt_manifest is None:
+            wpt_manifest = manifest.Manifest()
+        update.update(wpt_root, wpt_manifest)
+        c[manifest_path] = wpt_manifest
+        return c[manifest_path]
+    return load
+
+load_manifest = _init_manifest_cache()
+
+
+def affected_testfiles(files_changed, skip_tests, manifest_path=None):
+    """Determine and return list of test files that reference changed files."""
+    affected_testfiles = set()
+    # Exclude files that are in the repo root, because
+    # they are not part of any test.
+    files_changed = [f for f in files_changed if not _in_repo_root(f)]
+    nontests_changed = set(files_changed)
+    wpt_manifest = load_manifest(manifest_path)
+
+    test_types = ["testharness", "reftest", "wdspec"]
+    support_files = {os.path.join(wpt_root, path)
+                     for _, path, _ in wpt_manifest.itertypes("support")}
+    wdspec_test_files = {os.path.join(wpt_root, path)
+                         for _, path, _ in wpt_manifest.itertypes("wdspec")}
+    test_files = {os.path.join(wpt_root, path)
+                  for _, path, _ in wpt_manifest.itertypes(*test_types)}
+
+    nontests_changed = nontests_changed.intersection(support_files)
+
+    tests_changed = set(item for item in files_changed if item in test_files)
+
+    nontest_changed_paths = set()
+    for full_path in nontests_changed:
+        rel_path = os.path.relpath(full_path, wpt_root)
+        path_components = rel_path.split(os.sep)
+        top_level_subdir = path_components[0]
+        if top_level_subdir in skip_tests:
+            continue
+        repo_path = "/" + os.path.relpath(full_path, wpt_root).replace(os.path.sep, "/")
+        nontest_changed_paths.add((full_path, repo_path))
+
+    def affected_by_wdspec(test):
+        affected = False
+        if test in wdspec_test_files:
+            for support_full_path, _ in nontest_changed_paths:
+                # parent of support file or of "support" directory
+                parent = os.path.dirname(support_full_path)
+                if os.path.basename(parent) == "support":
+                    parent = os.path.dirname(parent)
+                relpath = os.path.relpath(test, parent)
+                if not relpath.startswith(os.pardir):
+                    # testfile is in subtree of support file
+                    affected = True
+                    break
+        return affected
+
+    for root, dirs, fnames in os.walk(wpt_root):
+        # Walk top_level_subdir looking for test files containing either the
+        # relative filepath or absolute filepath to the changed files.
+        if root == wpt_root:
+            for dir_name in skip_tests:
+                dirs.remove(dir_name)
+        for fname in fnames:
+            test_full_path = os.path.join(root, fname)
+            # Skip any file that's not a test file.
+            if test_full_path not in test_files:
+                continue
+            if affected_by_wdspec(test_full_path):
+                affected_testfiles.add(test_full_path)
+                continue
+
+            with open(test_full_path, "rb") as fh:
+                file_contents = fh.read()
+                if file_contents.startswith("\xfe\xff"):
+                    file_contents = file_contents.decode("utf-16be", "replace")
+                elif file_contents.startswith("\xff\xfe"):
+                    file_contents = file_contents.decode("utf-16le", "replace")
+                else:
+                    file_contents = file_contents.decode("utf8", "replace")
+                for full_path, repo_path in nontest_changed_paths:
+                    rel_path = os.path.relpath(full_path, root).replace(os.path.sep, "/")
+                    if rel_path in file_contents or repo_path in file_contents:
+                        affected_testfiles.add(test_full_path)
+                        continue
+
+    return tests_changed, affected_testfiles
+
+
+def get_parser():
+    parser = argparse.ArgumentParser()
+    parser.add_argument("revish", default=None, help="Commits to consider. Defaults to the commits on the current branch", nargs="?")
+    parser.add_argument("--ignore-dirs", nargs="*", type=set, default=set(["resources"]),
+                        help="Directories to exclude from the list of changes")
+    parser.add_argument("--modified", action="store_true",
+                        help="Include files under version control that have been modified or staged")
+    parser.add_argument("--new", action="store_true",
+                        help="Include files in the worktree that are not in version control")
+    parser.add_argument("--show-type", action="store_true",
+                        help="Print the test type along with each affected test")
+    return parser
+
+
+def get_parser_affected():
+    parser = get_parser()
+    parser.add_argument("--metadata",
+                        dest="metadata_root",
+                        action="store",
+                        default=wpt_root,
+                        help="Directory that will contain MANIFEST.json")
+    return parser
+
+def get_revish(**kwargs):
+    revish = kwargs["revish"]
+    if kwargs["revish"] is None:
+        revish = "%s..HEAD" % branch_point()
+    return revish
+
+
+def run_changed_files(**kwargs):
+    revish = get_revish(**kwargs)
+    changed, _ = files_changed(revish, kwargs["ignore_dirs"],
+                               include_uncommitted=kwargs["modified"],
+                               include_new=kwargs["new"])
+    for item in sorted(changed):
+        print(os.path.relpath(item, wpt_root))
+
+
+def run_tests_affected(**kwargs):
+    revish = get_revish(**kwargs)
+    changed, _ = files_changed(revish, kwargs["ignore_dirs"],
+                               include_uncommitted=kwargs["modified"],
+                               include_new=kwargs["new"])
+    manifest_path = os.path.join(kwargs["metadata_root"], "MANIFEST.json")
+    tests_changed, dependents = affected_testfiles(
+        changed,
+        set(["conformance-checkers", "docs", "tools"]),
+        manifest_path=manifest_path
+    )
+
+    message = "{path}"
+    if kwargs["show_type"]:
+        wpt_manifest = load_manifest(manifest_path)
+        message = "{path}\t{item_type}"
+    for item in sorted(tests_changed | dependents):
+        results = {
+            "path": os.path.relpath(item, wpt_root)
+        }
+        if kwargs["show_type"]:
+            item_types = {i.item_type for i in wpt_manifest.iterpath(results["path"])}
+            if len(item_types) != 1:
+                item_types = [" ".join(item_types)]
+            results["item_type"] = item_types.pop()
+        print(message.format(**results))
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/utils.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/utils.py
new file mode 100644
index 0000000..32e780f
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/utils.py
@@ -0,0 +1,113 @@
+import logging
+import os
+import subprocess
+import sys
+import tarfile
+import zipfile
+from io import BytesIO
+
+logger = logging.getLogger(__name__)
+
+
+class Kwargs(dict):
+    def set_if_none(self, name, value, err_fn=None, desc=None, extra_cond=None):
+        if desc is None:
+            desc = name
+
+        if self[name] is None:
+            if extra_cond is not None and not extra_cond(self):
+                return
+            if callable(value):
+                value = value()
+            if not value:
+                if err_fn is not None:
+                    return err_fn(kwargs, "Failed to find %s" % desc)
+                else:
+                    return
+            self[name] = value
+            logger.info("Set %s to %s" % (desc, value))
+
+
+def call(*args):
+    """Log terminal command, invoke it as a subprocess.
+
+    Returns a bytestring of the subprocess output if no error.
+    """
+    logger.debug("%s" % " ".join(args))
+    try:
+        return subprocess.check_output(args)
+    except subprocess.CalledProcessError as e:
+        logger.critical("%s exited with return code %i" %
+                        (e.cmd, e.returncode))
+        logger.critical(e.output)
+        raise
+
+
+def get_git_cmd(repo_path):
+    """Create a function for invoking git commands as a subprocess."""
+    def git(cmd, *args):
+        full_cmd = ["git", cmd] + list(args)
+        try:
+            logger.debug(" ".join(full_cmd))
+            return subprocess.check_output(full_cmd, cwd=repo_path, stderr=subprocess.STDOUT).strip()
+        except subprocess.CalledProcessError as e:
+            logger.error("Git command exited with status %i" % e.returncode)
+            logger.error(e.output)
+            sys.exit(1)
+    return git
+
+
+def seekable(fileobj):
+    """Attempt to use file.seek on given file, with fallbacks."""
+    try:
+        fileobj.seek(fileobj.tell())
+    except Exception:
+        return BytesIO(fileobj.read())
+    else:
+        return fileobj
+
+
+def untar(fileobj, dest="."):
+    """Extract tar archive."""
+    logger.debug("untar")
+    fileobj = seekable(fileobj)
+    with tarfile.open(fileobj=fileobj) as tar_data:
+        tar_data.extractall(path=dest)
+
+
+def unzip(fileobj, dest=None, limit=None):
+    """Extract zip archive."""
+    logger.debug("unzip")
+    fileobj = seekable(fileobj)
+    with zipfile.ZipFile(fileobj) as zip_data:
+        for info in zip_data.infolist():
+            if limit is not None and info.filename not in limit:
+                continue
+            zip_data.extract(info, path=dest)
+            perm = info.external_attr >> 16 & 0x1FF
+            os.chmod(os.path.join(dest, info.filename), perm)
+
+
+class pwd(object):
+    """Create context for temporarily changing present working directory."""
+    def __init__(self, dir):
+        self.dir = dir
+        self.old_dir = None
+
+    def __enter__(self):
+        self.old_dir = os.path.abspath(os.curdir)
+        os.chdir(self.dir)
+
+    def __exit__(self, *args, **kwargs):
+        os.chdir(self.old_dir)
+        self.old_dir = None
+
+
+def get(url):
+    """Issue GET request to a given URL and return the response."""
+    import requests
+
+    logger.debug("GET %s" % url)
+    resp = requests.get(url, stream=True)
+    resp.raise_for_status()
+    return resp
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/virtualenv.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/virtualenv.py
new file mode 100644
index 0000000..8f36aa9
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/virtualenv.py
@@ -0,0 +1,52 @@
+import os
+import sys
+import logging
+from distutils.spawn import find_executable
+
+from tools.wpt.utils import call
+
+logger = logging.getLogger(__name__)
+
+class Virtualenv(object):
+    def __init__(self, path):
+        self.path = path
+        self.virtualenv = find_executable("virtualenv")
+        if not self.virtualenv:
+            raise ValueError("virtualenv must be installed and on the PATH")
+
+    @property
+    def exists(self):
+        return os.path.isdir(self.path)
+
+    def create(self):
+        if os.path.exists(self.path):
+            shutil.rmtree(self.path)
+        call(self.virtualenv, self.path)
+
+    @property
+    def bin_path(self):
+        if sys.platform in ("win32", "cygwin"):
+            return os.path.join(self.path, "Scripts")
+        return os.path.join(self.path, "bin")
+
+    @property
+    def pip_path(self):
+        path = find_executable("pip", self.bin_path)
+        if path is None:
+            raise ValueError("pip not found")
+        return path
+
+    def activate(self):
+        path = os.path.join(self.bin_path, "activate_this.py")
+        execfile(path, {"__file__": path})
+
+    def start(self):
+        if not self.exists:
+            self.create()
+        self.activate()
+
+    def install(self, *requirements):
+        call(self.pip_path, "install", *requirements)
+
+    def install_requirements(self, requirements_path):
+        call(self.pip_path, "install", "-r", requirements_path)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/wpt.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/wpt.py
new file mode 100644
index 0000000..cf94ce03
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wpt/wpt.py
@@ -0,0 +1,142 @@
+import argparse
+import os
+import json
+import sys
+
+from tools import localpaths
+
+from six import iteritems
+from . import virtualenv
+
+
+here = os.path.dirname(__file__)
+wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir))
+
+
+def load_commands():
+    rv = {}
+    with open(os.path.join(here, "paths"), "r") as f:
+        paths = [item.strip().replace("/", os.path.sep) for item in f if item.strip()]
+    for path in paths:
+        abs_path = os.path.join(wpt_root, path, "commands.json")
+        base_dir = os.path.dirname(abs_path)
+        with open(abs_path, "r") as f:
+            data = json.load(f)
+            for command, props in iteritems(data):
+                assert "path" in props
+                assert "script" in props
+                rv[command] = {
+                    "path": os.path.join(base_dir, props["path"]),
+                    "script": props["script"],
+                    "parser": props.get("parser"),
+                    "parse_known": props.get("parse_known", False),
+                    "help": props.get("help"),
+                    "virtualenv": props.get("virtualenv", True),
+                    "install": props.get("install", []),
+                    "requirements": [os.path.join(base_dir, item)
+                                     for item in props.get("requirements", [])]
+                }
+    return rv
+
+
+def parse_args(argv, commands):
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--venv", action="store", help="Path to an existing virtualenv to use")
+    parser.add_argument("--debug", action="store_true", help="Run the debugger in case of an exception")
+    subparsers = parser.add_subparsers(dest="command")
+    for command, props in iteritems(commands):
+        sub_parser = subparsers.add_parser(command, help=props["help"], add_help=False)
+
+    args, extra = parser.parse_known_args(argv)
+
+    return args, extra
+
+
+def import_command(prog, command, props):
+    # This currently requires the path to be a module,
+    # which probably isn't ideal but it means that relative
+    # imports inside the script work
+    rel_path = os.path.relpath(props["path"], wpt_root)
+
+    parts = os.path.splitext(rel_path)[0].split(os.path.sep)
+
+    mod_name = ".".join(parts)
+
+    mod = __import__(mod_name)
+    for part in parts[1:]:
+        mod = getattr(mod, part)
+
+    script = getattr(mod, props["script"])
+    if props["parser"] is not None:
+        parser = getattr(mod, props["parser"])()
+        parser.prog = "%s %s" % (os.path.basename(prog), command)
+    else:
+        parser = None
+
+    return script, parser
+
+
+def setup_virtualenv(path, props):
+    if path is None:
+        path = os.path.join(wpt_root, "_venv")
+    venv = virtualenv.Virtualenv(path)
+    venv.start()
+    for name in props["install"]:
+        venv.install(name)
+    for path in props["requirements"]:
+        venv.install_requirements(path)
+    return venv
+
+
+def main(prog=None, argv=None):
+    if prog is None:
+        prog = sys.argv[0]
+    if argv is None:
+        argv = sys.argv[1:]
+
+    commands = load_commands()
+
+    main_args, command_args = parse_args(argv, commands)
+
+    if not(len(argv) and argv[0] in commands):
+        sys.exit(1)
+
+    command = main_args.command
+    props = commands[command]
+    venv = None
+    if props["virtualenv"]:
+        venv = setup_virtualenv(main_args.venv, props)
+    script, parser = import_command(prog, command, props)
+    if parser:
+        if props["parse_known"]:
+            kwargs, extras = parser.parse_known_args(command_args)
+            extras = (extras,)
+            kwargs = vars(kwargs)
+        else:
+            extras = ()
+            kwargs = vars(parser.parse_args(command_args))
+    else:
+        extras = ()
+        kwargs = {}
+
+    if venv is not None:
+        args = (venv,) + extras
+    else:
+        args = extras
+
+    if script:
+        try:
+            rv = script(*args, **kwargs)
+            if rv is not None:
+                sys.exit(int(rv))
+        except Exception:
+            if main_args.debug:
+                import pdb
+                pdb.post_mortem()
+            else:
+                raise
+    sys.exit(0)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wptserve/.gitignore b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wptserve/.gitignore
deleted file mode 100644
index 8e87d38..0000000
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wptserve/.gitignore
+++ /dev/null
@@ -1,40 +0,0 @@
-*.py[cod]
-*~
-\#*
-
-docs/_build/
-
-# C extensions
-*.so
-
-# Packages
-*.egg
-*.egg-info
-dist
-build
-eggs
-parts
-bin
-var
-sdist
-develop-eggs
-.installed.cfg
-lib
-lib64
-
-# Installer logs
-pip-log.txt
-
-# Unit test / coverage reports
-.coverage
-.tox
-nosetests.xml
-tests/functional/html/*
-
-# Translations
-*.mo
-
-# Mr Developer
-.mr.developer.cfg
-.project
-.pydevproject
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wptserve/wptserve/response.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wptserve/wptserve/response.py
index 6c073fe..50ff00d 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wptserve/wptserve/response.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wptserve/wptserve/response.py
@@ -465,9 +465,11 @@
             raise ValueError
 
     def flush(self):
-        """Flush the output."""
+        """Flush the output. Returns False if the flush failed due to
+        the socket being closed by the remote end."""
         try:
             self._wfile.flush()
+            return True
         except socket.error:
             # This can happen if the socket got closed by the remote end
-            pass
+            return False
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/wpt b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/wpt
new file mode 100755
index 0000000..a24bc83a
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/wpt
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+if __name__ == "__main__":
+    from tools.wpt import wpt
+    wpt.main()
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/wpt.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/wpt.py
new file mode 100644
index 0000000..0736186c
--- /dev/null
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/wpt.py
@@ -0,0 +1 @@
+execfile("wpt")
\ No newline at end of file
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py
index 792afcb..eeba35ed 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py
@@ -327,7 +327,8 @@
             [
                 [
                     'python',
-                    blink_path + '/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/manifest',
+                    blink_path + '/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/wpt',
+                    'manifest',
                     '--work',
                     '--tests-root',
                     blink_path + '/LayoutTests/external/wpt',
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_manifest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_manifest.py
index 0afdf8d..6e973784 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_manifest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_manifest.py
@@ -125,9 +125,9 @@
         """Generates MANIFEST.json on the specified directory."""
         executive = host.executive
         finder = PathFinder(host.filesystem)
-        manifest_exec_path = finder.path_from_tools_scripts('webkitpy', 'thirdparty', 'wpt', 'wpt', 'manifest')
+        wpt_exec_path = finder.path_from_tools_scripts('webkitpy', 'thirdparty', 'wpt', 'wpt', 'wpt')
 
-        cmd = ['python', manifest_exec_path, '--work', '--tests-root', dest_path]
+        cmd = ['python', wpt_exec_path, 'manifest', '--work', '--tests-root', dest_path]
         _log.debug('Running command: %s', ' '.join(cmd))
         proc = executive.popen(cmd, stdout=executive.PIPE, stderr=executive.PIPE, stdin=executive.PIPE)
         out, err = proc.communicate('')
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_manifest_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_manifest_unittest.py
index a1681f19..fd72080 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_manifest_unittest.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/wpt_manifest_unittest.py
@@ -24,7 +24,8 @@
             [
                 [
                     'python',
-                    webkit_base + '/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/manifest',
+                    webkit_base + '/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/wpt',
+                    'manifest',
                     '--work',
                     '--tests-root',
                     webkit_base + '/LayoutTests/external/wpt',
@@ -48,7 +49,8 @@
             [
                 [
                     'python',
-                    webkit_base + '/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/manifest',
+                    webkit_base + '/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/wpt',
+                    'manifest',
                     '--work',
                     '--tests-root',
                     webkit_base + '/LayoutTests/external/wpt',
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium
index 2511f8e2..9e6e738 100644
--- a/third_party/freetype/README.chromium
+++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@
 Name: FreeType
 URL: http://www.freetype.org/
-Version: VER-2-8-1-9
-Revision: 1ad07c1c79841e54ff3d5c37e28bfb91f402ee84
+Version: VER-2-8-1-23
+Revision: 6f2b6f8f72ffb5017ab00fca83185b21f1a9f56d
 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent
          JPEG Group) licenses"
 License File: src/docs/FTL.TXT
diff --git a/third_party/freetype/roll-freetype.sh b/third_party/freetype/roll-freetype.sh
index 2b70a8b..0ac67c0 100755
--- a/third_party/freetype/roll-freetype.sh
+++ b/third_party/freetype/roll-freetype.sh
@@ -15,7 +15,7 @@
 rm ${TMPFILE} &&
 git add third_party/freetype/include/freetype-custom-config/ftconfig.h &&
 
-FTVERSION=`git -C third_party/freetype/src/ describe` &&
+FTVERSION=`git -C third_party/freetype/src/ describe --long` &&
 FTCOMMIT=`git -C third_party/freetype/src/ rev-parse HEAD` &&
 sed -i "s/^Version: .*\$/Version: ${FTVERSION%-*}/" third_party/freetype/README.chromium &&
 sed -i "s/^Revision: .*\$/Revision: ${FTCOMMIT}/" third_party/freetype/README.chromium &&
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index bd12f408..dcdb497 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -4552,6 +4552,14 @@
   </summary>
 </histogram>
 
+<histogram name="Autofill.CreditCardsDeletedForDisuse">
+  <owner>wuandy@chromium.org</owner>
+  <summary>
+    The number of credit card deleted during a major version upgrade because
+    they have not been used recently enough and are expired.
+  </summary>
+</histogram>
+
 <histogram name="Autofill.CreditCardsSuppressedForDisuse">
   <owner>wuandy@chromium.org</owner>
   <summary>
diff --git a/ui/gl/gl_implementation.cc b/ui/gl/gl_implementation.cc
index 011939b..c97e8f37 100644
--- a/ui/gl/gl_implementation.cc
+++ b/ui/gl/gl_implementation.cc
@@ -82,7 +82,7 @@
 }
 
 GLImplementation GetSoftwareGLImplementation() {
-#if (defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)))
+#if defined(OS_WIN)
   return kGLImplementationSwiftShaderGL;
 #else
   return kGLImplementationOSMesaGL;